From a4ef5e0f8c87b9cddca56c4d6770d89ec6fe776d Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 28 Feb 2025 03:32:53 +0300 Subject: [PATCH 01/29] pins: bump vim-illuminate --- npins/sources.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/npins/sources.json b/npins/sources.json index cd7e0b20..0dc9e21b 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -2032,9 +2032,9 @@ "repo": "vim-illuminate" }, "branch": "master", - "revision": "b5713e6ca3f627b46968386d6d3f24d374d3cb17", - "url": "https://github.com/RRethy/vim-illuminate/archive/b5713e6ca3f627b46968386d6d3f24d374d3cb17.tar.gz", - "hash": "0l16qa2bm4nyimkcjlhajgcv8l9kyqqjpc55jxnny0gy6rycp40n" + "revision": "19cb21f513fc2b02f0c66be70107741e837516a1", + "url": "https://github.com/RRethy/vim-illuminate/archive/19cb21f513fc2b02f0c66be70107741e837516a1.tar.gz", + "hash": "1wfri17br6yqxnci43g69mvbckb7ajhj3c0mlcn1g0s7jkxz4acd" }, "vim-markdown": { "type": "Git", @@ -2098,4 +2098,4 @@ } }, "version": 3 -} +} \ No newline at end of file From a3f650e11482fdbba65774982f0374ea2c7bef0e Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 28 Feb 2025 03:34:03 +0300 Subject: [PATCH 02/29] ui/illuminate: move to setupOpts format --- modules/plugins/ui/illuminate/config.nix | 20 +++++++++----------- modules/plugins/ui/illuminate/illuminate.nix | 16 ++++++++++++++-- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/modules/plugins/ui/illuminate/config.nix b/modules/plugins/ui/illuminate/config.nix index ffba85fe..37ad4cfa 100644 --- a/modules/plugins/ui/illuminate/config.nix +++ b/modules/plugins/ui/illuminate/config.nix @@ -4,22 +4,20 @@ ... }: let inherit (lib.modules) mkIf; + inherit (lib.nvim.lua) toLuaObject; inherit (lib.nvim.dag) entryAnywhere; cfg = config.vim.ui.illuminate; in { config = mkIf cfg.enable { - vim.startPlugins = ["vim-illuminate"]; + vim = { + startPlugins = ["vim-illuminate"]; - vim.pluginRC.vim-illuminate = entryAnywhere '' - require('illuminate').configure({ - filetypes_denylist = { - 'dirvish', - 'fugitive', - 'NvimTree', - 'TelescopePrompt', - }, - }) - ''; + # vim-illuminate does not have a setup function. It is instead called 'configure' + # and does what you expect from a setup function. Wild. + pluginRC.vim-illuminate = entryAnywhere '' + require('illuminate').configure(${toLuaObject cfg.setupOpts}) + ''; + }; }; } diff --git a/modules/plugins/ui/illuminate/illuminate.nix b/modules/plugins/ui/illuminate/illuminate.nix index c9c5d2f8..b910101f 100644 --- a/modules/plugins/ui/illuminate/illuminate.nix +++ b/modules/plugins/ui/illuminate/illuminate.nix @@ -1,7 +1,19 @@ {lib, ...}: let - inherit (lib.options) mkEnableOption; + inherit (lib.options) mkOption mkEnableOption; + inherit (lib.types) listOf str; + inherit (lib.nvim.types) mkPluginSetupOption; in { options.vim.ui.illuminate = { - enable = mkEnableOption "automatically highlight other uses of the word under the cursor [vim-illuminate]"; + enable = mkEnableOption '' + automatically highlight other uses of the word under the cursor [vim-illuminate] + ''; + + setupOpts = mkPluginSetupOption "vim-illuminate" { + filetypes_denylist = mkOption { + type = listOf str; + default = ["dirvish" "fugitive" "NvimTree" "TelescopePrompt"]; + description = "Filetypes to not illuminate, this overrides `filetypes_allowlist`"; + }; + }; }; } From 08be38ab06c95f56cb9d27805826c1b1d0ffac98 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 28 Feb 2025 03:34:16 +0300 Subject: [PATCH 03/29] docs: update release notes --- docs/release-notes/rl-0.8.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index c0165d30..0440f38f 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -174,6 +174,8 @@ - Fix plugin name for lsp/lspkind. +- Move `vim-illuminate` to `setupOpts format` + [iynaix](https://github.com/iynaix) - Add lsp options support for [nixd](https://github.com/nix-community/nixd) From 3bf7abd6c9807bbbb2c791fdb6c9be8e36618dd6 Mon Sep 17 00:00:00 2001 From: Adam Szalkowski Date: Sat, 1 Mar 2025 14:44:08 +0100 Subject: [PATCH 04/29] plugins/nvim-docs-view: fix default mappings (#675) --- modules/plugins/lsp/nvim-docs-view/nvim-docs-view.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/plugins/lsp/nvim-docs-view/nvim-docs-view.nix b/modules/plugins/lsp/nvim-docs-view/nvim-docs-view.nix index 105aebec..df571123 100644 --- a/modules/plugins/lsp/nvim-docs-view/nvim-docs-view.nix +++ b/modules/plugins/lsp/nvim-docs-view/nvim-docs-view.nix @@ -57,8 +57,8 @@ in { }; mappings = { - viewToggle = mkMappingOption "Open or close the docs view panel" "lvt"; - viewUpdate = mkMappingOption "Manually update the docs view panel" "lvu"; + viewToggle = mkMappingOption "Open or close the docs view panel" "lvt"; + viewUpdate = mkMappingOption "Manually update the docs view panel" "lvu"; }; }; } From 0fdfb9bf3b419dba3b1ccd2728ed6a366866a942 Mon Sep 17 00:00:00 2001 From: MaxMur <31189199+TheMaxMur@users.noreply.github.com> Date: Sun, 2 Mar 2025 16:59:32 +0300 Subject: [PATCH 05/29] languages/yaml: Init (#676) --- docs/release-notes/rl-0.8.md | 4 ++ modules/plugins/languages/default.nix | 1 + modules/plugins/languages/yaml.nix | 72 +++++++++++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 modules/plugins/languages/yaml.nix diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index 0440f38f..d81b142f 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -192,3 +192,7 @@ - Add formatters for go: [gofmt](https://go.dev/blog/gofmt), [golines](https://github.com/segmentio/golines) and [gofumpt](https://github.com/mvdan/gofumpt) + +[MaxMur](https://github.com/TheMaxMur) + +- Add YAML support under `vim.languages.yaml`. diff --git a/modules/plugins/languages/default.nix b/modules/plugins/languages/default.nix index 219e04fb..08d676b9 100644 --- a/modules/plugins/languages/default.nix +++ b/modules/plugins/languages/default.nix @@ -39,6 +39,7 @@ in { ./nu.nix ./odin.nix ./wgsl.nix + ./yaml.nix ./ruby.nix ]; diff --git a/modules/plugins/languages/yaml.nix b/modules/plugins/languages/yaml.nix new file mode 100644 index 00000000..2892f607 --- /dev/null +++ b/modules/plugins/languages/yaml.nix @@ -0,0 +1,72 @@ +{ + pkgs, + config, + lib, + ... +}: let + inherit (builtins) attrNames; + inherit (lib.options) mkEnableOption mkOption; + inherit (lib.modules) mkIf mkMerge; + inherit (lib.lists) isList; + inherit (lib.types) enum either listOf package str; + inherit (lib.nvim.types) mkGrammarOption; + inherit (lib.nvim.lua) expToLua; + + cfg = config.vim.languages.yaml; + + defaultServer = "yaml-language-server"; + servers = { + yaml-language-server = { + package = pkgs.nodePackages.yaml-language-server; + lspConfig = '' + lspconfig.yamlls.setup { + capabilities = capabilities; + on_attach = default_on_attach; + cmd = ${ + if isList cfg.lsp.package + then expToLua cfg.lsp.package + else ''{"${cfg.lsp.package}/bin/yaml-language-server", "--stdio"}'' + }, + } + ''; + }; + }; +in { + options.vim.languages.yaml = { + enable = mkEnableOption "YAML language support"; + + treesitter = { + enable = mkEnableOption "YAML treesitter"; + + package = mkGrammarOption pkgs "yaml"; + }; + + lsp = { + enable = mkEnableOption "YAML LSP support"; + + server = mkOption { + type = enum (attrNames servers); + default = defaultServer; + description = "YAML LSP server to use"; + }; + + package = mkOption { + type = either package (listOf str); + default = servers.${cfg.lsp.server}.package; + description = "YAML LSP server package"; + }; + }; + }; + + config = mkIf cfg.enable (mkMerge [ + (mkIf cfg.treesitter.enable { + vim.treesitter.enable = true; + vim.treesitter.grammars = [cfg.treesitter.package]; + }) + + (mkIf cfg.lsp.enable { + vim.lsp.lspconfig.enable = true; + vim.lsp.lspconfig.sources.yaml-lsp = servers.${cfg.lsp.server}.lspConfig; + }) + ]); +} From 60ebec1956a9e30e840bf03a77abb64968de1021 Mon Sep 17 00:00:00 2001 From: alfarel Date: Sun, 2 Mar 2025 12:19:29 -0500 Subject: [PATCH 06/29] utility/yazi-nvim: add missing dependency (snacks.nvim) `:checkhealth yazi` was warning about it. Project `README` recently added it to the requirements. --- docs/release-notes/rl-0.8.md | 4 ++++ modules/plugins/utility/yazi-nvim/config.nix | 1 + npins/sources.json | 12 ++++++++++++ 3 files changed, 17 insertions(+) diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index d81b142f..6027736a 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -196,3 +196,7 @@ [MaxMur](https://github.com/TheMaxMur) - Add YAML support under `vim.languages.yaml`. + +[alfarel](https://github.com/alfarelcynthesis): + +- Add missing `yazi.nvim` dependency (`snacks.nvim`). diff --git a/modules/plugins/utility/yazi-nvim/config.nix b/modules/plugins/utility/yazi-nvim/config.nix index a781e5f0..e6a85d68 100644 --- a/modules/plugins/utility/yazi-nvim/config.nix +++ b/modules/plugins/utility/yazi-nvim/config.nix @@ -15,6 +15,7 @@ in { config = mkIf cfg.enable { vim = { + startPlugins = ["snacks-nvim"]; lazy.plugins."yazi.nvim" = { package = pkgs.vimPlugins.yazi-nvim; setupModule = "yazi"; diff --git a/npins/sources.json b/npins/sources.json index 0dc9e21b..d196ff99 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -1880,6 +1880,18 @@ "url": "https://github.com/m4xshen/smartcolumn.nvim/archive/92f3773af80d674f1eb61e112dca79e2fa449fd1.tar.gz", "hash": "0k1xnyvblshn4fhbxgl0i34j22n55xlwr09sdmb23l57br5rb07q" }, + "snacks-nvim": { + "type": "Git", + "repository": { + "type": "GitHub", + "owner": "folke", + "repo": "snacks.nvim" + }, + "branch": "main", + "revision": "bc0630e43be5699bb94dadc302c0d21615421d93", + "url": "https://github.com/folke/snacks.nvim/archive/bc0630e43be5699bb94dadc302c0d21615421d93.tar.gz", + "hash": "0a5nw7xa33shag1h12gf930g3vcixbwk8dxv0ji4980ycskh238v" + }, "sqls-nvim": { "type": "Git", "repository": { From 6e35b04e748fd90458328f39b8372d1f82ffb7e0 Mon Sep 17 00:00:00 2001 From: MaxMur <31189199+TheMaxMur@users.noreply.github.com> Date: Sun, 2 Mar 2025 20:51:54 +0300 Subject: [PATCH 07/29] languages/yaml: fix enableLSP/enableTreesitter defaults (#680) --- modules/plugins/languages/yaml.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/plugins/languages/yaml.nix b/modules/plugins/languages/yaml.nix index 2892f607..ef17b964 100644 --- a/modules/plugins/languages/yaml.nix +++ b/modules/plugins/languages/yaml.nix @@ -36,13 +36,13 @@ in { enable = mkEnableOption "YAML language support"; treesitter = { - enable = mkEnableOption "YAML treesitter"; + enable = mkEnableOption "YAML treesitter" // {default = config.vim.languages.enableTreesitter;}; package = mkGrammarOption pkgs "yaml"; }; lsp = { - enable = mkEnableOption "YAML LSP support"; + enable = mkEnableOption "YAML LSP support" // {default = config.vim.languages.enableLSP;}; server = mkOption { type = enum (attrNames servers); From d12846211b3430c0c0ec73b4395f7df8a64ea668 Mon Sep 17 00:00:00 2001 From: TheColorman Date: Mon, 3 Mar 2025 21:12:58 +0100 Subject: [PATCH 08/29] session/nvim-session-manager: fix autoload_mode type Fixes `Error detected while processing VimEnter Autocommands for "*"` by using an enum type for "autoload_mode" instead of a string --- docs/release-notes/rl-0.8.md | 5 +++++ .../session/nvim-session-manager/nvim-session-manager.nix | 3 +++ 2 files changed, 8 insertions(+) diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index 6027736a..b16ed6b2 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -200,3 +200,8 @@ [alfarel](https://github.com/alfarelcynthesis): - Add missing `yazi.nvim` dependency (`snacks.nvim`). + +[TheColorman](https://github.com/TheColorman) + +- Fix plugin `setupOpts` for `neovim-session-manager` having an invalid value + for `autoload_mode`. diff --git a/modules/plugins/session/nvim-session-manager/nvim-session-manager.nix b/modules/plugins/session/nvim-session-manager/nvim-session-manager.nix index 05d0b01b..41cff8a4 100644 --- a/modules/plugins/session/nvim-session-manager/nvim-session-manager.nix +++ b/modules/plugins/session/nvim-session-manager/nvim-session-manager.nix @@ -1,5 +1,6 @@ {lib, ...}: let inherit (lib.types) nullOr str bool; + inherit (lib.generators) mkLuaInline; inherit (lib) mkEnableOption mkOption types mkRenamedOptionModule; in { imports = let @@ -68,6 +69,8 @@ in { autoload_mode = mkOption { type = types.enum ["Disabled" "CurrentDir" "LastSession"]; + # variable `sm` referenced from ./config.nix + apply = value: mkLuaInline "sm.AutoloadMode.${value}"; default = "LastSession"; description = "Define what to do when Neovim is started without arguments. Possible values: Disabled, CurrentDir, LastSession"; }; From 27978c7186b26e78c7765de4c093a816617f9f39 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Tue, 4 Mar 2025 23:30:52 +0300 Subject: [PATCH 09/29] session/nvim-session-manager: fix option descriptions; more explicit library inherits --- .../nvim-session-manager.nix | 83 +++++++++++++------ 1 file changed, 58 insertions(+), 25 deletions(-) diff --git a/modules/plugins/session/nvim-session-manager/nvim-session-manager.nix b/modules/plugins/session/nvim-session-manager/nvim-session-manager.nix index 41cff8a4..e60a4a5d 100644 --- a/modules/plugins/session/nvim-session-manager/nvim-session-manager.nix +++ b/modules/plugins/session/nvim-session-manager/nvim-session-manager.nix @@ -1,7 +1,10 @@ {lib, ...}: let - inherit (lib.types) nullOr str bool; + inherit (lib.options) mkOption mkEnableOption; + inherit (lib.modules) mkRenamedOptionModule; + inherit (lib.strings) isString; + inherit (lib.types) nullOr str bool int enum listOf either; inherit (lib.generators) mkLuaInline; - inherit (lib) mkEnableOption mkOption types mkRenamedOptionModule; + inherit (lib.nvim.types) luaInline mkPluginSetupOption; in { imports = let renameSetupOpt = oldPath: newPath: @@ -51,70 +54,100 @@ in { usePicker = mkOption { type = bool; default = true; - description = "Whether or not we should use dressing.nvim to build a session picker UI"; + description = '' + Whether we should use `dressing.nvim` to build a session picker UI + ''; }; - setupOpts = { + setupOpts = mkPluginSetupOption "which-key" { path_replacer = mkOption { - type = types.str; + type = str; default = "__"; - description = "The character to which the path separator will be replaced for session files"; + description = '' + The character to which the path separator will be replaced for session files + ''; }; colon_replacer = mkOption { - type = types.str; + type = str; default = "++"; - description = "The character to which the colon symbol will be replaced for session files"; + description = '' + The character to which the colon symbol will be replaced for session files + ''; }; autoload_mode = mkOption { - type = types.enum ["Disabled" "CurrentDir" "LastSession"]; - # variable `sm` referenced from ./config.nix - apply = value: mkLuaInline "sm.AutoloadMode.${value}"; + type = either (enum ["Disabled" "CurrentDir" "LastSession"]) luaInline; + # Variable 'sm' is defined in the pluginRC of nvim-session-manager. The + # definition is as follows: `local sm = require('session_manager.config')` + apply = val: + if isString val + then mkLuaInline "sm.AutoloadMode.${val}" + else val; default = "LastSession"; - description = "Define what to do when Neovim is started without arguments. Possible values: Disabled, CurrentDir, LastSession"; + description = '' + Define what to do when Neovim is started without arguments. + + Takes either one of `"Disabled"`, `"CurrentDir"`, `"LastSession` in which case the value + will be inserted into `sm.AutoloadMode.`, or an inline Lua value. + ''; }; max_path_length = mkOption { - type = types.nullOr types.int; + type = nullOr int; default = 80; - description = "Shorten the display path if length exceeds this threshold. Use 0 if don't want to shorten the path at all"; + description = '' + Shorten the display path if length exceeds this threshold. + + Use `0` if don't want to shorten the path at all + ''; }; autosave_last_session = mkOption { - type = types.bool; + type = bool; default = true; - description = "Automatically save last session on exit and on session switch"; + description = '' + Automatically save last session on exit and on session switch + ''; }; autosave_ignore_not_normal = mkOption { - type = types.bool; + type = bool; default = true; - description = "Plugin will not save a session when no buffers are opened, or all of them aren't writable or listed"; + description = '' + Plugin will not save a session when no buffers are opened, or all of them are + not writable or listed + ''; }; autosave_ignore_dirs = mkOption { - type = types.listOf types.str; + type = listOf str; default = []; description = "A list of directories where the session will not be autosaved"; }; autosave_ignore_filetypes = mkOption { - type = types.listOf types.str; + type = listOf str; default = ["gitcommit"]; - description = "All buffers of these file types will be closed before the session is saved"; + description = '' + All buffers of these file types will be closed before the session is saved + ''; }; autosave_ignore_buftypes = mkOption { - type = types.listOf types.str; + type = listOf str; default = []; - description = "All buffers of these buffer types will be closed before the session is saved"; + description = '' + All buffers of these buffer types will be closed before the session is saved + ''; }; autosave_only_in_session = mkOption { - type = types.bool; + type = bool; default = false; - description = "Always autosaves session. If true, only autosaves after a session is active"; + description = '' + Always autosaves session. If `true`, only autosaves after a session is active + ''; }; }; }; From 85ca2bc11fe59fc0eb8d0064264b4341dd4c12fb Mon Sep 17 00:00:00 2001 From: alfarel Date: Tue, 25 Feb 2025 21:03:46 -0500 Subject: [PATCH 10/29] utility/mkdir-nvim: init --- docs/release-notes/rl-0.8.md | 2 ++ modules/plugins/utility/default.nix | 1 + modules/plugins/utility/mkdir/config.nix | 12 ++++++++++++ modules/plugins/utility/mkdir/default.nix | 6 ++++++ modules/plugins/utility/mkdir/mkdir.nix | 7 +++++++ npins/sources.json | 12 ++++++++++++ 6 files changed, 40 insertions(+) create mode 100644 modules/plugins/utility/mkdir/config.nix create mode 100644 modules/plugins/utility/mkdir/default.nix create mode 100644 modules/plugins/utility/mkdir/mkdir.nix diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index b16ed6b2..9679a2c1 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -200,6 +200,8 @@ [alfarel](https://github.com/alfarelcynthesis): - Add missing `yazi.nvim` dependency (`snacks.nvim`). +- Add [mkdir.nvim](https://github.com/jghauser/mkdir.nvim) plugin + for automatic creation of parent directories when editing a nested file. [TheColorman](https://github.com/TheColorman) diff --git a/modules/plugins/utility/default.nix b/modules/plugins/utility/default.nix index 47579070..02d155ee 100644 --- a/modules/plugins/utility/default.nix +++ b/modules/plugins/utility/default.nix @@ -8,6 +8,7 @@ ./icon-picker ./images ./leetcode-nvim + ./mkdir ./motion ./multicursors ./new-file-template diff --git a/modules/plugins/utility/mkdir/config.nix b/modules/plugins/utility/mkdir/config.nix new file mode 100644 index 00000000..2f6a1fe7 --- /dev/null +++ b/modules/plugins/utility/mkdir/config.nix @@ -0,0 +1,12 @@ +{ + config, + lib, + ... +}: let + inherit (lib.modules) mkIf; + cfg = config.vim.utility.mkdir; +in { + vim = mkIf cfg.enable { + startPlugins = ["mkdir-nvim"]; + }; +} diff --git a/modules/plugins/utility/mkdir/default.nix b/modules/plugins/utility/mkdir/default.nix new file mode 100644 index 00000000..1ee6379b --- /dev/null +++ b/modules/plugins/utility/mkdir/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./config.nix + ./mkdir.nix + ]; +} diff --git a/modules/plugins/utility/mkdir/mkdir.nix b/modules/plugins/utility/mkdir/mkdir.nix new file mode 100644 index 00000000..c591e6e6 --- /dev/null +++ b/modules/plugins/utility/mkdir/mkdir.nix @@ -0,0 +1,7 @@ +{lib, ...}: let + inherit (lib.options) mkEnableOption; +in { + options.vim.utility.mkdir.enable = mkEnableOption '' + parent directory creation when editing a nested path that does not exist using `mkdir.nvim` + ''; +} diff --git a/npins/sources.json b/npins/sources.json index d196ff99..957d3b93 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -1205,6 +1205,18 @@ "url": "https://github.com/wfxr/minimap.vim/archive/57287e2dd28fa3e63276a32d11c729df14741d54.tar.gz", "hash": "05k4cgcrz0gj92xy685bd4p6nh2jmaywc2f5sw1lap0v685h7n79" }, + "mkdir-nvim": { + "type": "Git", + "repository": { + "type": "GitHub", + "owner": "jghauser", + "repo": "mkdir.nvim" + }, + "branch": "main", + "revision": "c55d1dee4f099528a1853b28bb28caa802eba217", + "url": "https://github.com/jghauser/mkdir.nvim/archive/c55d1dee4f099528a1853b28bb28caa802eba217.tar.gz", + "hash": "0zpyvkbw7wfqdxfgidr7zfxqb5ldci4pflx50rsm1hbwai0ybv23" + }, "modes-nvim": { "type": "Git", "repository": { From 9209a9da37616f1d1b0f1272a87e627d8ccc3218 Mon Sep 17 00:00:00 2001 From: alfarel Date: Tue, 25 Feb 2025 21:16:32 -0500 Subject: [PATCH 11/29] utility/nix-develop: init --- docs/release-notes/rl-0.8.md | 2 ++ modules/plugins/utility/default.nix | 1 + modules/plugins/utility/nix-develop/config.nix | 12 ++++++++++++ modules/plugins/utility/nix-develop/default.nix | 6 ++++++ modules/plugins/utility/nix-develop/nix-develop.nix | 5 +++++ npins/sources.json | 12 ++++++++++++ 6 files changed, 38 insertions(+) create mode 100644 modules/plugins/utility/nix-develop/config.nix create mode 100644 modules/plugins/utility/nix-develop/default.nix create mode 100644 modules/plugins/utility/nix-develop/nix-develop.nix diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index 9679a2c1..85f21580 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -202,6 +202,8 @@ - Add missing `yazi.nvim` dependency (`snacks.nvim`). - Add [mkdir.nvim](https://github.com/jghauser/mkdir.nvim) plugin for automatic creation of parent directories when editing a nested file. +- Add [nix-develop.nvim](https://github.com/figsoda/nix-develop.nvim) plugin + for in-neovim `nix develop`, `nix shell` and more. [TheColorman](https://github.com/TheColorman) diff --git a/modules/plugins/utility/default.nix b/modules/plugins/utility/default.nix index 02d155ee..6a4b4a7e 100644 --- a/modules/plugins/utility/default.nix +++ b/modules/plugins/utility/default.nix @@ -12,6 +12,7 @@ ./motion ./multicursors ./new-file-template + ./nix-develop ./outline ./preview ./surround diff --git a/modules/plugins/utility/nix-develop/config.nix b/modules/plugins/utility/nix-develop/config.nix new file mode 100644 index 00000000..e1c57ff6 --- /dev/null +++ b/modules/plugins/utility/nix-develop/config.nix @@ -0,0 +1,12 @@ +{ + config, + lib, + ... +}: let + inherit (lib.modules) mkIf; + cfg = config.vim.utility.nix-develop; +in { + vim = mkIf cfg.enable { + startPlugins = ["nix-develop-nvim"]; + }; +} diff --git a/modules/plugins/utility/nix-develop/default.nix b/modules/plugins/utility/nix-develop/default.nix new file mode 100644 index 00000000..7d227af5 --- /dev/null +++ b/modules/plugins/utility/nix-develop/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./config.nix + ./nix-develop.nix + ]; +} diff --git a/modules/plugins/utility/nix-develop/nix-develop.nix b/modules/plugins/utility/nix-develop/nix-develop.nix new file mode 100644 index 00000000..cee77a6d --- /dev/null +++ b/modules/plugins/utility/nix-develop/nix-develop.nix @@ -0,0 +1,5 @@ +{lib, ...}: let + inherit (lib.options) mkEnableOption; +in { + options.vim.utility.nix-develop.enable = mkEnableOption "in-neovim `nix develop`, `nix shell`, and more using `nix-develop.nvim`"; +} diff --git a/npins/sources.json b/npins/sources.json index 957d3b93..8a4e555e 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -1316,6 +1316,18 @@ "url": "https://github.com/otavioschwanck/new-file-template.nvim/archive/6ac66669dbf2dc5cdee184a4fe76d22465ca67e8.tar.gz", "hash": "0c7378c3w6bniclp666rq15c28akb0sjy58ayva0wpyin4k26hl3" }, + "nix-develop-nvim": { + "type": "Git", + "repository": { + "type": "GitHub", + "owner": "figsoda", + "repo": "nix-develop.nvim" + }, + "branch": "main", + "revision": "afea026f5c478c000a8af8de87f7b711676387ab", + "url": "https://github.com/figsoda/nix-develop.nvim/archive/afea026f5c478c000a8af8de87f7b711676387ab.tar.gz", + "hash": "0nwjgr19pzdxd7yygz380b388qcfbzp9svs916kh0zayzi9yxc2k" + }, "noice-nvim": { "type": "Git", "repository": { From a5d7313abb8741ff2c3f3735e1b9a03f50d4e6ca Mon Sep 17 00:00:00 2001 From: alfarel Date: Tue, 25 Feb 2025 21:24:43 -0500 Subject: [PATCH 12/29] utility/direnv-vim: init --- docs/release-notes/rl-0.8.md | 2 ++ modules/plugins/utility/default.nix | 1 + modules/plugins/utility/direnv/config.nix | 13 +++++++++++++ modules/plugins/utility/direnv/default.nix | 6 ++++++ modules/plugins/utility/direnv/direnv.nix | 5 +++++ npins/sources.json | 12 ++++++++++++ 6 files changed, 39 insertions(+) create mode 100644 modules/plugins/utility/direnv/config.nix create mode 100644 modules/plugins/utility/direnv/default.nix create mode 100644 modules/plugins/utility/direnv/direnv.nix diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index 85f21580..5cf939be 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -204,6 +204,8 @@ for automatic creation of parent directories when editing a nested file. - Add [nix-develop.nvim](https://github.com/figsoda/nix-develop.nvim) plugin for in-neovim `nix develop`, `nix shell` and more. +- Add [direnv.vim](https://github.com/direnv/direnv.vim) plugin + for automatic syncing of nvim shell environment with direnv's. [TheColorman](https://github.com/TheColorman) diff --git a/modules/plugins/utility/default.nix b/modules/plugins/utility/default.nix index 6a4b4a7e..0f0956fb 100644 --- a/modules/plugins/utility/default.nix +++ b/modules/plugins/utility/default.nix @@ -3,6 +3,7 @@ ./binds ./ccc ./diffview + ./direnv ./fzf-lua ./gestures ./icon-picker diff --git a/modules/plugins/utility/direnv/config.nix b/modules/plugins/utility/direnv/config.nix new file mode 100644 index 00000000..b2211deb --- /dev/null +++ b/modules/plugins/utility/direnv/config.nix @@ -0,0 +1,13 @@ +{ + config, + lib, + ... +}: let + inherit (lib.modules) mkIf; + + cfg = config.vim.utility.direnv; +in { + vim = mkIf cfg.enable { + startPlugins = ["direnv-vim"]; + }; +} diff --git a/modules/plugins/utility/direnv/default.nix b/modules/plugins/utility/direnv/default.nix new file mode 100644 index 00000000..7a489920 --- /dev/null +++ b/modules/plugins/utility/direnv/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./config.nix + ./direnv.nix + ]; +} diff --git a/modules/plugins/utility/direnv/direnv.nix b/modules/plugins/utility/direnv/direnv.nix new file mode 100644 index 00000000..98d3f1f6 --- /dev/null +++ b/modules/plugins/utility/direnv/direnv.nix @@ -0,0 +1,5 @@ +{lib, ...}: let + inherit (lib.options) mkEnableOption; +in { + options.vim.utility.direnv.enable = mkEnableOption "syncing nvim shell environment with direnv's using `direnv.vim`"; +} diff --git a/npins/sources.json b/npins/sources.json index 8a4e555e..b69bf509 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -315,6 +315,18 @@ "url": "https://github.com/sindrets/diffview.nvim/archive/4516612fe98ff56ae0415a259ff6361a89419b0a.tar.gz", "hash": "0brabpd02596hg98bml118bx6z2sly98kf1cr2p0xzybiinb4zs9" }, + "direnv-vim": { + "type": "Git", + "repository": { + "type": "GitHub", + "owner": "direnv", + "repo": "direnv.vim" + }, + "branch": "master", + "revision": "ab2a7e08dd630060cd81d7946739ac7442a4f269", + "url": "https://github.com/direnv/direnv.vim/archive/ab2a7e08dd630060cd81d7946739ac7442a4f269.tar.gz", + "hash": "1hhwfnaj9ibz17ggxvhzrkinghfy51fqfa0bs482z484jpvjc31g" + }, "dracula": { "type": "Git", "repository": { From 9e35fd8d02c745291c0a0504baae53bcad5c8637 Mon Sep 17 00:00:00 2001 From: alfarel Date: Tue, 25 Feb 2025 22:33:11 -0500 Subject: [PATCH 13/29] completion/blink-cmp: blink sources options Use a submodule to allow arbitrary source additions. Automatically load sources that are enabled. Automatically add enabled sources via blink-cmp setupOpts. Prepopulate with a few basic sources, disabled by default. --- docs/release-notes/rl-0.8.md | 1 + .../completion/blink-cmp/blink-cmp.nix | 61 ++++++++++++++++++- .../plugins/completion/blink-cmp/config.nix | 56 +++++++++++------ npins/sources.json | 36 +++++++++++ 4 files changed, 136 insertions(+), 18 deletions(-) diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index 5cf939be..a28ffd67 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -206,6 +206,7 @@ for in-neovim `nix develop`, `nix shell` and more. - Add [direnv.vim](https://github.com/direnv/direnv.vim) plugin for automatic syncing of nvim shell environment with direnv's. +- Add [blink.cmp] source options and some default-disabled sources. [TheColorman](https://github.com/TheColorman) diff --git a/modules/plugins/completion/blink-cmp/blink-cmp.nix b/modules/plugins/completion/blink-cmp/blink-cmp.nix index 13cdb9f4..9bb76b71 100644 --- a/modules/plugins/completion/blink-cmp/blink-cmp.nix +++ b/modules/plugins/completion/blink-cmp/blink-cmp.nix @@ -2,7 +2,7 @@ inherit (lib.options) mkEnableOption mkOption literalMD; inherit (lib.types) listOf str either attrsOf submodule enum anything int nullOr; inherit (lib.generators) mkLuaInline; - inherit (lib.nvim.types) mkPluginSetupOption luaInline; + inherit (lib.nvim.types) mkPluginSetupOption luaInline pluginType; inherit (lib.nvim.binds) mkMappingOption; inherit (lib.nvim.config) mkBool; @@ -118,5 +118,64 @@ in { scrollDocsUp = mkMappingOption "Scroll docs up [blink.cmp]" ""; scrollDocsDown = mkMappingOption "Scroll docs down [blink.cmp]" ""; }; + + sourcePlugins = let + sourcePluginType = submodule { + options = { + package = mkOption { + type = pluginType; + description = '' + `blink-cmp` source plugin package. + ''; + }; + module = mkOption { + type = str; + description = '' + Value of {option}`vim.autocomplete.blink-cmp.setupOpts.sources.providers..module`. + + Should be present in the source's documentation. + ''; + }; + enable = mkEnableOption "this source"; + }; + }; + in + mkOption { + type = submodule { + freeformType = attrsOf sourcePluginType; + options = let + defaultSourcePluginOption = name: package: module: { + package = mkOption { + type = pluginType; + default = package; + description = '' + `blink-cmp` ${name} source plugin package. + ''; + }; + module = mkOption { + type = str; + default = module; + description = '' + Value of {option}`vim.autocomplete.blink-cmp.setupOpts.sources.providers.${name}.module`. + ''; + }; + enable = mkEnableOption "${name} source"; + }; + in { + # emoji completion after : + emoji = defaultSourcePluginOption "emoji" "blink-emoji-nvim" "blink-emoji"; + # spelling suggestions as completions + spell = defaultSourcePluginOption "spell" "blink-cmp-spell" "blink-cmp-spell"; + # words from nearby files + ripgrep = defaultSourcePluginOption "ripgrep" "blink-ripgrep-nvim" "blink-ripgrep"; + }; + }; + default = {}; + description = '' + `blink.cmp` sources. + + Attribute names must be source names used in {option}`vim.autocomplete.blink-cmp.setupOpts.sources.default`. + ''; + }; }; } diff --git a/modules/plugins/completion/blink-cmp/config.nix b/modules/plugins/completion/blink-cmp/config.nix index 914821f9..96ced502 100644 --- a/modules/plugins/completion/blink-cmp/config.nix +++ b/modules/plugins/completion/blink-cmp/config.nix @@ -6,6 +6,8 @@ inherit (lib.modules) mkIf; inherit (lib.strings) optionalString; inherit (lib.generators) mkLuaInline; + inherit (lib.attrsets) attrValues filterAttrs; + inherit (lib.lists) map; inherit (lib.nvim.lua) toLuaObject; inherit (builtins) concatStringsSep typeOf tryEval attrNames mapAttrs; @@ -19,9 +21,12 @@ else if (plugin ? pname && (tryEval plugin.pname).success) then plugin.pname else plugin.name; + + enabledBlinkSources = filterAttrs (_source: definition: definition.enable) cfg.sourcePlugins; + blinkSourcePlugins = map (definition: definition.package) (attrValues enabledBlinkSources); in { vim = mkIf cfg.enable { - startPlugins = ["blink-compat"]; + startPlugins = ["blink-compat"] ++ blinkSourcePlugins; lazy.plugins = { blink-cmp = { package = "blink-cmp"; @@ -32,12 +37,14 @@ in { # # event = ["InsertEnter" "CmdlineEnter"]; - after = '' - ${optionalString config.vim.lazy.enable - (concatStringsSep "\n" (map - (package: "require('lz.n').trigger_load(${toLuaObject (getPluginName package)})") - cmpCfg.sourcePlugins))} - ''; + after = + # lua + '' + ${optionalString config.vim.lazy.enable + (concatStringsSep "\n" (map + (package: "require('lz.n').trigger_load(${toLuaObject (getPluginName package)})") + cmpCfg.sourcePlugins))} + ''; }; }; @@ -45,13 +52,26 @@ in { enableSharedCmpSources = true; blink-cmp.setupOpts = { sources = { - default = ["lsp" "path" "snippets" "buffer"] ++ (attrNames cmpCfg.sources); + default = + [ + "lsp" + "path" + "snippets" + "buffer" + ] + ++ (attrNames cmpCfg.sources) + ++ (attrNames enabledBlinkSources); providers = mapAttrs (name: _: { inherit name; module = "blink.compat.source"; }) - cmpCfg.sources; + cmpCfg.sources + // (mapAttrs (name: definition: { + inherit name; + inherit (definition) module; + }) + enabledBlinkSources); }; snippets = mkIf config.vim.snippets.luasnip.enable { preset = "luasnip"; @@ -67,16 +87,18 @@ in { ${mappings.next} = [ "select_next" "snippet_forward" - (mkLuaInline '' - function(cmp) - local line, col = unpack(vim.api.nvim_win_get_cursor(0)) - has_words_before = col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil + (mkLuaInline + # lua + '' + function(cmp) + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + has_words_before = col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil - if has_words_before then - return cmp.show() + if has_words_before then + return cmp.show() + end end - end - '') + '') "fallback" ]; ${mappings.previous} = [ diff --git a/npins/sources.json b/npins/sources.json index b69bf509..a68a1ea4 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -51,6 +51,18 @@ "url": "https://api.github.com/repos/saghen/blink.cmp/tarball/v0.12.4", "hash": "0jdifjifxjqa8r80wlqgkn5rm48wziap92340xz228nrgd0c9g69" }, + "blink-cmp-spell": { + "type": "Git", + "repository": { + "type": "GitHub", + "owner": "ribru17", + "repo": "blink-cmp-spell" + }, + "branch": "master", + "revision": "38d6797dea6f72baa6e8b3bfca6da96d8fcac64d", + "url": "https://github.com/ribru17/blink-cmp-spell/archive/38d6797dea6f72baa6e8b3bfca6da96d8fcac64d.tar.gz", + "hash": "19pnasa446iiapgsr3z2fpk0nnrzh8g5wrzrq8n0y4q0z6spc9f6" + }, "blink-compat": { "type": "Git", "repository": { @@ -63,6 +75,30 @@ "url": "https://github.com/saghen/blink.compat/archive/4104671562c663d059d91a99da3780bead5bc467.tar.gz", "hash": "0bsf8kg5s3m1xk9d4n0yl0h5xyk484hip3z8va547f6ibim9ccv4" }, + "blink-emoji-nvim": { + "type": "Git", + "repository": { + "type": "GitHub", + "owner": "moyiz", + "repo": "blink-emoji.nvim" + }, + "branch": "master", + "revision": "a77aebc092ebece1eed108f301452ae774d6b67a", + "url": "https://github.com/moyiz/blink-emoji.nvim/archive/a77aebc092ebece1eed108f301452ae774d6b67a.tar.gz", + "hash": "0n4qv2mk7zx910gnwf9ri2w5qxwx8szx99nqqzik4yyvl4axm41d" + }, + "blink-ripgrep-nvim": { + "type": "Git", + "repository": { + "type": "GitHub", + "owner": "mikavilpas", + "repo": "blink-ripgrep.nvim" + }, + "branch": "main", + "revision": "305e1ae5363f527abdfd71915a3fe1f42af52824", + "url": "https://github.com/mikavilpas/blink-ripgrep.nvim/archive/305e1ae5363f527abdfd71915a3fe1f42af52824.tar.gz", + "hash": "1hcfyicgf33dlr2hhgnhhzdcxxqw1v8v1yjfbnwvlcsgw0rhjl8w" + }, "bufdelete-nvim": { "type": "Git", "repository": { From 449b943b9579f8104438fa4d580333c54c74bfca Mon Sep 17 00:00:00 2001 From: alfarel Date: Tue, 25 Feb 2025 23:17:19 -0500 Subject: [PATCH 14/29] completion/blink-cmp: option to enable friendly-snippets Just adds it to the environment, `blink-cmp` will pick up on it automatically. --- docs/release-notes/rl-0.8.md | 3 +++ modules/plugins/completion/blink-cmp/blink-cmp.nix | 2 ++ modules/plugins/completion/blink-cmp/config.nix | 4 ++-- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index a28ffd67..dfc232b8 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -207,6 +207,9 @@ - Add [direnv.vim](https://github.com/direnv/direnv.vim) plugin for automatic syncing of nvim shell environment with direnv's. - Add [blink.cmp] source options and some default-disabled sources. +- Add [blink.cmp] option to add + [friendly-snippets](https://github.com/rafamadriz/friendly-snippets) + so blink.cmp can source snippets from it. [TheColorman](https://github.com/TheColorman) diff --git a/modules/plugins/completion/blink-cmp/blink-cmp.nix b/modules/plugins/completion/blink-cmp/blink-cmp.nix index 9bb76b71..4290e1cb 100644 --- a/modules/plugins/completion/blink-cmp/blink-cmp.nix +++ b/modules/plugins/completion/blink-cmp/blink-cmp.nix @@ -177,5 +177,7 @@ in { Attribute names must be source names used in {option}`vim.autocomplete.blink-cmp.setupOpts.sources.default`. ''; }; + + friendly-snippets.enable = mkEnableOption "friendly-snippets for blink to source from automatically"; }; } diff --git a/modules/plugins/completion/blink-cmp/config.nix b/modules/plugins/completion/blink-cmp/config.nix index 96ced502..875a4fd4 100644 --- a/modules/plugins/completion/blink-cmp/config.nix +++ b/modules/plugins/completion/blink-cmp/config.nix @@ -7,7 +7,7 @@ inherit (lib.strings) optionalString; inherit (lib.generators) mkLuaInline; inherit (lib.attrsets) attrValues filterAttrs; - inherit (lib.lists) map; + inherit (lib.lists) map optional; inherit (lib.nvim.lua) toLuaObject; inherit (builtins) concatStringsSep typeOf tryEval attrNames mapAttrs; @@ -26,7 +26,7 @@ blinkSourcePlugins = map (definition: definition.package) (attrValues enabledBlinkSources); in { vim = mkIf cfg.enable { - startPlugins = ["blink-compat"] ++ blinkSourcePlugins; + startPlugins = ["blink-compat"] ++ blinkSourcePlugins ++ (optional cfg.friendly-snippets.enable "friendly-snippets"); lazy.plugins = { blink-cmp = { package = "blink-cmp"; From 0e00c41a42f11b0bc28c3a5523e52bce9b1d1c15 Mon Sep 17 00:00:00 2001 From: alfarel Date: Tue, 25 Feb 2025 23:37:33 -0500 Subject: [PATCH 15/29] docs/release-notes: fix missing colons and periods Also fixes a misaligned contributor name. --- docs/release-notes/rl-0.8.md | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index dfc232b8..cf4dd169 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -3,7 +3,7 @@ ## Breaking changes - `git-conflict` keybinds are now prefixed with `` to avoid conflicting - with builtins + with builtins. [NotAShelf](https://github.com/notashelf): @@ -18,7 +18,7 @@ - Add a search widget to the options page in the nvf manual. - Add [render-markdown.nvim] under - `languages.markdown.extensions.render-markdown-nvim` + `languages.markdown.extensions.render-markdown-nvim`. - Implement [](#opt-vim.git.gitsigns.setupOpts) for user-specified setup table in gitsigns configuration. @@ -62,7 +62,7 @@ [blink.cmp]: https://github.com/saghen/blink.cmp -- Add [blink.cmp] support +- Add [blink.cmp] support. [diniamo](https://github.com/diniamo): @@ -76,8 +76,8 @@ [aerial.nvim]: (https://github.com/stevearc/aerial.nvim) [nvim-ufo]: (https://github.com/kevinhwang91/nvim-ufo) -- Add [aerial.nvim] -- Add [nvim-ufo] +- Add [aerial.nvim]. +- Add [nvim-ufo]. [LilleAila](https://github.com/LilleAila): @@ -160,7 +160,7 @@ Inspiration from `vim.languages.clang.dap` implementation. - Add [leetcode.nvim] plugin under `vim.utility.leetcode-nvim`. -[nezia1](https://github.com/nezia1) +[nezia1](https://github.com/nezia1): - Add support for [nixd](https://github.com/nix-community/nixd) language server. @@ -170,30 +170,31 @@ available plugins, under `vim.utility.multicursors`. - Add [hydra.nvim](https://github.com/nvimtools/hydra.nvim) as dependency for `multicursors.nvim` and lazy loads by default. - [folospior](https://github.com/folospior) + +[folospior](https://github.com/folospior): - Fix plugin name for lsp/lspkind. - Move `vim-illuminate` to `setupOpts format` -[iynaix](https://github.com/iynaix) +[iynaix](https://github.com/iynaix): - Add lsp options support for [nixd](https://github.com/nix-community/nixd) language server. -[Mr-Helpful](https://github.com/Mr-Helpful) +[Mr-Helpful](https://github.com/Mr-Helpful): -- Corrects pin names used for nvim themes +- Corrects pin names used for nvim themes. -[Libadoxon](https://github.com/Libadoxon) +[Libadoxon](https://github.com/Libadoxon): - Add [git-conflict](https://github.com/akinsho/git-conflict.nvim) plugin for - resolving git conflicts + resolving git conflicts. - Add formatters for go: [gofmt](https://go.dev/blog/gofmt), [golines](https://github.com/segmentio/golines) and - [gofumpt](https://github.com/mvdan/gofumpt) + [gofumpt](https://github.com/mvdan/gofumpt). -[MaxMur](https://github.com/TheMaxMur) +[MaxMur](https://github.com/TheMaxMur): - Add YAML support under `vim.languages.yaml`. @@ -211,7 +212,7 @@ [friendly-snippets](https://github.com/rafamadriz/friendly-snippets) so blink.cmp can source snippets from it. -[TheColorman](https://github.com/TheColorman) +[TheColorman](https://github.com/TheColorman): - Fix plugin `setupOpts` for `neovim-session-manager` having an invalid value for `autoload_mode`. From 4648c3b28f004dd2799442da798d81ad1e3cf516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Theodor=20Bj=C3=B6rkman?= <38960155+UltraGhostie@users.noreply.github.com> Date: Thu, 6 Mar 2025 15:40:57 +0100 Subject: [PATCH 16/29] utility/harpoon: init --- docs/release-notes/rl-0.8.md | 21 ++++---- modules/plugins/utility/default.nix | 1 + modules/plugins/utility/harpoon/config.nix | 41 ++++++++++++++++ modules/plugins/utility/harpoon/default.nix | 6 +++ modules/plugins/utility/harpoon/harpoon.nix | 53 +++++++++++++++++++++ npins/sources.json | 12 +++++ 6 files changed, 126 insertions(+), 8 deletions(-) create mode 100644 modules/plugins/utility/harpoon/config.nix create mode 100644 modules/plugins/utility/harpoon/default.nix create mode 100644 modules/plugins/utility/harpoon/harpoon.nix diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index cf4dd169..c2e180ea 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -194,6 +194,10 @@ [golines](https://github.com/segmentio/golines) and [gofumpt](https://github.com/mvdan/gofumpt). +[UltraGhostie](https://github.com/UltraGhostie) + +- Add [harpoon](https://github.com/ThePrimeagen/harpoon) plugin for navigation + [MaxMur](https://github.com/TheMaxMur): - Add YAML support under `vim.languages.yaml`. @@ -201,16 +205,17 @@ [alfarel](https://github.com/alfarelcynthesis): - Add missing `yazi.nvim` dependency (`snacks.nvim`). -- Add [mkdir.nvim](https://github.com/jghauser/mkdir.nvim) plugin - for automatic creation of parent directories when editing a nested file. -- Add [nix-develop.nvim](https://github.com/figsoda/nix-develop.nvim) plugin - for in-neovim `nix develop`, `nix shell` and more. -- Add [direnv.vim](https://github.com/direnv/direnv.vim) plugin - for automatic syncing of nvim shell environment with direnv's. + +- Add [mkdir.nvim](https://github.com/jghauser/mkdir.nvim) plugin for automatic + creation of parent directories when editing a nested file. +- Add [nix-develop.nvim](https://github.com/figsoda/nix-develop.nvim) plugin for + in-neovim `nix develop`, `nix shell` and more. +- Add [direnv.vim](https://github.com/direnv/direnv.vim) plugin for automatic + syncing of nvim shell environment with direnv's. - Add [blink.cmp] source options and some default-disabled sources. - Add [blink.cmp] option to add - [friendly-snippets](https://github.com/rafamadriz/friendly-snippets) - so blink.cmp can source snippets from it. + [friendly-snippets](https://github.com/rafamadriz/friendly-snippets) so + blink.cmp can source snippets from it. [TheColorman](https://github.com/TheColorman): diff --git a/modules/plugins/utility/default.nix b/modules/plugins/utility/default.nix index 0f0956fb..a1574b97 100644 --- a/modules/plugins/utility/default.nix +++ b/modules/plugins/utility/default.nix @@ -6,6 +6,7 @@ ./direnv ./fzf-lua ./gestures + ./harpoon ./icon-picker ./images ./leetcode-nvim diff --git a/modules/plugins/utility/harpoon/config.nix b/modules/plugins/utility/harpoon/config.nix new file mode 100644 index 00000000..487e67e4 --- /dev/null +++ b/modules/plugins/utility/harpoon/config.nix @@ -0,0 +1,41 @@ +{ + options, + config, + lib, + ... +}: let + inherit (lib.modules) mkIf; + inherit (lib.nvim.binds) pushDownDefault mkKeymap; + + cfg = config.vim.navigation.harpoon; + + keys = cfg.mappings; + inherit (options.vim.navigation.harpoon) mappings; +in { + config = mkIf cfg.enable { + vim = { + startPlugins = ["plenary-nvim"]; + + lazy.plugins.harpoon = { + package = "harpoon"; + setupModule = "harpoon"; + inherit (cfg) setupOpts; + + cmd = ["Harpoon"]; + + keys = [ + (mkKeymap "n" keys.markFile "lua require('harpoon'):list():add()" {desc = mappings.markFile.description;}) + (mkKeymap "n" keys.listMarks "lua require('harpoon').ui:toggle_quick_menu(require('harpoon'):list())" {desc = mappings.listMarks.description;}) + (mkKeymap "n" keys.file1 "lua require('harpoon'):list():select(1)" {desc = mappings.file1.description;}) + (mkKeymap "n" keys.file2 "lua require('harpoon'):list():select(2)" {desc = mappings.file2.description;}) + (mkKeymap "n" keys.file3 "lua require('harpoon'):list():select(3)" {desc = mappings.file3.description;}) + (mkKeymap "n" keys.file4 "lua require('harpoon'):list():select(4)" {desc = mappings.file4.description;}) + ]; + }; + + binds.whichKey.register = pushDownDefault { + "a" = "Harpoon Mark"; + }; + }; + }; +} diff --git a/modules/plugins/utility/harpoon/default.nix b/modules/plugins/utility/harpoon/default.nix new file mode 100644 index 00000000..21637c5b --- /dev/null +++ b/modules/plugins/utility/harpoon/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./harpoon.nix + ./config.nix + ]; +} diff --git a/modules/plugins/utility/harpoon/harpoon.nix b/modules/plugins/utility/harpoon/harpoon.nix new file mode 100644 index 00000000..4478c938 --- /dev/null +++ b/modules/plugins/utility/harpoon/harpoon.nix @@ -0,0 +1,53 @@ +{lib, ...}: let + inherit (lib.options) mkEnableOption mkOption; + inherit (lib.types) bool; + inherit (lib.nvim.binds) mkMappingOption; + inherit (lib.nvim.types) mkPluginSetupOption luaInline; + inherit (lib.generators) mkLuaInline; +in { + options.vim.navigation.harpoon = { + mappings = { + markFile = mkMappingOption "Mark file [Harpoon]" "a"; + listMarks = mkMappingOption "List marked files [Harpoon]" ""; + file1 = mkMappingOption "Go to marked file 1 [Harpoon]" ""; + file2 = mkMappingOption "Go to marked file 2 [Harpoon]" ""; + file3 = mkMappingOption "Go to marked file 3 [Harpoon]" ""; + file4 = mkMappingOption "Go to marked file 4 [Harpoon]" ""; + }; + + enable = mkEnableOption "Quick bookmarks on keybinds [Harpoon]"; + + setupOpts = mkPluginSetupOption "Harpoon" { + defaults = { + save_on_toggle = mkOption { + type = bool; + default = false; + description = '' + Any time the ui menu is closed then we will save the + state back to the backing list, not to the fs + ''; + }; + sync_on_ui_close = mkOption { + type = bool; + default = false; + description = '' + Any time the ui menu is closed then the state of the + list will be sync'd back to the fs + ''; + }; + key = mkOption { + type = luaInline; + default = mkLuaInline '' + function() + return vim.loop.cwd() + end + ''; + description = '' + How the out list key is looked up. This can be useful + when using worktrees and using git remote instead of file path + ''; + }; + }; + }; + }; +} diff --git a/npins/sources.json b/npins/sources.json index a68a1ea4..f5e12e4b 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -519,6 +519,18 @@ "url": "https://github.com/ellisonleao/gruvbox.nvim/archive/089b60e92aa0a1c6fa76ff527837cd35b6f5ac81.tar.gz", "hash": "0mr8q2xi4s2anibll8lhxax7q1akyg687bp5r58gckkhi04064q4" }, + "harpoon": { + "type": "Git", + "repository": { + "type": "GitHub", + "owner": "ThePrimeagen", + "repo": "harpoon" + }, + "branch": "harpoon2", + "revision": "ed1f853847ffd04b2b61c314865665e1dadf22c7", + "url": "https://github.com/ThePrimeagen/harpoon/archive/ed1f853847ffd04b2b61c314865665e1dadf22c7.tar.gz", + "hash": "1dcpdlna2lff9dlsh6i4v16qmn5r9279wdvn0ry3xg4abqwnzc9g" + }, "haskell-tools-nvim": { "type": "Git", "repository": { From 4bf2bc9db602fb7ba6e1651e3812b751d725a967 Mon Sep 17 00:00:00 2001 From: Erwin de Vries <139006912+esdevries@users.noreply.github.com> Date: Thu, 6 Mar 2025 21:53:33 +0100 Subject: [PATCH 17/29] theme/supported-themes: add github-nvim-theme (#688) --- docs/release-notes/rl-0.8.md | 6 ++++++ modules/plugins/statusline/lualine/lualine.nix | 11 +++++++++++ modules/plugins/theme/supported-themes.nix | 16 ++++++++++++++++ npins/sources.json | 14 +++++++++++++- 4 files changed, 46 insertions(+), 1 deletion(-) diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index c2e180ea..6b5ed694 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -221,3 +221,9 @@ - Fix plugin `setupOpts` for `neovim-session-manager` having an invalid value for `autoload_mode`. + +[esdevries](https://github.com/esdevries): + +[projekt0n/github-nvim-theme]: https://github.com/projekt0n/github-nvim-theme + +- Add `github-nvim-theme` theme from [projekt0n/github-nvim-theme]. diff --git a/modules/plugins/statusline/lualine/lualine.nix b/modules/plugins/statusline/lualine/lualine.nix index 6e95f03b..9943f78e 100644 --- a/modules/plugins/statusline/lualine/lualine.nix +++ b/modules/plugins/statusline/lualine/lualine.nix @@ -21,6 +21,17 @@ "codedark" "dracula" "everforest" + "github_dark" + "github_light" + "github_dark_dimmed" + "github_dark_default" + "github_light_default" + "github_dark_high_contrast" + "github_light_high_contrast" + "github_dark_colorblind" + "github_light_colorblind" + "github_dark_tritanopia" + "github_light_tritanopia" "gruvbox" "gruvbox_dark" "gruvbox_light" diff --git a/modules/plugins/theme/supported-themes.nix b/modules/plugins/theme/supported-themes.nix index 4029a1c0..0b5cb90b 100644 --- a/modules/plugins/theme/supported-themes.nix +++ b/modules/plugins/theme/supported-themes.nix @@ -195,4 +195,20 @@ in { vim.cmd.colorscheme("nord") ''; }; + github = { + setup = { + style ? "dark", + transparent ? false, + ... + }: '' + require('github-theme').setup({ + options = { + transparent = ${boolToString transparent}, + }, + }) + + vim.cmd[[colorscheme github_${style}]] + ''; + styles = ["dark" "light" "dark_dimmed" "dark_default" "light_default" "dark_high_contrast" "light_high_contrast" "dark_colorblind" "light_colorblind" "dark_tritanopia" "light_tritanopia"]; + }; } diff --git a/npins/sources.json b/npins/sources.json index f5e12e4b..bced2451 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -483,6 +483,18 @@ "url": "https://github.com/akinsho/git-conflict.nvim/archive/a1badcd070d176172940eb55d9d59029dad1c5a6.tar.gz", "hash": "05rnwhm1fmg3yb7j2xc9nmw262jc687qxhwabn97qarrk2da0r0a" }, + "github": { + "type": "Git", + "repository": { + "type": "Github", + "owner": "projekt0n", + "repo": "github-nvim-theme" + }, + "branch": "main", + "revision": "c106c9472154d6b2c74b74565616b877ae8ed31d", + "url": "https://github.com/projekt0n/github-nvim-theme/archive/c106c9472154d6b2c74b74565616b877ae8ed31d.tar.gz", + "hash": "/A4hkKTzjzeoR1SuwwklraAyI8oMkhxrwBBV9xb59PA=" + }, "gitsigns-nvim": { "type": "Git", "repository": { @@ -2194,4 +2206,4 @@ } }, "version": 3 -} \ No newline at end of file +} From 414c92276efd552e0491eca8e20c4a68acfec255 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 7 Mar 2025 13:51:54 +0300 Subject: [PATCH 18/29] pins: fix github-nvim-theme repository type --- npins/sources.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npins/sources.json b/npins/sources.json index bced2451..bc149180 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -486,7 +486,7 @@ "github": { "type": "Git", "repository": { - "type": "Github", + "type": "GitHub", "owner": "projekt0n", "repo": "github-nvim-theme" }, From c3b9c979eec7db96a6d4a7f4e84e7492928610cd Mon Sep 17 00:00:00 2001 From: Soliprem <73885403+Soliprem@users.noreply.github.com> Date: Fri, 7 Mar 2025 20:59:28 +0100 Subject: [PATCH 19/29] lsp/otter: fix assertion (#696) * otter: change assert into a warning * otter: update source and warning --- modules/plugins/lsp/otter/config.nix | 13 ++++++------- npins/sources.json | 8 ++++---- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/modules/plugins/lsp/otter/config.nix b/modules/plugins/lsp/otter/config.nix index c8a2d3c6..b1b045d8 100644 --- a/modules/plugins/lsp/otter/config.nix +++ b/modules/plugins/lsp/otter/config.nix @@ -15,13 +15,12 @@ mappings = addDescriptionsToMappings cfg.otter-nvim.mappings mappingDefinitions; in { config = mkIf (cfg.enable && cfg.otter-nvim.enable) { - assertions = [ - { - assertion = !config.vim.utility.ccc.enable; - message = '' - ccc and otter have a breaking conflict. It's been reported upstream. Until it's fixed, disable one of them - ''; - } + warnings = [ + # TODO: remove warning when we update to nvim 0.11 + (mkIf config.vim.utility.ccc.enable '' + ccc and otter occasionally have small conflicts that will disappear with nvim 0.11. + In the meantime, otter handles it by throwing a warning, but both plugins will work. + '') ]; vim = { startPlugins = ["otter-nvim"]; diff --git a/npins/sources.json b/npins/sources.json index bc149180..daad4177 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -1804,9 +1804,9 @@ "repo": "otter.nvim" }, "branch": "main", - "revision": "21f042f4d1a9ff4788634ad76a10033eed13c7f2", - "url": "https://github.com/jmbuhr/otter.nvim/archive/21f042f4d1a9ff4788634ad76a10033eed13c7f2.tar.gz", - "hash": "1gi603ckyxljbhkg8jhwh2pf5kvgb676ykw3sv9gvi0c2s4fb55r" + "revision": "e37053d2c6a17463e705483122eee04d41e3d4af", + "url": "https://github.com/jmbuhr/otter.nvim/archive/e37053d2c6a17463e705483122eee04d41e3d4af.tar.gz", + "hash": "0sq7x2mcxl7z0j4s3a395fy0bzz13h4rxd03lp6674y6hsjxcm55" }, "oxocarbon": { "type": "Git", @@ -2206,4 +2206,4 @@ } }, "version": 3 -} +} \ No newline at end of file From 6576509cd559aec3da271d12fa911d04d44708ec Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Sun, 9 Mar 2025 02:37:13 +0300 Subject: [PATCH 20/29] docs: fix typo in project README I should hire someone to proofread my writing... --- .github/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/README.md b/.github/README.md index 01395211..7c0974c3 100644 --- a/.github/README.md +++ b/.github/README.md @@ -237,7 +237,7 @@ customizability of plugin inputs, which is one of our primary features. an imperative path (e.g., `~/.config/nvim`) for my Neovim configuration instead of a configuration generated from Nix? -**A**: Yes! Add `"~/.config.nvim"` to `vim.additionalRuntimePaths = [ ... ]` and +**A**: Yes! Add `"~/.config/nvim"` to `vim.additionalRuntimePaths = [ ... ]` and any plugins you want to load to `vim.startPlugins`. This will load your configuration from `~/.config/nvim`. You may still use `vim.*` to modify Neovim's behaviour with Nix. From c8fd6204d02596462e354cf35b029cd6a86ce24b Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Sun, 9 Mar 2025 21:55:04 +0300 Subject: [PATCH 21/29] languages/nix: fully deprecate nixpkgs-fmt --- modules/plugins/languages/nix.nix | 3 --- 1 file changed, 3 deletions(-) diff --git a/modules/plugins/languages/nix.nix b/modules/plugins/languages/nix.nix index 1ae2693e..54c11af2 100644 --- a/modules/plugins/languages/nix.nix +++ b/modules/plugins/languages/nix.nix @@ -121,8 +121,6 @@ ) ''; }; - - nixpkgs-fmt = null; # removed }; defaultDiagnosticsProvider = ["statix" "deadnix"]; @@ -219,7 +217,6 @@ in { ${concatStringsSep ", " (attrNames formats)} ''; } - { assertion = cfg.lsp.server != "rnix"; message = '' From 9f276a0c5fac8039087b765d0762095ef61694e1 Mon Sep 17 00:00:00 2001 From: Ching Pei Yang <59727193+horriblename@users.noreply.github.com> Date: Mon, 10 Mar 2025 09:43:34 +0100 Subject: [PATCH 22/29] languages/rust: fix unused lsp settings option (#641) Co-authored-by: raf --- modules/plugins/languages/rust.nix | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/modules/plugins/languages/rust.nix b/modules/plugins/languages/rust.nix index 7e9cb627..aea10687 100644 --- a/modules/plugins/languages/rust.nix +++ b/modules/plugins/languages/rust.nix @@ -62,6 +62,15 @@ in { description = "Options to pass to rust analyzer"; type = str; default = ""; + example = '' + ['rust-analyzer'] = { + cargo = {allFeature = true}, + checkOnSave = true, + procMacro = { + enable = true, + }, + }, + ''; }; }; @@ -142,6 +151,9 @@ in { then expToLua cfg.lsp.package else ''{"${cfg.lsp.package}/bin/rust-analyzer"}'' }, + default_settings = { + ${cfg.lsp.opts} + }, on_attach = function(client, bufnr) default_on_attach(client, bufnr) local opts = { noremap=true, silent=true, buffer = bufnr } From dd281b78e50072b7311c0a4480bf94ec026cc20e Mon Sep 17 00:00:00 2001 From: raf Date: Mon, 10 Mar 2025 08:46:07 +0000 Subject: [PATCH 23/29] neovim/init: add API for autocmds and autogroups (#656) --- docs/release-notes/rl-0.8.md | 8 ++ modules/neovim/init/autocmds.nix | 185 +++++++++++++++++++++++++++++++ modules/neovim/init/default.nix | 1 + 3 files changed, 194 insertions(+) create mode 100644 modules/neovim/init/autocmds.nix diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index 6b5ed694..bfe21e9b 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -52,6 +52,14 @@ - Add [yazi.nvim] as a companion plugin for Yazi, the terminal file manager. +- Add [](#opt-vim.autocmds) and [](#opt-vim.augroups) to allow declaring + autocommands via Nix. + +- Fix plugin `setupOpts` for yanky.nvim and assert if shada is configured as a + backend while shada is disabled in Neovim options. + +- Add [yazi.nvim] as a companion plugin for Yazi, the terminal file manager. + [amadaluzia](https://github.com/amadaluzia): [haskell-tools.nvim]: https://github.com/MrcJkb/haskell-tools.nvim diff --git a/modules/neovim/init/autocmds.nix b/modules/neovim/init/autocmds.nix new file mode 100644 index 00000000..5da7bc55 --- /dev/null +++ b/modules/neovim/init/autocmds.nix @@ -0,0 +1,185 @@ +{ + config, + lib, + ... +}: let + inherit (lib.options) mkOption mkEnableOption literalExpression; + inherit (lib.lists) filter; + inherit (lib.strings) optionalString; + inherit (lib.types) nullOr submodule listOf str bool; + inherit (lib.nvim.types) luaInline; + inherit (lib.nvim.lua) toLuaObject; + inherit (lib.nvim.dag) entryAfter; + + autocommandType = submodule { + options = { + enable = + mkEnableOption "" + // { + default = true; + description = "Whether to enable this autocommand"; + }; + + event = mkOption { + type = nullOr (listOf str); + default = null; + example = ["BufRead" "BufWritePre"]; + description = "The event(s) that trigger the autocommand."; + }; + + pattern = mkOption { + type = nullOr (listOf str); + default = null; + example = ["*.lua" "*.vim"]; + description = "The file pattern(s) that determine when the autocommand applies)."; + }; + + callback = mkOption { + type = nullOr luaInline; + default = null; + example = literalExpression '' + mkLuaInline ''' + function() + print("Saving a Lua file...") + end + '''' + ''; + description = "The file pattern(s) that determine when the autocommand applies."; + }; + + command = mkOption { + type = nullOr str; + default = null; + description = "Vim command string instead of a Lua function."; + }; + + group = mkOption { + type = nullOr str; + default = null; + example = "MyAutoCmdGroup"; + description = "An optional autocommand group to manage related autocommands."; + }; + + desc = mkOption { + type = nullOr str; + default = null; + example = "Notify when saving a Lua file"; + description = "A description for the autocommand."; + }; + + once = mkOption { + type = bool; + default = false; + description = "Whether autocommand run only once."; + }; + + nested = mkOption { + type = bool; + default = false; + description = "Whether to allow nested autocommands to trigger."; + }; + }; + }; + + autogroupType = submodule { + options = { + enable = + mkEnableOption "" + // { + default = true; + description = "Whether to enable this autogroup"; + }; + + name = mkOption { + type = str; + example = "MyAutoCmdGroup"; + description = "The name of the autocommand group."; + }; + + clear = mkOption { + type = bool; + default = true; + description = '' + Whether to clear existing autocommands in this group before defining new ones. + This helps avoid duplicate autocommands. + ''; + }; + }; + }; + + cfg = config.vim; +in { + options.vim = { + augroups = mkOption { + type = listOf autogroupType; + default = []; + description = '' + A list of Neovim autogroups, which are used to organize and manage related + autocommands together. Groups allow multiple autocommands to be cleared + or redefined collectively, preventing duplicate definitions. + + Each autogroup consists of a name, a boolean indicating whether to clear + existing autocommands, and a list of associated autocommands. + ''; + }; + + autocmds = mkOption { + type = listOf autocommandType; + default = []; + description = '' + A list of Neovim autocommands to be registered. + + Each entry defines an autocommand, specifying events, patterns, optional + callbacks, commands, groups, and execution settings. + ''; + }; + }; + + config = { + vim = let + enabledAutocommands = filter (cmd: cmd.enable) cfg.autocmds; + enabledAutogroups = filter (au: au.enable) cfg.augroups; + in { + luaConfigRC = { + augroups = entryAfter ["pluginConfigs"] (optionalString (enabledAutogroups != []) '' + local nvf_autogroups = {} + for _, group in ipairs(${toLuaObject enabledAutogroups}) do + if group.name then + nvf_autogroups[group.name] = { clear = group.clear } + end + end + + for group_name, options in pairs(nvf_autogroups) do + vim.api.nvim_create_augroup(group_name, options) + end + ''); + + autocmds = entryAfter ["pluginConfigs"] (optionalString (enabledAutocommands != []) '' + local nvf_autocommands = ${toLuaObject enabledAutocommands} + for _, autocmd in ipairs(nvf_autocommands) do + vim.api.nvim_create_autocmd( + autocmd.event, + { + group = autocmd.group, + pattern = autocmd.pattern, + buffer = autocmd.buffer, + desc = autocmd.desc, + callback = autocmd.callback, + command = autocmd.command, + once = autocmd.once, + nested = autocmd.nested + } + ) + end + ''); + }; + }; + + assertions = [ + { + assertion = builtins.all (cmd: (cmd.command == null || cmd.callback == null)) cfg.autocmds; + message = "An autocommand cannot have both 'command' and 'callback' defined at the same time."; + } + ]; + }; +} diff --git a/modules/neovim/init/default.nix b/modules/neovim/init/default.nix index b0c7e0ce..ac9d29e5 100644 --- a/modules/neovim/init/default.nix +++ b/modules/neovim/init/default.nix @@ -1,5 +1,6 @@ { imports = [ + ./autocmds.nix ./basic.nix ./debug.nix ./highlight.nix From 3c52dbfd72bc1ef3c72e5910ab2737a6b012ca50 Mon Sep 17 00:00:00 2001 From: Nikita <68944906+BANanaD3V@users.noreply.github.com> Date: Mon, 10 Mar 2025 11:56:50 +0300 Subject: [PATCH 24/29] dashboard/alpha: configure with nix (#699) Co-authored-by: raf --- .github/typos.toml | 2 +- docs/release-notes/rl-0.8.md | 6 + modules/plugins/dashboard/alpha/alpha.nix | 20 +- modules/plugins/dashboard/alpha/config.nix | 228 +++------------------ 4 files changed, 52 insertions(+), 204 deletions(-) diff --git a/.github/typos.toml b/.github/typos.toml index 2ea46a8c..e2c0d59d 100644 --- a/.github/typos.toml +++ b/.github/typos.toml @@ -1,5 +1,5 @@ -default.extend-ignore-words-re = ["(?i)(noice)", "befores", "annote", "viw"] +default.extend-ignore-words-re = ["(?i)(noice)", "befores", "annote", "viw", "BANanaD3V"] files.extend-exclude = [ "npins/sources.json" ] diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index bfe21e9b..1a5b7e4c 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -5,6 +5,8 @@ - `git-conflict` keybinds are now prefixed with `` to avoid conflicting with builtins. +- `alpha` is now configured with nix, default config removed. + [NotAShelf](https://github.com/notashelf): [typst-preview.nvim]: https://github.com/chomosuke/typst-preview.nvim @@ -235,3 +237,7 @@ [projekt0n/github-nvim-theme]: https://github.com/projekt0n/github-nvim-theme - Add `github-nvim-theme` theme from [projekt0n/github-nvim-theme]. + +[BANanaD3V](https://github.com/BANanaD3V): + +- `alpha` is now configured with nix. diff --git a/modules/plugins/dashboard/alpha/alpha.nix b/modules/plugins/dashboard/alpha/alpha.nix index d5329cc7..90d02f30 100644 --- a/modules/plugins/dashboard/alpha/alpha.nix +++ b/modules/plugins/dashboard/alpha/alpha.nix @@ -1,7 +1,23 @@ {lib, ...}: let - inherit (lib.options) mkEnableOption; + inherit (lib.options) mkEnableOption mkOption; + inherit (lib.types) listOf attrsOf anything nullOr enum; in { options.vim.dashboard.alpha = { - enable = mkEnableOption "fast and fully programmable greeter for neovim [alpha.mvim]"; + enable = mkEnableOption "fast and fully programmable greeter for neovim [alpha.nvim]"; + theme = mkOption { + type = nullOr (enum ["dashboard" "startify" "theta"]); + default = "dashboard"; + description = "Alpha default theme to use"; + }; + layout = mkOption { + type = listOf (attrsOf anything); + default = []; + description = "Alpha dashboard layout"; + }; + opts = mkOption { + type = attrsOf anything; + default = {}; + description = "Optional global options"; + }; }; } diff --git a/modules/plugins/dashboard/alpha/config.nix b/modules/plugins/dashboard/alpha/config.nix index bb648a50..804189b9 100644 --- a/modules/plugins/dashboard/alpha/config.nix +++ b/modules/plugins/dashboard/alpha/config.nix @@ -5,8 +5,11 @@ }: let inherit (lib.modules) mkIf; inherit (lib.nvim.dag) entryAnywhere; + inherit (lib.nvim.lua) toLuaObject; cfg = config.vim.dashboard.alpha; + themeDefined = cfg.theme != null; + layoutDefined = cfg.layout != []; in { config = mkIf cfg.enable { vim.startPlugins = [ @@ -14,207 +17,30 @@ in { "nvim-web-devicons" ]; - # the entire credit for this dashboard configuration to https://github.com/Rishabh672003 - # honestly, excellent work - vim.pluginRC.alpha = entryAnywhere '' - local alpha = require("alpha") - local plenary_path = require("plenary.path") - local dashboard = require("alpha.themes.dashboard") - local cdir = vim.fn.getcwd() - local if_nil = vim.F.if_nil - - local nvim_web_devicons = { - enabled = true, - highlight = true, - } - - local function get_extension(fn) - local match = fn:match("^.+(%..+)$") - local ext = "" - if match ~= nil then - ext = match:sub(2) - end - return ext - end - - local function icon(fn) - local nwd = require("nvim-web-devicons") - local ext = get_extension(fn) - return nwd.get_icon(fn, ext, { default = true }) - end - - local function file_button(fn, sc, short_fn) - short_fn = short_fn or fn - local ico_txt - local fb_hl = {} - - if nvim_web_devicons.enabled then - local ico, hl = icon(fn) - local hl_option_type = type(nvim_web_devicons.highlight) - if hl_option_type == "boolean" then - if hl and nvim_web_devicons.highlight then - table.insert(fb_hl, { hl, 0, 3 }) - end - end - if hl_option_type == "string" then - table.insert(fb_hl, { nvim_web_devicons.highlight, 0, 3 }) - end - ico_txt = ico .. " " - else - ico_txt = "" - end - local file_button_el = dashboard.button(sc, ico_txt .. short_fn, "e " .. fn .. " ") - local fn_start = short_fn:match(".*[/\\]") - if fn_start ~= nil then - table.insert(fb_hl, { "Comment", #ico_txt - 2, #fn_start + #ico_txt }) - end - file_button_el.opts.hl = fb_hl - return file_button_el - end - - local default_mru_ignore = { "gitcommit" } - - local mru_opts = { - ignore = function(path, ext) - return (string.find(path, "COMMIT_EDITMSG")) or (vim.tbl_contains(default_mru_ignore, ext)) - end, - } - - --- @param start number - --- @param cwd string optional - --- @param items_number number optional number of items to generate, default = 10 - local function mru(start, cwd, items_number, opts) - opts = opts or mru_opts - items_number = if_nil(items_number, 15) - - local oldfiles = {} - for _, v in pairs(vim.v.oldfiles) do - if #oldfiles == items_number then - break - end - local cwd_cond - if not cwd then - cwd_cond = true - else - cwd_cond = vim.startswith(v, cwd) - end - local ignore = (opts.ignore and opts.ignore(v, get_extension(v))) or false - if (vim.fn.filereadable(v) == 1) and cwd_cond and not ignore then - oldfiles[#oldfiles + 1] = v - end - end - local target_width = 35 - - local tbl = {} - for i, fn in ipairs(oldfiles) do - local short_fn - if cwd then - short_fn = vim.fn.fnamemodify(fn, ":.") - else - short_fn = vim.fn.fnamemodify(fn, ":~") - end - - if #short_fn > target_width then - short_fn = plenary_path.new(short_fn):shorten(1, { -2, -1 }) - if #short_fn > target_width then - short_fn = plenary_path.new(short_fn):shorten(1, { -1 }) - end - end - - local shortcut = tostring(i + start - 1) - - local file_button_el = file_button(fn, shortcut, short_fn) - tbl[i] = file_button_el - end - return { - type = "group", - val = tbl, - opts = {}, - } - end - - local default_header = { - type = "text", - val = { - - [[███ ██ ███████ ██████ ██ ██ ██ ███ ███]], - [[████ ██ ██ ██ ██ ██ ██ ██ ████ ████]], - [[██ ██ ██ █████ ██ ██ ██ ██ ██ ██ ████ ██]], - [[██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██]], - [[██ ████ ███████ ██████ ████ ██ ██ ██]], - - -- [[ __ ]], - -- [[ ___ ___ ___ __ __ /\_\ ___ ___ ]], - -- [[ / _ `\ / __`\ / __`\/\ \/\ \\/\ \ / __` __`\ ]], - -- [[/\ \/\ \/\ __//\ \_\ \ \ \_/ |\ \ \/\ \/\ \/\ \ ]], - -- [[\ \_\ \_\ \____\ \____/\ \___/ \ \_\ \_\ \_\ \_\]], - -- [[ \/_/\/_/\/____/\/___/ \/__/ \/_/\/_/\/_/\/_/]], - }, - opts = { - position = "center", - hl = "Type", - -- wrap = "overflow"; - }, - } - - local section_mru = { - type = "group", - val = { - { - type = "text", - val = "Recent files", - opts = { - hl = "SpecialComment", - shrink_margin = false, - position = "center", - }, - }, - { type = "padding", val = 1 }, - { - type = "group", - val = function() - return { mru(0, cdir) } - end, - opts = { shrink_margin = false }, - }, - }, - } - - local buttons = { - type = "group", - val = { - { type = "text", val = "Quick links", opts = { hl = "SpecialComment", position = "center" } }, - { type = "padding", val = 1 }, - -- TODO: buttons should be added based on whether or not the relevant plugin is available - dashboard.button("e", " New file", "ene"), -- available all the time - dashboard.button("SPC F", "󰈞 Find file"), -- telescope - dashboard.button("SPC ff", "󰊄 Live grep"), -- telescope - dashboard.button("SPC p", " Projects"), -- any project - dashboard.button("q", "󰅚 Quit", "qa"), -- available all the time - }, - position = "center", - } - - local config = { - layout = { - { type = "padding", val = 2 }, - default_header, - { type = "padding", val = 2 }, - section_mru, - { type = "padding", val = 2 }, - buttons, - }, - opts = { - margin = 5, - setup = function() - vim.cmd([[ - autocmd alpha_temp DirChanged * lua require('alpha').redraw() - ]]) - end, - }, - } - - alpha.setup(config) + vim.pluginRC.alpha = let + setupOpts = + if themeDefined + then lib.generators.mkLuaInline "require'alpha.themes.${cfg.theme}'.config" + else { + inherit (cfg) layout opts; + }; + in '' + require('alpha').setup(${toLuaObject setupOpts}) ''; + + assertions = [ + { + assertion = themeDefined || layoutDefined; + message = '' + One of 'theme' or 'layout' should be defined in Alpha configuration. + ''; + } + { + assertion = !(themeDefined && layoutDefined); + message = '' + 'theme' and 'layout' cannot be defined at the same time. + ''; + } + ]; }; } From 28b48565f024a20a44bee850f6819d1e5b3972ec Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Mon, 10 Mar 2025 12:03:48 +0300 Subject: [PATCH 25/29] ci: update typos config --- .editorconfig | 2 +- .github/typos.toml | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.editorconfig b/.editorconfig index 2f767ae8..c7fdc76d 100644 --- a/.editorconfig +++ b/.editorconfig @@ -14,7 +14,7 @@ indent_style = space indent_size = 2 trim_trailing_whitespace = false -[*.{js,json,nix,yml,yaml}] +[*.{js,json,nix,yml,yaml,toml}] indent_style = space indent_size = 2 tab_width = 2 diff --git a/.github/typos.toml b/.github/typos.toml index e2c0d59d..2cd18dde 100644 --- a/.github/typos.toml +++ b/.github/typos.toml @@ -1,5 +1,10 @@ -default.extend-ignore-words-re = ["(?i)(noice)", "befores", "annote", "viw", "BANanaD3V"] -files.extend-exclude = [ -"npins/sources.json" +files.extend-exclude = ["npins/sources.json"] +default.extend-ignore-words-re = [ + "(?i)(noice)", + "befores", + "annote", + "viw", + "BA", # somehow "BANanaD3V" is valid, but BA is not... ] + From 2f02c47c1b5895b97295aacd454fad6eb1822598 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Mar 2025 21:37:32 +0000 Subject: [PATCH 26/29] ci: bump cachix/cachix-action from 15 to 16 (#703) Bumps [cachix/cachix-action](https://github.com/cachix/cachix-action) from 15 to 16. - [Release notes](https://github.com/cachix/cachix-action/releases) - [Commits](https://github.com/cachix/cachix-action/compare/v15...v16) --- updated-dependencies: - dependency-name: cachix/cachix-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/cachix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cachix.yml b/.github/workflows/cachix.yml index cac8ee51..959a04b6 100644 --- a/.github/workflows/cachix.yml +++ b/.github/workflows/cachix.yml @@ -36,7 +36,7 @@ jobs: - name: Install Nix uses: DeterminateSystems/nix-installer-action@main - - uses: cachix/cachix-action@v15 + - uses: cachix/cachix-action@v16 with: authToken: ${{ secrets.CACHIX_TOKEN }} extraPullNames: nix-community From bafa6cbf84970e03c40e22e80fff32f077ef741c Mon Sep 17 00:00:00 2001 From: Thales Menato <8753631+thamenato@users.noreply.github.com> Date: Tue, 11 Mar 2025 06:33:39 -0400 Subject: [PATCH 27/29] languages/cue: initial CUE language support (#704) * feat: add cue language support * docs: add changelog information --- docs/release-notes/rl-0.8.md | 2 ++ modules/plugins/languages/cue.nix | 51 +++++++++++++++++++++++++++ modules/plugins/languages/default.nix | 1 + 3 files changed, 54 insertions(+) create mode 100644 modules/plugins/languages/cue.nix diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index 1a5b7e4c..1acc855e 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -159,8 +159,10 @@ [thamenato](https://github.com/thamenato): [ruff]: (https://github.com/astral-sh/ruff) +[cue]: (https://cuelang.org/) - Add [ruff] as a formatter option in `vim.languages.python.format.type`. +- Add [cue] support under `vim.languages.cue`. [ARCIII](https://github.com/ArmandoCIII): diff --git a/modules/plugins/languages/cue.nix b/modules/plugins/languages/cue.nix new file mode 100644 index 00000000..313e3233 --- /dev/null +++ b/modules/plugins/languages/cue.nix @@ -0,0 +1,51 @@ +{ + pkgs, + config, + lib, + ... +}: let + inherit (lib.options) mkEnableOption mkOption; + inherit (lib.modules) mkIf mkMerge; + inherit (lib.types) package; + inherit (lib.nvim.types) mkGrammarOption; + + cfg = config.vim.languages.cue; +in { + options.vim.languages.cue = { + enable = mkEnableOption "CUE language support"; + + treesitter = { + enable = mkEnableOption "CUE treesitter" // {default = config.vim.languages.enableTreesitter;}; + + package = mkGrammarOption pkgs "cue"; + }; + + lsp = { + enable = mkEnableOption "CUE LSP support" // {default = config.vim.languages.enableLSP;}; + + package = mkOption { + type = package; + default = pkgs.cue; + description = "cue lsp implementation"; + }; + }; + }; + + config = mkIf cfg.enable (mkMerge [ + (mkIf cfg.treesitter.enable { + vim.treesitter.enable = true; + vim.treesitter.grammars = [cfg.treesitter.package]; + }) + + (mkIf cfg.lsp.enable { + vim.lsp.lspconfig.enable = true; + vim.lsp.lspconfig.sources.cue-lsp = '' + lspconfig.cue.setup { + capabilities = capabilities, + on_attach = default_on_attach, + cmd = {"${cfg.lsp.package}/bin/cue", "lsp"}, + } + ''; + }) + ]); +} diff --git a/modules/plugins/languages/default.nix b/modules/plugins/languages/default.nix index 08d676b9..d452ef56 100644 --- a/modules/plugins/languages/default.nix +++ b/modules/plugins/languages/default.nix @@ -5,6 +5,7 @@ in { ./asm.nix ./astro.nix ./bash.nix + ./cue.nix ./dart.nix ./clang.nix ./css.nix From 06250248696fa5c44e11a89a5647d12570fc0851 Mon Sep 17 00:00:00 2001 From: "Adam M. Szalkowski" Date: Thu, 13 Mar 2025 00:21:13 +0100 Subject: [PATCH 28/29] languages/helm: init (#679) --- docs/release-notes/rl-0.8.md | 4 ++ modules/plugins/languages/default.nix | 1 + modules/plugins/languages/helm.nix | 89 +++++++++++++++++++++++++++ modules/plugins/languages/yaml.nix | 17 ++++- 4 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 modules/plugins/languages/helm.nix diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index 1acc855e..ee579d3e 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -243,3 +243,7 @@ [BANanaD3V](https://github.com/BANanaD3V): - `alpha` is now configured with nix. + +[Butzist](https://github.com/butzist) + +- Add Helm chart support under `vim.languages.helm`. diff --git a/modules/plugins/languages/default.nix b/modules/plugins/languages/default.nix index d452ef56..20acfb6c 100644 --- a/modules/plugins/languages/default.nix +++ b/modules/plugins/languages/default.nix @@ -13,6 +13,7 @@ in { ./gleam.nix ./go.nix ./hcl.nix + ./helm.nix ./kotlin.nix ./html.nix ./haskell.nix diff --git a/modules/plugins/languages/helm.nix b/modules/plugins/languages/helm.nix new file mode 100644 index 00000000..d3fd636e --- /dev/null +++ b/modules/plugins/languages/helm.nix @@ -0,0 +1,89 @@ +{ + pkgs, + config, + lib, + ... +}: let + inherit (builtins) attrNames; + inherit (lib.options) mkEnableOption mkOption; + inherit (lib.modules) mkIf mkMerge; + inherit (lib.lists) isList; + inherit (lib.types) enum either listOf package str; + inherit (lib.nvim.types) mkGrammarOption; + inherit (lib.nvim.lua) expToLua; + + cfg = config.vim.languages.helm; + yamlCfg = config.vim.languages.yaml; + + helmCmd = + if isList cfg.lsp.package + then cfg.lsp.package + else ["${cfg.lsp.package}/bin/helm_ls" "serve"]; + yamlCmd = + if isList yamlCfg.lsp.package + then builtins.elemAt yamlCfg.lsp.package 0 + else "${yamlCfg.lsp.package}/bin/yaml-language-server"; + + defaultServer = "helm-ls"; + servers = { + helm-ls = { + package = pkgs.helm-ls; + lspConfig = '' + lspconfig.helm_ls.setup { + capabilities = capabilities, + on_attach = default_on_attach, + cmd = ${expToLua helmCmd}, + settings = { + ['helm-ls'] = { + yamlls = { + path = "${yamlCmd}" + } + } + } + } + ''; + }; + }; +in { + options.vim.languages.helm = { + enable = mkEnableOption "Helm language support"; + + treesitter = { + enable = mkEnableOption "Helm treesitter" // {default = config.vim.languages.enableTreesitter;}; + package = mkGrammarOption pkgs "helm"; + }; + + lsp = { + enable = mkEnableOption "Helm LSP support" // {default = config.vim.languages.enableLSP;}; + + server = mkOption { + description = "Helm LSP server to use"; + type = enum (attrNames servers); + default = defaultServer; + }; + + package = mkOption { + description = "Helm LSP server package"; + type = either package (listOf str); + default = servers.${cfg.lsp.server}.package; + }; + }; + }; + + config = mkIf cfg.enable (mkMerge [ + (mkIf cfg.treesitter.enable { + vim.treesitter.enable = true; + vim.treesitter.grammars = [cfg.treesitter.package]; + }) + + (mkIf cfg.lsp.enable { + vim.lsp.lspconfig.enable = true; + vim.lsp.lspconfig.sources.helm-lsp = servers.${cfg.lsp.server}.lspConfig; + }) + + { + # Enables filetype detection + vim.startPlugins = [pkgs.vimPlugins.vim-helm]; + } + ]); +} diff --git a/modules/plugins/languages/yaml.nix b/modules/plugins/languages/yaml.nix index ef17b964..c84b17cd 100644 --- a/modules/plugins/languages/yaml.nix +++ b/modules/plugins/languages/yaml.nix @@ -14,14 +14,27 @@ cfg = config.vim.languages.yaml; + onAttach = + if config.vim.languages.helm.lsp.enable + then '' + on_attach = function(client, bufnr) + local filetype = vim.bo[bufnr].filetype + if filetype == "helm" then + client.stop() + end + end'' + else "on_attach = default_on_attach"; + defaultServer = "yaml-language-server"; servers = { yaml-language-server = { package = pkgs.nodePackages.yaml-language-server; lspConfig = '' + + lspconfig.yamlls.setup { - capabilities = capabilities; - on_attach = default_on_attach; + capabilities = capabilities, + ${onAttach}, cmd = ${ if isList cfg.lsp.package then expToLua cfg.lsp.package From 54311277fc5c3ed22850f804c25cd9c406d75646 Mon Sep 17 00:00:00 2001 From: Victor R <39545521+viicslen@users.noreply.github.com> Date: Fri, 14 Mar 2025 01:42:50 +0000 Subject: [PATCH 29/29] language/php: add initial support for intelephense php lsp (#709) * language/php: add initial support for intelephense php lsp * docs: update release notes --------- Co-authored-by: raf --- docs/release-notes/rl-0.8.md | 7 ++++++- modules/plugins/languages/php.nix | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index ee579d3e..bd52df0d 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -244,6 +244,11 @@ - `alpha` is now configured with nix. -[Butzist](https://github.com/butzist) +[viicslen](https://github.com/viicslen): + +- Add `intelephense` language server support under + `vim.languages.php.lsp.server` + +[Butzist](https://github.com/butzist): - Add Helm chart support under `vim.languages.helm`. diff --git a/modules/plugins/languages/php.nix b/modules/plugins/languages/php.nix index d921b11d..4dccc8cd 100644 --- a/modules/plugins/languages/php.nix +++ b/modules/plugins/languages/php.nix @@ -64,6 +64,26 @@ } ''; }; + + intelephense = { + package = pkgs.intelephense; + lspConfig = '' + lspconfig.intelephense.setup{ + capabilities = capabilities, + on_attach = default_on_attach, + cmd = ${ + if isList cfg.lsp.package + then expToLua cfg.lsp.package + else '' + { + "${getExe cfg.lsp.package}", + "--stdio" + }, + '' + } + } + ''; + }; }; in { options.vim.languages.php = {