diff --git a/configuration.nix b/configuration.nix index b0c613b..7479012 100644 --- a/configuration.nix +++ b/configuration.nix @@ -17,7 +17,6 @@ isMaximal: { lspkind.enable = false; lightbulb.enable = true; lspsaga.enable = false; - nvimCodeActionMenu.enable = isMaximal; trouble.enable = true; lspSignature.enable = true; lsplines.enable = isMaximal; @@ -204,6 +203,7 @@ isMaximal: { go = ["90" "130"]; }; }; + fastaction.enable = true; }; assistant = { diff --git a/docs/manual/configuring/custom-plugins.md b/docs/manual/configuring/custom-plugins.md index 3bcd324..c58c497 100644 --- a/docs/manual/configuring/custom-plugins.md +++ b/docs/manual/configuring/custom-plugins.md @@ -1,7 +1,7 @@ # Custom Plugins {#ch-custom-plugins} **nvf**, by default, exposes a wide variety of plugins as module options -for your convience and bundles necessary dependencies into **nvf**'s runtime. +for your convenience and bundles necessary dependencies into **nvf**'s runtime. In case a plugin is not available in **nvf**, you may consider making a pull request to **nvf** to include it as a module or you may add it to your configuration locally. diff --git a/docs/manual/configuring/dag-entries.md b/docs/manual/configuring/dag-entries.md index 5f4f4f6..d5afa9b 100644 --- a/docs/manual/configuring/dag-entries.md +++ b/docs/manual/configuring/dag-entries.md @@ -11,7 +11,7 @@ entries in nvf: inserted before the rest of the DAG 2. `globalsScript` - used to set globals defined in `vim.globals` 3. `basic` - used to set basic configuration options -4. `theme` - used to set up the theme, which has to be done before other plugins +4. `theme` (this is simply placed before `pluginConfigs`, meaning that surrounding entries don't depend on it) - used to set up the theme, which has to be done before other plugins 5. `pluginConfigs` - the result of the nested `vim.pluginRC` (internal option, see the [Custom Plugins](/index.xhtml#ch-custom-plugins) page for adding your own plugins) DAG, used to set up internal plugins diff --git a/docs/release-notes/rl-0.7.md b/docs/release-notes/rl-0.7.md index 0d607f9..cf250e0 100644 --- a/docs/release-notes/rl-0.7.md +++ b/docs/release-notes/rl-0.7.md @@ -4,6 +4,8 @@ Release notes for release 0.7 ## Breaking Changes and Migration Guide {#sec-breaking-changes-and-migration-guide-0-7} +### `vim.configRC` removed {#sec-vim-configrc-removed} + In v0.7 we are removing `vim.configRC` in favor of making `vim.luaConfigRC` the top-level DAG, and thereby making the entire configuration Lua based. This change introduces a few breaking changes: @@ -24,6 +26,17 @@ making good use of its extensive Lua API. Additionally, Vimscript is slow and brings unnecessary performance overhead while working with different configuration formats. +### `vim.lsp.nvimCodeActionMenu` removed in favor of `vim.ui.fastaction` {#sec-nvim-code-action-menu-deprecation} + +The nvim-code-action-menu plugin has been archived and broken for a long time, +so it's being replaced with a young, but better alternative called +fastaction.nvim. Simply remove everything set under +`vim.lsp.nvimCodeActionMenu`, and set `vim.ui.fastaction.enable` to `true`. + +Note that we are looking to add more alternatives in the future like +dressing.nvim and actions-preview.nvim, in case fastaction doesn't work for +everyone. + ## Changelog {#sec-release-0.7-changelog} [ItsSorae](https://github.com/ItsSorae): @@ -53,6 +66,7 @@ configuration formats. longer filtered and thus should be used instead. - Add dap-go for better dap configurations - Make noice.nvim customizable +- Standardize border style options and add custom borders [rust-tools.nvim]: https://github.com/simrat39/rust-tools.nvim [rustaceanvim]: https://github.com/mrcjkb/rustaceanvim @@ -71,7 +85,8 @@ configuration formats. - Fix "Emac" typo -- Add [new-file-template.nvim] to automatically fill new file contents using templates. +- Add [new-file-template.nvim] to automatically fill new file contents using + templates. [diniamo](https://github.com/diniamo): @@ -93,7 +108,6 @@ configuration formats. plugin's options can now be found under `indentBlankline.setupOpts`, the previous iteration of the module also included out of place/broken options, which have been removed for the time being. These are: - - `listChar` - this was already unused - `fillChar` - this had nothing to do with the plugin, please configure it yourself by adding `vim.opt.listchars:append({ space = '' })` to your @@ -102,6 +116,9 @@ configuration formats. yourself by adding `vim.opt.listchars:append({ eol = '' })` to your lua configuration +- Replace `vim.lsp.nvimCodeActionMenu` with `vim.ui.fastaction`, see the + breaking changes section above for more details + [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 @@ -146,7 +163,31 @@ configuration formats. - Add `nvf-print-config` & `nvf-print-config-path` helper scripts to Neovim closure. Both of those scripts have been automatically added to your PATH upon using neovimConfig or `programs.nvf.enable`. + - `nvf-print-config` will display your `init.lua`, in full. - `nvf-print-config-path` will display the path to _a clone_ of your `init.lua`. This is not the path used by the Neovim wrapper, but an identical clone. + +- Add `vim.ui.breadcrumbs.lualine` to allow fine-tuning breadcrumbs behaviour on + Lualine. Only `vim.ui.breadcrumbs.lualine.winbar` is supported for the time + being. + + - [](#opt-vim.ui.breadcrumbs.lualine.winbar.enable) has been added to allow + controlling the default behaviour of the `nvim-navic` component on Lualine, + which used to occupy `winbar.lualine_c` as long as breadcrumbs are enabled. + - `vim.ui.breadcrumbs.alwaysRender` has been renamed to + [](#opt-vim.ui.breadcrumbs.lualine.winbar.alwaysRender) to be conform to the + new format. + +- Add [basedpyright](https://github.com/detachhead/basedpyright) as a Python LSP + server and make it default. + +- Add [python-lsp-server](https://github.com/python-lsp/python-lsp-server) as an + additional Python LSP server. + +[ppenguin](https://github.com/ppenguin): + +- Telescope: + - Fixed `project-nvim` command and keybinding + - Added default ikeybind/command for `Telescope resume` (`fr`) diff --git a/flake.lock b/flake.lock index 8c0a17b..a39bf46 100644 --- a/flake.lock +++ b/flake.lock @@ -69,11 +69,11 @@ }, "mnw": { "locked": { - "lastModified": 1724456641, - "narHash": "sha256-SMgnviF6ofBPbyV3+rljPGcX0Hn9HBOhgXE10Cyjaic=", + "lastModified": 1726188505, + "narHash": "sha256-3dkxJo6y/aKfwkAg6YnpdiQAoZKgHhWHz7ilGJHCoVU=", "owner": "Gerg-L", "repo": "mnw", - "rev": "c261925dbbf02f523af0e8add844df64fddf0359", + "rev": "ea00b3d2162d85dd085a6ba6d49aa2a186e588e7", "type": "github" }, "original": { @@ -129,11 +129,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1724395761, - "narHash": "sha256-zRkDV/nbrnp3Y8oCADf5ETl1sDrdmAW6/bBVJ8EbIdQ=", + "lastModified": 1726142289, + "narHash": "sha256-Jks8O42La+nm5AMTSq/PvM5O+fUAhIy0Ce1QYqLkyZ4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "ae815cee91b417be55d43781eb4b73ae1ecc396c", + "rev": "280db3decab4cbeb22a4599bd472229ab74d25e1", "type": "github" }, "original": { @@ -571,6 +571,22 @@ "type": "github" } }, + "plugin-fastaction-nvim": { + "flake": false, + "locked": { + "lastModified": 1721396662, + "narHash": "sha256-L7na78FsE+QHlEwxMpiwQcoOPhtmrknvdTZfzUoDANI=", + "owner": "Chaitanyabsprip", + "repo": "fastaction.nvim", + "rev": "2384dea7ba81d2709d0bee0e4bc7a8831ff13a9d", + "type": "github" + }, + "original": { + "owner": "Chaitanyabsprip", + "repo": "fastaction.nvim", + "type": "github" + } + }, "plugin-fidget-nvim": { "flake": false, "locked": { @@ -1052,22 +1068,6 @@ "type": "github" } }, - "plugin-nvim-code-action-menu": { - "flake": false, - "locked": { - "lastModified": 1702287297, - "narHash": "sha256-pY+aP9iBuJhvDZzVEsOHZmnfaq3vUP7TfKEEQrj+Mo8=", - "owner": "weilbith", - "repo": "nvim-code-action-menu", - "rev": "8c7672a4b04d3cc4edd2c484d05b660a9cb34a1b", - "type": "github" - }, - "original": { - "owner": "weilbith", - "repo": "nvim-code-action-menu", - "type": "github" - } - }, "plugin-nvim-colorizer-lua": { "flake": false, "locked": { @@ -1855,6 +1855,7 @@ "plugin-dracula": "plugin-dracula", "plugin-dressing-nvim": "plugin-dressing-nvim", "plugin-elixir-tools": "plugin-elixir-tools", + "plugin-fastaction-nvim": "plugin-fastaction-nvim", "plugin-fidget-nvim": "plugin-fidget-nvim", "plugin-flutter-tools": "plugin-flutter-tools", "plugin-gesture-nvim": "plugin-gesture-nvim", @@ -1885,7 +1886,6 @@ "plugin-nvim-autopairs": "plugin-nvim-autopairs", "plugin-nvim-bufferline-lua": "plugin-nvim-bufferline-lua", "plugin-nvim-cmp": "plugin-nvim-cmp", - "plugin-nvim-code-action-menu": "plugin-nvim-code-action-menu", "plugin-nvim-colorizer-lua": "plugin-nvim-colorizer-lua", "plugin-nvim-cursorline": "plugin-nvim-cursorline", "plugin-nvim-dap": "plugin-nvim-dap", diff --git a/flake.nix b/flake.nix index c00e9b8..0684972 100644 --- a/flake.nix +++ b/flake.nix @@ -133,8 +133,8 @@ flake = false; }; - plugin-nvim-code-action-menu = { - url = "github:weilbith/nvim-code-action-menu"; + plugin-fastaction-nvim = { + url = "github:Chaitanyabsprip/fastaction.nvim"; flake = false; }; diff --git a/flake/modules/home-manager.nix b/flake/modules/home-manager.nix index 66a3552..77b8448 100644 --- a/flake/modules/home-manager.nix +++ b/flake/modules/home-manager.nix @@ -67,7 +67,6 @@ in { formatOnSave = true; lightbulb.enable = true; lspsaga.enable = false; - nvimCodeActionMenu.enable = true; trouble.enable = true; lspSignature.enable = true; rust.enable = false; diff --git a/flake/modules/nixos.nix b/flake/modules/nixos.nix index e1e81f1..022b3d9 100644 --- a/flake/modules/nixos.nix +++ b/flake/modules/nixos.nix @@ -67,7 +67,6 @@ in { formatOnSave = true; lightbulb.enable = true; lspsaga.enable = false; - nvimCodeActionMenu.enable = true; trouble.enable = true; lspSignature.enable = true; rust.enable = false; diff --git a/lib/types/default.nix b/lib/types/default.nix index 928bbae..6751229 100644 --- a/lib/types/default.nix +++ b/lib/types/default.nix @@ -9,7 +9,7 @@ typesCustom = import ./custom.nix {inherit lib;}; in { inherit (typesDag) dagOf; - inherit (typesPlugin) pluginsOpt extraPluginType mkPluginSetupOption luaInline pluginType; + inherit (typesPlugin) pluginsOpt extraPluginType mkPluginSetupOption luaInline pluginType borderType; inherit (typesLanguage) diagnostics mkGrammarOption; inherit (typesCustom) anythingConcatLists char; } diff --git a/lib/types/plugins.nix b/lib/types/plugins.nix index c0e89d6..7d24163 100644 --- a/lib/types/plugins.nix +++ b/lib/types/plugins.nix @@ -51,9 +51,13 @@ }; }; }; + + borderPresets = ["none" "single" "double" "rounded" "solid" "shadow"]; in { inherit extraPluginType fromInputs pluginType; + borderType = either (enum borderPresets) (listOf (either str (listOf str))); + pluginsOpt = { description, example, diff --git a/modules/extra/deprecations.nix b/modules/extra/deprecations.nix index cb06380..388913a 100644 --- a/modules/extra/deprecations.nix +++ b/modules/extra/deprecations.nix @@ -7,5 +7,12 @@ in { Tidalcycles language support has been removed as of 2024-06-06 as it was long unmaintained. If you depended on this functionality, please open an issue. '') + + # 2024-07-20 + (mkRemovedOptionModule ["vim" "lsp" "nvimCodeActionMenu"] '' + nvimCodeActionMenu has been deprecated and removed upstream. As of 0.7, fastaction will be + available under `vim.ui.fastaction` as a replacement. Simply remove everything under + `vim.lsp.nvimCodeActionMenu`, and set `vim.ui.fastaction.enable` to `true`. + '') ]; } diff --git a/modules/neovim/init/basic.nix b/modules/neovim/init/basic.nix index 07bb70d..2114dcb 100644 --- a/modules/neovim/init/basic.nix +++ b/modules/neovim/init/basic.nix @@ -3,11 +3,13 @@ lib, ... }: let - inherit (lib.options) mkOption literalExpression; + inherit (lib.options) mkOption mkEnableOption literalExpression literalMD; inherit (lib.strings) optionalString; - inherit (lib.types) enum bool str int; + inherit (lib.types) enum bool str int either; + inherit (lib.generators) mkLuaInline; inherit (lib.nvim.dag) entryAfter; inherit (lib.nvim.lua) toLuaObject; + inherit (lib.nvim.types) luaInline; cfg = config.vim; in { @@ -158,112 +160,138 @@ in { default = "sensitive"; description = "Set the case sensitivity of search"; }; + + undoFile = { + enable = mkEnableOption "undofile for persistent undo behaviour"; + path = mkOption { + type = either str luaInline; + default = mkLuaInline "vim.fn.stdpath('state') .. '/undo'"; + defaultText = literalMD '' + ```nix + mkLuaInline "vim.fn.stdpath('state') .. '/undo'" + ``` + ''; + example = literalMD '' + ```nix + mkLuaInline "os.getenv('XDG_DATA_HOME') .. '/nvf/undo'" + ``` + ''; + description = "Path to the directory in which undo history will be stored"; + }; + }; }; - config.vim.luaConfigRC.basic = entryAfter ["globalsScript"] '' - -- Settings that are set for everything - vim.o.encoding = "utf-8" - vim.o.hidden = true - vim.opt.shortmess:append("c") - vim.o.expandtab = true - vim.o.mouse = ${toLuaObject cfg.mouseSupport} - vim.o.tabstop = ${toLuaObject cfg.tabWidth} - vim.o.shiftwidth = ${toLuaObject cfg.tabWidth} - vim.o.softtabstop = ${toLuaObject cfg.tabWidth} - vim.o.cmdheight = ${toLuaObject cfg.cmdHeight} - vim.o.updatetime = ${toLuaObject cfg.updateTime} - vim.o.tm = ${toLuaObject cfg.mapTimeout} - vim.o.cursorlineopt = ${toLuaObject cfg.cursorlineOpt} - vim.o.scrolloff = ${toLuaObject cfg.scrollOffset} - vim.g.mapleader = ${toLuaObject cfg.leaderKey} - vim.g.maplocalleader = ${toLuaObject cfg.leaderKey} + config = { + vim.luaConfigRC.basic = entryAfter ["globalsScript"] '' + -- Settings that are set for everything + vim.o.encoding = "utf-8" + vim.o.hidden = true + vim.opt.shortmess:append("c") + vim.o.expandtab = true + vim.o.mouse = ${toLuaObject cfg.mouseSupport} + vim.o.tabstop = ${toLuaObject cfg.tabWidth} + vim.o.shiftwidth = ${toLuaObject cfg.tabWidth} + vim.o.softtabstop = ${toLuaObject cfg.tabWidth} + vim.o.cmdheight = ${toLuaObject cfg.cmdHeight} + vim.o.updatetime = ${toLuaObject cfg.updateTime} + vim.o.tm = ${toLuaObject cfg.mapTimeout} + vim.o.cursorlineopt = ${toLuaObject cfg.cursorlineOpt} + vim.o.scrolloff = ${toLuaObject cfg.scrollOffset} + vim.g.mapleader = ${toLuaObject cfg.leaderKey} + vim.g.maplocalleader = ${toLuaObject cfg.leaderKey} - ${optionalString cfg.splitBelow '' - vim.o.splitbelow = true - ''} + ${optionalString cfg.undoFile.enable '' + vim.o.undofile = true + vim.o.undodir = ${toLuaObject cfg.undoFile.path} + ''} - ${optionalString cfg.splitRight '' - vim.o.splitright = true - ''} + ${optionalString cfg.splitBelow '' + vim.o.splitbelow = true + ''} - ${optionalString cfg.showSignColumn '' - vim.o.signcolumn = "yes" - ''} + ${optionalString cfg.splitRight '' + vim.o.splitright = true + ''} - ${optionalString cfg.autoIndent '' - vim.o.autoindent = true - ''} + ${optionalString cfg.showSignColumn '' + vim.o.signcolumn = "yes" + ''} - ${optionalString cfg.preventJunkFiles '' - vim.o.swapfile = false - vim.o.backup = false - vim.o.writebackup = false - ''} + ${optionalString cfg.autoIndent '' + vim.o.autoindent = true + ''} - ${optionalString (cfg.bell == "none") '' - vim.o.errorbells = false - vim.o.visualbell = false - ''} + ${optionalString cfg.preventJunkFiles '' + vim.o.swapfile = false + vim.o.backup = false + vim.o.writebackup = false + ''} - ${optionalString (cfg.bell == "on") '' - vim.o.visualbell = false - ''} + ${optionalString (cfg.bell == "none") '' + vim.o.errorbells = false + vim.o.visualbell = false + ''} - ${optionalString (cfg.bell == "visual") '' - vim.o.errorbells = false - ''} + ${optionalString (cfg.bell == "on") '' + vim.o.visualbell = false + ''} - ${optionalString (cfg.lineNumberMode == "relative") '' - vim.o.relativenumber = true - ''} + ${optionalString (cfg.bell == "visual") '' + vim.o.errorbells = false + ''} - ${optionalString (cfg.lineNumberMode == "number") '' - vim.o.number = true - ''} + ${optionalString (cfg.lineNumberMode == "relative") '' + vim.o.relativenumber = true + ''} - ${optionalString (cfg.lineNumberMode == "relNumber") '' - vim.o.number = true - vim.o.relativenumber = true - ''} + ${optionalString (cfg.lineNumberMode == "number") '' + vim.o.number = true + ''} - ${optionalString cfg.useSystemClipboard '' - vim.opt.clipboard:append("unnamedplus") - ''} + ${optionalString (cfg.lineNumberMode == "relNumber") '' + vim.o.number = true + vim.o.relativenumber = true + ''} - ${optionalString cfg.syntaxHighlighting '' - vim.cmd("syntax on") - ''} + ${optionalString cfg.useSystemClipboard '' + vim.opt.clipboard:append("unnamedplus") + ''} - ${optionalString (!cfg.wordWrap) '' - vim.o.wrap = false - ''} + ${optionalString cfg.syntaxHighlighting '' + vim.cmd("syntax on") + ''} - ${optionalString cfg.hideSearchHighlight '' - vim.o.hlsearch = false - vim.o.incsearch = true - ''} + ${optionalString (!cfg.wordWrap) '' + vim.o.wrap = false + ''} - ${optionalString cfg.colourTerm '' - vim.o.termguicolors = true - ''} + ${optionalString cfg.hideSearchHighlight '' + vim.o.hlsearch = false + vim.o.incsearch = true + ''} - ${optionalString (!cfg.enableEditorconfig) '' - vim.g.editorconfig = false - ''} + ${optionalString cfg.colourTerm '' + vim.o.termguicolors = true + ''} - ${optionalString (cfg.searchCase == "ignore") '' - vim.o.smartcase = false - vim.o.ignorecase = true - ''} + ${optionalString (!cfg.enableEditorconfig) '' + vim.g.editorconfig = false + ''} - ${optionalString (cfg.searchCase == "smart") '' - vim.o.smartcase = true - vim.o.ignorecase = true - ''} + ${optionalString (cfg.searchCase == "ignore") '' + vim.o.smartcase = false + vim.o.ignorecase = true + ''} - ${optionalString (cfg.searchCase == "sensitive") '' - vim.o.smartcase = false - vim.o.ignorecase = false - ''} - ''; + ${optionalString (cfg.searchCase == "smart") '' + vim.o.smartcase = true + vim.o.ignorecase = true + ''} + + ${optionalString (cfg.searchCase == "sensitive") '' + vim.o.smartcase = false + vim.o.ignorecase = false + ''} + ''; + }; } diff --git a/modules/plugins/languages/python.nix b/modules/plugins/languages/python.nix index a113a6c..61aedce 100644 --- a/modules/plugins/languages/python.nix +++ b/modules/plugins/languages/python.nix @@ -14,7 +14,7 @@ cfg = config.vim.languages.python; - defaultServer = "pyright"; + defaultServer = "basedpyright"; servers = { pyright = { package = pkgs.pyright; @@ -30,6 +30,36 @@ } ''; }; + + basedpyright = { + package = pkgs.basedpyright; + lspConfig = '' + lspconfig.basedpyright.setup{ + capabilities = capabilities; + on_attach = default_on_attach; + cmd = ${ + if isList cfg.lsp.package + then expToLua cfg.lsp.package + else ''{"${cfg.lsp.package}/bin/basedpyright-langserver", "--stdio"}'' + } + } + ''; + }; + + python-lsp-server = { + package = pkgs.python-lsp-server; + lspConfig = '' + lspconfig.pylsp.setup{ + capabilities = capabilities; + on_attach = default_on_attach; + cmd = ${ + if isList cfg.lsp.package + then expToLua cfg.lsp.package + else ''{"${cfg.lsp.package}/bin/pylsp"}'' + } + } + ''; + }; }; defaultFormat = "black"; @@ -61,11 +91,12 @@ black-and-isort = { package = pkgs.writeShellApplication { name = "black"; + runtimeInputs = [pkgs.black pkgs.isort]; text = '' black --quiet - "$@" | isort --profile black - ''; - runtimeInputs = [pkgs.black pkgs.isort]; }; + nullConfig = '' table.insert( ls_sources, diff --git a/modules/plugins/lsp/default.nix b/modules/plugins/lsp/default.nix index f8408aa..a5d5163 100644 --- a/modules/plugins/lsp/default.nix +++ b/modules/plugins/lsp/default.nix @@ -10,7 +10,6 @@ # lsp plugins ./lspsaga - ./nvim-code-action-menu ./trouble ./lsp-signature ./lightbulb diff --git a/modules/plugins/lsp/lspconfig/config.nix b/modules/plugins/lsp/lspconfig/config.nix index 15d42fd..1c1f0a0 100644 --- a/modules/plugins/lsp/lspconfig/config.nix +++ b/modules/plugins/lsp/lspconfig/config.nix @@ -7,6 +7,7 @@ inherit (lib.strings) optionalString; inherit (lib.attrsets) mapAttrs; inherit (lib.nvim.dag) entryAfter; + inherit (lib.nvim.lua) toLuaObject; cfg = config.vim.lsp; in { @@ -22,7 +23,7 @@ in { ${ optionalString config.vim.ui.borders.enable '' - require('lspconfig.ui.windows').default_options.border = '${config.vim.ui.borders.globalStyle}' + require('lspconfig.ui.windows').default_options.border = ${toLuaObject config.vim.ui.borders.globalStyle} '' } ''; diff --git a/modules/plugins/lsp/lspsaga/config.nix b/modules/plugins/lsp/lspsaga/config.nix index 71c9025..6605087 100644 --- a/modules/plugins/lsp/lspsaga/config.nix +++ b/modules/plugins/lsp/lspsaga/config.nix @@ -36,7 +36,7 @@ in { (mkSetLuaBinding mappings.nextDiagnostic "require('lspsaga.diagnostic').navigate('next')") (mkSetLuaBinding mappings.previousDiagnostic "require('lspsaga.diagnostic').navigate('prev')") - (mkIf (!cfg.nvimCodeActionMenu.enable) (mkSetLuaBinding mappings.codeAction "require('lspsaga.codeaction').code_action")) + (mkSetLuaBinding mappings.codeAction "require('lspsaga.codeaction').code_action") (mkIf (!cfg.lspSignature.enable) (mkSetLuaBinding mappings.signatureHelp "require('lspsaga.signaturehelp').signature_help")) ]; }; diff --git a/modules/plugins/lsp/nvim-code-action-menu/config.nix b/modules/plugins/lsp/nvim-code-action-menu/config.nix deleted file mode 100644 index 9acc34d..0000000 --- a/modules/plugins/lsp/nvim-code-action-menu/config.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ - config, - lib, - ... -}: let - inherit (lib.modules) mkIf; - inherit (lib.nvim.dag) entryAnywhere; - inherit (lib.nvim.binds) mkSetBinding addDescriptionsToMappings pushDownDefault; - - cfg = config.vim.lsp; - - self = import ./nvim-code-action-menu.nix {inherit lib;}; - mappingDefinitions = self.options.vim.lsp.nvimCodeActionMenu.mappings; - mappings = addDescriptionsToMappings cfg.nvimCodeActionMenu.mappings mappingDefinitions; -in { - config = mkIf (cfg.enable && cfg.nvimCodeActionMenu.enable) { - vim = { - startPlugins = ["nvim-code-action-menu"]; - - maps.normal = mkSetBinding mappings.open ":CodeActionMenu"; - - binds.whichKey.register = pushDownDefault { - "c" = "+CodeAction"; - }; - - pluginRC.code-action-menu = entryAnywhere '' - -- border configuration - vim.g.code_action_menu_window_border = '${config.vim.ui.borders.plugins.code-action-menu.style}' - - -- show individual sections of the code action menu - ${lib.optionalString cfg.nvimCodeActionMenu.show.details "vim.g.code_action_menu_show_details = true"} - ${lib.optionalString cfg.nvimCodeActionMenu.show.diff "vim.g.code_action_menu_show_diff = true"} - ${lib.optionalString cfg.nvimCodeActionMenu.show.actionKind "vim.g.code_action_menu_show_action_kind = true"} - ''; - }; - }; -} diff --git a/modules/plugins/lsp/nvim-code-action-menu/nvim-code-action-menu.nix b/modules/plugins/lsp/nvim-code-action-menu/nvim-code-action-menu.nix deleted file mode 100644 index c303f7c..0000000 --- a/modules/plugins/lsp/nvim-code-action-menu/nvim-code-action-menu.nix +++ /dev/null @@ -1,20 +0,0 @@ -{lib, ...}: let - inherit (lib.options) mkEnableOption; - inherit (lib.nvim.binds) mkMappingOption; -in { - options.vim.lsp = { - nvimCodeActionMenu = { - enable = mkEnableOption "nvim code action menu"; - - show = { - details = mkEnableOption "Show details" // {default = true;}; - diff = mkEnableOption "Show diff" // {default = true;}; - actionKind = mkEnableOption "Show action kind" // {default = true;}; - }; - - mappings = { - open = mkMappingOption "Open code action menu [nvim-code-action-menu]" "ca"; - }; - }; - }; -} diff --git a/modules/plugins/statusline/lualine/config.nix b/modules/plugins/statusline/lualine/config.nix index d519199..ac587c0 100644 --- a/modules/plugins/statusline/lualine/config.nix +++ b/modules/plugins/statusline/lualine/config.nix @@ -11,7 +11,7 @@ inherit (lib.generators) mkLuaInline; cfg = config.vim.statusline.lualine; - breadcrumbsCfg = config.vim.ui.breadcrumbs; + bCfg = config.vim.ui.breadcrumbs; in { config = mkMerge [ # TODO: move into nvim-tree file @@ -20,13 +20,14 @@ in { extensions = ["nvim-tree"]; }; }) - (mkIf (breadcrumbsCfg.enable && breadcrumbsCfg.source == "nvim-navic") { + + (mkIf (bCfg.enable && bCfg.lualine.winbar.enable && bCfg.source == "nvim-navic") { vim.statusline.lualine.setupOpts = { # TODO: rewrite in new syntax winbar.lualine_c = mkDefault [ [ "navic" - (mkLuaInline "draw_empty = ${boolToString config.vim.ui.breadcrumbs.alwaysRender}") + (mkLuaInline "draw_empty = ${boolToString bCfg.lualine.winbar.alwaysRender}") ] ]; }; @@ -34,7 +35,6 @@ in { (mkIf cfg.enable { vim = { startPlugins = ["lualine"]; - pluginRC.lualine = entryAnywhere '' local lualine = require('lualine') lualine.setup ${toLuaObject cfg.setupOpts} diff --git a/modules/plugins/theme/theme.nix b/modules/plugins/theme/theme.nix index bcc476b..85f8430 100644 --- a/modules/plugins/theme/theme.nix +++ b/modules/plugins/theme/theme.nix @@ -7,7 +7,7 @@ inherit (lib.attrsets) attrNames; inherit (lib.types) bool lines enum; inherit (lib.modules) mkIf; - inherit (lib.nvim.dag) entryAfter; + inherit (lib.nvim.dag) entryBefore; cfg = config.vim.theme; supportedThemes = import ./supported-themes.nix { @@ -45,7 +45,7 @@ in { config = mkIf cfg.enable { vim = { startPlugins = [cfg.name]; - luaConfigRC.theme = entryAfter ["basic"] '' + luaConfigRC.theme = entryBefore ["pluginConfigs"] '' ${cfg.extraConfig} ${supportedThemes.${cfg.name}.setup {inherit (cfg) style transparent;}} ''; diff --git a/modules/plugins/ui/borders/borders.nix b/modules/plugins/ui/borders/borders.nix index 37589dc..cf19d38 100644 --- a/modules/plugins/ui/borders/borders.nix +++ b/modules/plugins/ui/borders/borders.nix @@ -4,31 +4,34 @@ ... }: let inherit (lib.options) mkOption mkEnableOption; - inherit (lib.lists) optionals; - inherit (lib.types) enum; + inherit (lib.nvim.types) borderType; cfg = config.vim.ui.borders; - - defaultStyles = ["none" "single" "double" "rounded"]; in { options.vim.ui.borders = { enable = mkEnableOption "visible borders for most windows"; globalStyle = mkOption { - type = enum defaultStyles; + type = borderType; default = "rounded"; description = '' The global border style to use. + + If a list is given, it should have a length of eight or any divisor of + eight. The array will specify the eight chars building up the border in + a clockwise fashion starting with the top-left corner. You can specify + a different highlight group for each character by passing a + [char, "YourHighlightGroup"] instead ''; + example = ["╔" "═" "╗" "║" "╝" "═" "╚" "║"]; }; - # TODO: make per-plugin borders configurable plugins = let mkPluginStyleOption = name: { enable = mkEnableOption "borders for the ${name} plugin" // {default = cfg.enable;}; style = mkOption { - type = enum (defaultStyles ++ optionals (name != "which-key") ["shadow"]); + type = borderType; default = cfg.globalStyle; description = "The border style to use for the ${name} plugin"; }; @@ -40,7 +43,7 @@ in { lspsaga = mkPluginStyleOption "lspsaga"; nvim-cmp = mkPluginStyleOption "nvim-cmp"; lsp-signature = mkPluginStyleOption "lsp-signature"; - code-action-menu = mkPluginStyleOption "code-actions-menu"; + fastaction = mkPluginStyleOption "fastaction"; }; }; } diff --git a/modules/plugins/ui/breadcrumbs/breadcrumbs.nix b/modules/plugins/ui/breadcrumbs/breadcrumbs.nix index 18df8c0..2faee6c 100644 --- a/modules/plugins/ui/breadcrumbs/breadcrumbs.nix +++ b/modules/plugins/ui/breadcrumbs/breadcrumbs.nix @@ -4,9 +4,9 @@ ... }: let inherit (lib.options) mkOption mkEnableOption; - inherit (lib.types) nullOr listOf enum bool str int; + inherit (lib.types) nullOr listOf enum bool str int either; inherit (lib.modules) mkRenamedOptionModule; - inherit (lib.nvim.types) mkPluginSetupOption; + inherit (lib.nvim.types) mkPluginSetupOption borderType; mkSimpleIconOption = default: mkOption { inherit default; @@ -31,6 +31,8 @@ in { (renameSetupOpt ["sourceBuffer" "scrolloff"] ["source_buffer" "scrolloff"]) # TODO: every option under icon is renamed to first letter capitalized (renameSetupOpt ["icon"] ["icon"]) + + (mkRenamedOptionModule ["vim" "ui" "breadcrumbs" "alwaysRender"] ["vim" "ui" "breadcrumbs" "lualine" "winbar" "alwaysRender"]) ]; options.vim.ui.breadcrumbs = { @@ -43,17 +45,43 @@ in { ''; }; - # maybe this should be an option to *disable* alwaysRender optionally but oh well - # too late - alwaysRender = mkOption { - type = bool; - default = true; - description = "Whether to always display the breadcrumbs component on winbar (always renders winbar)"; + # Options for configuring Lualine integration of nvim-navic + lualine.winbar = { + enable = mkOption { + type = bool; + default = true; # for retaining previous behaviour + example = false; + description = '' + Whether to automatically configure a winbar component for + Lualine on the Winbar section. + + ::: {.note} + This is **set to `true` by default**, which means nvim-navic + will occupy `winbar.lualine_c` for the breadcrumbs feature + unless this option is set to `false`. + ::: + ''; + }; + + alwaysRender = mkOption { + type = bool; + default = true; + example = false; + description = '' + Whether to always display the breadcrumbs component + on winbar. + + ::: {.note} + This will pass `draw_empty` to the `nvim_navic` winbar + component, which causes the component to be drawn even + if it's empty + ::: + ''; + }; }; navbuddy = { enable = mkEnableOption "navbuddy LSP helper UI. Enabling this option automatically loads and enables nvim-navic"; - mappings = { close = mkOption { type = str; @@ -212,8 +240,7 @@ in { # position = {} border = mkOption { - # TODO: let this type accept a custom string - type = enum ["single" "rounded" "double" "solid" "none"]; + type = borderType; default = config.vim.ui.borders.globalStyle; description = "border style to use"; }; @@ -236,8 +263,7 @@ in { */ border = mkOption { - # TODO: let this type accept a custom string - type = nullOr (enum ["single" "rounded" "double" "solid" "none"]); + type = borderType; default = config.vim.ui.borders.globalStyle; description = "border style to use for the left section of Navbuddy UI"; }; @@ -254,8 +280,7 @@ in { */ border = mkOption { - # TODO: let this type accept a custom string - type = nullOr (enum ["single" "rounded" "double" "solid" "none"]); + type = borderType; default = config.vim.ui.borders.globalStyle; description = "border style to use for the middle section of Navbuddy UI"; }; @@ -265,8 +290,7 @@ in { # there is no size option for the right section, it fills the remaining space right = { border = mkOption { - # TODO: let this type accept a custom string - type = nullOr (enum ["single" "rounded" "double" "solid" "none"]); + type = borderType; default = config.vim.ui.borders.globalStyle; description = "border style to use for the right section of Navbuddy UI"; }; diff --git a/modules/plugins/ui/default.nix b/modules/plugins/ui/default.nix index 262cdbb..3407660 100644 --- a/modules/plugins/ui/default.nix +++ b/modules/plugins/ui/default.nix @@ -8,5 +8,6 @@ ./illuminate ./breadcrumbs ./borders + ./fastaction ]; } diff --git a/modules/plugins/ui/fastaction/config.nix b/modules/plugins/ui/fastaction/config.nix new file mode 100644 index 0000000..79c3e25 --- /dev/null +++ b/modules/plugins/ui/fastaction/config.nix @@ -0,0 +1,24 @@ +{ + config, + lib, + ... +}: let + inherit (lib.modules) mkIf mkDefault; + inherit (lib.nvim.dag) entryAnywhere; + inherit (lib.nvim.lua) toLuaObject; + + cfg = config.vim.ui.fastaction; + borderCfg = config.vim.ui.borders.plugins.fastaction; +in { + config = mkIf cfg.enable { + vim = { + ui.fastaction.setupOpts = { + register_ui_select = mkDefault true; + popup.border = mkIf borderCfg.enable borderCfg.style; + }; + + startPlugins = ["fastaction-nvim"]; + pluginRC.fastaction = entryAnywhere "require('fastaction').setup(${toLuaObject cfg.setupOpts})"; + }; + }; +} diff --git a/modules/plugins/lsp/nvim-code-action-menu/default.nix b/modules/plugins/ui/fastaction/default.nix similarity index 55% rename from modules/plugins/lsp/nvim-code-action-menu/default.nix rename to modules/plugins/ui/fastaction/default.nix index f94dd22..ef5c2bc 100644 --- a/modules/plugins/lsp/nvim-code-action-menu/default.nix +++ b/modules/plugins/ui/fastaction/default.nix @@ -1,6 +1,6 @@ { imports = [ - ./nvim-code-action-menu.nix + ./fastaction-nvim.nix ./config.nix ]; } diff --git a/modules/plugins/ui/fastaction/fastaction-nvim.nix b/modules/plugins/ui/fastaction/fastaction-nvim.nix new file mode 100644 index 0000000..52ac59a --- /dev/null +++ b/modules/plugins/ui/fastaction/fastaction-nvim.nix @@ -0,0 +1,9 @@ +{lib, ...}: let + inherit (lib.options) mkEnableOption; + inherit (lib.nvim.types) mkPluginSetupOption; +in { + options.vim.ui.fastaction = { + enable = mkEnableOption "overriding vim.ui.select with fastaction.nvim"; + setupOpts = mkPluginSetupOption "fastaction" {}; + }; +} diff --git a/modules/plugins/utility/binds/which-key/config.nix b/modules/plugins/utility/binds/which-key/config.nix index 03c85b4..d729688 100644 --- a/modules/plugins/utility/binds/which-key/config.nix +++ b/modules/plugins/utility/binds/which-key/config.nix @@ -25,7 +25,7 @@ in { ${optionalString config.vim.ui.borders.plugins.which-key.enable '' window = { - border = "${config.vim.ui.borders.plugins.which-key.style}", + border = ${toLuaObject config.vim.ui.borders.plugins.which-key.style}, }, ''} }) diff --git a/modules/plugins/utility/telescope/config.nix b/modules/plugins/utility/telescope/config.nix index 2ec7d3d..68af964 100644 --- a/modules/plugins/utility/telescope/config.nix +++ b/modules/plugins/utility/telescope/config.nix @@ -17,75 +17,78 @@ mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions; in { config = mkIf cfg.enable { - vim.startPlugins = [ - "telescope" - "plenary-nvim" - ]; + vim = { + startPlugins = [ + "telescope" + "plenary-nvim" + ]; - vim.maps.normal = mkMerge [ - (mkSetBinding mappings.findFiles " Telescope find_files") - (mkSetBinding mappings.liveGrep " Telescope live_grep") - (mkSetBinding mappings.buffers " Telescope buffers") - (mkSetBinding mappings.helpTags " Telescope help_tags") - (mkSetBinding mappings.open " Telescope") + maps.normal = mkMerge [ + (mkSetBinding mappings.findFiles " Telescope find_files") + (mkSetBinding mappings.liveGrep " Telescope live_grep") + (mkSetBinding mappings.buffers " Telescope buffers") + (mkSetBinding mappings.helpTags " Telescope help_tags") + (mkSetBinding mappings.open " Telescope") + (mkSetBinding mappings.resume " Telescope resume") - (mkSetBinding mappings.gitCommits " Telescope git_commits") - (mkSetBinding mappings.gitBufferCommits " Telescope git_bcommits") - (mkSetBinding mappings.gitBranches " Telescope git_branches") - (mkSetBinding mappings.gitStatus " Telescope git_status") - (mkSetBinding mappings.gitStash " Telescope git_stash") + (mkSetBinding mappings.gitCommits " Telescope git_commits") + (mkSetBinding mappings.gitBufferCommits " Telescope git_bcommits") + (mkSetBinding mappings.gitBranches " Telescope git_branches") + (mkSetBinding mappings.gitStatus " Telescope git_status") + (mkSetBinding mappings.gitStash " Telescope git_stash") - (mkIf config.vim.lsp.enable (mkMerge [ - (mkSetBinding mappings.lspDocumentSymbols " Telescope lsp_document_symbols") - (mkSetBinding mappings.lspWorkspaceSymbols " Telescope lsp_workspace_symbols") + (mkIf config.vim.lsp.enable (mkMerge [ + (mkSetBinding mappings.lspDocumentSymbols " Telescope lsp_document_symbols") + (mkSetBinding mappings.lspWorkspaceSymbols " Telescope lsp_workspace_symbols") - (mkSetBinding mappings.lspReferences " Telescope lsp_references") - (mkSetBinding mappings.lspImplementations " Telescope lsp_implementations") - (mkSetBinding mappings.lspDefinitions " Telescope lsp_definitions") - (mkSetBinding mappings.lspTypeDefinitions " Telescope lsp_type_definitions") - (mkSetBinding mappings.diagnostics " Telescope diagnostics") - ])) + (mkSetBinding mappings.lspReferences " Telescope lsp_references") + (mkSetBinding mappings.lspImplementations " Telescope lsp_implementations") + (mkSetBinding mappings.lspDefinitions " Telescope lsp_definitions") + (mkSetBinding mappings.lspTypeDefinitions " Telescope lsp_type_definitions") + (mkSetBinding mappings.diagnostics " Telescope diagnostics") + ])) - ( - mkIf config.vim.treesitter.enable - (mkSetBinding mappings.treesitter " Telescope treesitter") - ) + ( + mkIf config.vim.treesitter.enable + (mkSetBinding mappings.treesitter " Telescope treesitter") + ) - ( - mkIf config.vim.projects.project-nvim.enable - (mkSetBinding mappings.findProjects "") - ) - ]; + ( + mkIf config.vim.projects.project-nvim.enable + (mkSetBinding mappings.findProjects " Telescope projects") + ) + ]; - vim.binds.whichKey.register = pushDownDefault { - "f" = "+Telescope"; - "fl" = "Telescope LSP"; - "fm" = "Cellular Automaton"; - "fv" = "Telescope Git"; - "fvc" = "Commits"; + binds.whichKey.register = pushDownDefault { + "f" = "+Telescope"; + "fl" = "Telescope LSP"; + "fm" = "Cellular Automaton"; + "fv" = "Telescope Git"; + "fvc" = "Commits"; + }; + + pluginRC.telescope = entryAnywhere '' + local telescope = require('telescope') + telescope.setup(${toLuaObject cfg.setupOpts}) + + ${ + if config.vim.ui.noice.enable + then "telescope.load_extension('noice')" + else "" + } + + ${ + if config.vim.notify.nvim-notify.enable + then "telescope.load_extension('notify')" + else "" + } + + ${ + if config.vim.projects.project-nvim.enable + then "telescope.load_extension('projects')" + else "" + } + ''; }; - - vim.pluginRC.telescope = entryAnywhere '' - local telescope = require('telescope') - telescope.setup(${toLuaObject cfg.setupOpts}) - - ${ - if config.vim.ui.noice.enable - then "telescope.load_extension('noice')" - else "" - } - - ${ - if config.vim.notify.nvim-notify.enable - then "telescope.load_extension('notify')" - else "" - } - - ${ - if config.vim.projects.project-nvim.enable - then "telescope.load_extension('projects')" - else "" - } - ''; }; } diff --git a/modules/plugins/utility/telescope/telescope.nix b/modules/plugins/utility/telescope/telescope.nix index bebe6c8..031f00d 100644 --- a/modules/plugins/utility/telescope/telescope.nix +++ b/modules/plugins/utility/telescope/telescope.nix @@ -150,13 +150,13 @@ in { options.vim.telescope = { mappings = { - findProjects = mkMappingOption "Find files [Telescope]" "fp"; - + findProjects = mkMappingOption "Find projects [Telescope]" "fp"; findFiles = mkMappingOption "Find files [Telescope]" "ff"; liveGrep = mkMappingOption "Live grep [Telescope]" "fg"; buffers = mkMappingOption "Buffers [Telescope]" "fb"; helpTags = mkMappingOption "Help tags [Telescope]" "fh"; open = mkMappingOption "Open [Telescope]" "ft"; + resume = mkMappingOption "Resume (previous search) [Telescope]" "fr"; gitCommits = mkMappingOption "Git commits [Telescope]" "fvcw"; gitBufferCommits = mkMappingOption "Git buffer commits [Telescope]" "fvcb"; diff --git a/modules/plugins/visuals/config.nix b/modules/plugins/visuals/config.nix index 1dfc661..1457ff3 100644 --- a/modules/plugins/visuals/config.nix +++ b/modules/plugins/visuals/config.nix @@ -45,8 +45,6 @@ in { 'noice', 'NvimTree', 'alpha', - 'code-action-menu-menu', - 'code-action-menu-warning-message', 'notify', 'Navbuddy' }, diff --git a/modules/plugins/visuals/fidget/fidget.nix b/modules/plugins/visuals/fidget/fidget.nix index c5f4eb6..79974bd 100644 --- a/modules/plugins/visuals/fidget/fidget.nix +++ b/modules/plugins/visuals/fidget/fidget.nix @@ -7,7 +7,7 @@ inherit (lib.options) mkEnableOption mkOption literalExpression; inherit (lib.strings) toUpper; inherit (lib.types) int float bool str enum listOf attrsOf oneOf nullOr submodule; - inherit (lib.nvim.types) mkPluginSetupOption luaInline; + inherit (lib.nvim.types) mkPluginSetupOption luaInline borderType; inherit (lib.generators) mkLuaInline; in { imports = [ @@ -453,7 +453,7 @@ in { }; border = mkOption { description = "Border style of the notification window"; - type = enum ["none" "single" "double" "rounded" "solid" "shadow"]; + type = borderType; default = if config.vim.ui.borders.enable then config.vim.ui.borders.globalStyle diff --git a/modules/wrapper/rc/config.nix b/modules/wrapper/rc/config.nix index 78edb59..8ebf1c2 100644 --- a/modules/wrapper/rc/config.nix +++ b/modules/wrapper/rc/config.nix @@ -133,8 +133,8 @@ in { vim = { luaConfigRC = { globalsScript = entryAnywhere (concatLines globalsScript); - # basic, theme - pluginConfigs = entryAfter ["theme"] pluginConfigs; + # basic + pluginConfigs = entryAfter ["basic"] pluginConfigs; extraPluginConfigs = entryAfter ["pluginConfigs"] extraPluginConfigs; mappings = entryAfter ["extraPluginConfigs"] mappings; };