mirror of
				https://github.com/NotAShelf/nvf.git
				synced 2025-10-31 02:52:37 +00:00 
			
		
		
		
	treewide: rewrite autocompletion module and related stuff (#404)
* modules/completion: rewrite
* treewide: remove vsnip, add luasnip
* nvim-cmp: add default sorting
* nvim-cmp: load after luasnip
* lib: fix docs for mergelessListOf
* docs: add changelog entires for rewrite
* deprecations: add rewrite deprecations
* nvim-cmp: clarify in format description
* docs: fix option reference in release notes
* treewide: remove reduant `// {default = false;}`s
* luasnip: add missing `{option}` for option reference
* deprecations: add entry for vsnip
* nvim-autopairs: use multiline string
* nvim-dap: use outer attribute
	
	
This commit is contained in:
		
					parent
					
						
							
								ef413736e9
							
						
					
				
			
			
				commit
				
					
						7dbd1cd8d1
					
				
			
		
					 33 changed files with 512 additions and 483 deletions
				
			
		|  | @ -105,12 +105,10 @@ isMaximal: { | ||||||
|       transparent = false; |       transparent = false; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     autopairs.enable = true; |     autopairs.nvim-autopairs.enable = true; | ||||||
| 
 | 
 | ||||||
|     autocomplete = { |     autocomplete.nvim-cmp.enable = true; | ||||||
|       enable = true; |     snippets.luasnip.enable = true; | ||||||
|       type = "nvim-cmp"; |  | ||||||
|     }; |  | ||||||
| 
 | 
 | ||||||
|     filetree = { |     filetree = { | ||||||
|       nvimTree = { |       nvimTree = { | ||||||
|  |  | ||||||
|  | @ -28,10 +28,11 @@ configuration formats. | ||||||
| 
 | 
 | ||||||
| ### `vim.maps` rewrite {#sec-vim-maps-rewrite} | ### `vim.maps` rewrite {#sec-vim-maps-rewrite} | ||||||
| 
 | 
 | ||||||
| Instead of specifying map modes using submodules (eg.: `vim.maps.normal`), a new `vim.keymaps` | Instead of specifying map modes using submodules (eg.: `vim.maps.normal`), a new | ||||||
| submodule with support for a `mode` option has been introduced. It can be either a string, or a | `vim.keymaps` submodule with support for a `mode` option has been introduced. It | ||||||
| list of strings, where a string represents the short-name of the map mode(s), that the mapping | can be either a string, or a list of strings, where a string represents the | ||||||
| should be set for. See `:help map-modes` for more information. | short-name of the map mode(s), that the mapping should be set for. See | ||||||
|  | `:help map-modes` for more information. | ||||||
| 
 | 
 | ||||||
| For example: | For example: | ||||||
| 
 | 
 | ||||||
|  | @ -62,7 +63,6 @@ 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 | dressing.nvim and actions-preview.nvim, in case fastaction doesn't work for | ||||||
| everyone. | everyone. | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| ## Changelog {#sec-release-0.7-changelog} | ## Changelog {#sec-release-0.7-changelog} | ||||||
| 
 | 
 | ||||||
| [ItsSorae](https://github.com/ItsSorae): | [ItsSorae](https://github.com/ItsSorae): | ||||||
|  | @ -150,12 +150,29 @@ everyone. | ||||||
| - Replace `vim.lsp.nvimCodeActionMenu` with `vim.ui.fastaction`, see the | - Replace `vim.lsp.nvimCodeActionMenu` with `vim.ui.fastaction`, see the | ||||||
|   breaking changes section above for more details |   breaking changes section above for more details | ||||||
| 
 | 
 | ||||||
| - Add a `setupOpts` option to nvim-surround, which allows modifying options that aren't defined in nvf. Move the alternate nvim-surround keybinds to use `setupOpts`. | - Add a `setupOpts` option to nvim-surround, which allows modifying options that | ||||||
|  |   aren't defined in nvf. Move the alternate nvim-surround keybinds to use | ||||||
|  |   `setupOpts`. | ||||||
|  | 
 | ||||||
|  | - Remove `autopairs.type`, and rename `autopairs.enable` to | ||||||
|  |   `autopairs.nvim-autopairs.enable`. The new | ||||||
|  |   [](#opt-vim.autopairs.nvim-autopairs.enable) supports `setupOpts` format by | ||||||
|  |   default. | ||||||
|  | 
 | ||||||
|  | - Refactor of `nvim-cmp` and completion related modules | ||||||
|  |   - Remove `autocomplete.type` in favor of per-plugin enable options such as | ||||||
|  |     [](#opt-vim.autocomplete.nvim-cmp.enable). | ||||||
|  |   - Deprecate legacy Vimsnip in favor of Luasnip, and integrate | ||||||
|  |     friendly-snippets for bundled snippets. [](#opt-vim.snippets.luasnip.enable) | ||||||
|  |     can be used to toggle Luasnip. | ||||||
|  |   - Add sorting function options for completion sources under | ||||||
|  |     [](#opt-vim.autocomplete.nvim-cmp.setupOpts.sorting.comparators) | ||||||
| 
 | 
 | ||||||
| [Neovim documentation on `vim.cmd`]: https://neovim.io/doc/user/lua.html#vim.cmd() | [Neovim documentation on `vim.cmd`]: https://neovim.io/doc/user/lua.html#vim.cmd() | ||||||
| 
 | 
 | ||||||
| - Make Neovim's configuration file entirely Lua based. This comes with a few | - Make Neovim's configuration file entirely Lua based. This comes with a few | ||||||
|   breaking changes: |   breaking changes: | ||||||
|  | 
 | ||||||
|   - `vim.configRC` has been removed. You will need to migrate your entries to |   - `vim.configRC` has been removed. You will need to migrate your entries to | ||||||
|     Neovim-compliant Lua code, and add them to `vim.luaConfigRC` instead. |     Neovim-compliant Lua code, and add them to `vim.luaConfigRC` instead. | ||||||
|     Existing vimscript configurations may be preserved in `vim.cmd` functions. |     Existing vimscript configurations may be preserved in `vim.cmd` functions. | ||||||
|  | @ -248,4 +265,3 @@ everyone. | ||||||
| - Add support for [base16 theming](https://github.com/RRethy/base16-nvim) under | - Add support for [base16 theming](https://github.com/RRethy/base16-nvim) under | ||||||
|   `vim.theme` |   `vim.theme` | ||||||
| - Fix internal breakage in `elixir-tools` setup. | - Fix internal breakage in `elixir-tools` setup. | ||||||
| 
 |  | ||||||
|  |  | ||||||
							
								
								
									
										85
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										85
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							|  | @ -316,6 +316,22 @@ | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "plugin-cmp-luasnip": { | ||||||
|  |       "flake": false, | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1696878902, | ||||||
|  |         "narHash": "sha256-nUJJl2zyK/oSwz5RzI9j3gf9zpDfCImCYbPbVsyXgz8=", | ||||||
|  |         "owner": "saadparwaiz1", | ||||||
|  |         "repo": "cmp_luasnip", | ||||||
|  |         "rev": "05a9ab28b53f71d1aece421ef32fee2cb857a843", | ||||||
|  |         "type": "github" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "owner": "saadparwaiz1", | ||||||
|  |         "repo": "cmp_luasnip", | ||||||
|  |         "type": "github" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "plugin-cmp-nvim-lsp": { |     "plugin-cmp-nvim-lsp": { | ||||||
|       "flake": false, |       "flake": false, | ||||||
|       "locked": { |       "locked": { | ||||||
|  | @ -364,22 +380,6 @@ | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "plugin-cmp-vsnip": { |  | ||||||
|       "flake": false, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1669100283, |  | ||||||
|         "narHash": "sha256-2mkN03noOr5vBvRbSb35xZKorSH+8savQNZtgM9+QcM=", |  | ||||||
|         "owner": "hrsh7th", |  | ||||||
|         "repo": "cmp-vsnip", |  | ||||||
|         "rev": "989a8a73c44e926199bfd05fa7a516d51f2d2752", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "hrsh7th", |  | ||||||
|         "repo": "cmp-vsnip", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "plugin-codewindow-nvim": { |     "plugin-codewindow-nvim": { | ||||||
|       "flake": false, |       "flake": false, | ||||||
|       "locked": { |       "locked": { | ||||||
|  | @ -588,6 +588,22 @@ | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "plugin-friendly-snippets": { | ||||||
|  |       "flake": false, | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1727061933, | ||||||
|  |         "narHash": "sha256-yTsuV5unoujY0mhLINssYYBWCeefe+nJaxQHJKm7hlk=", | ||||||
|  |         "owner": "rafamadriz", | ||||||
|  |         "repo": "friendly-snippets", | ||||||
|  |         "rev": "00ba9dd3df89509f95437b8d595553707c46d5ea", | ||||||
|  |         "type": "github" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "owner": "rafamadriz", | ||||||
|  |         "repo": "friendly-snippets", | ||||||
|  |         "type": "github" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "plugin-gesture-nvim": { |     "plugin-gesture-nvim": { | ||||||
|       "flake": false, |       "flake": false, | ||||||
|       "locked": { |       "locked": { | ||||||
|  | @ -828,6 +844,22 @@ | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "plugin-luasnip": { | ||||||
|  |       "flake": false, | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1726165831, | ||||||
|  |         "narHash": "sha256-nkaa1NGOI28Et2QitQB+Spv+J42QVdHE1oywteLcJJw=", | ||||||
|  |         "owner": "L3MON4D3", | ||||||
|  |         "repo": "LuaSnip", | ||||||
|  |         "rev": "e808bee352d1a6fcf902ca1a71cee76e60e24071", | ||||||
|  |         "type": "github" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "owner": "L3MON4D3", | ||||||
|  |         "repo": "LuaSnip", | ||||||
|  |         "type": "github" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "plugin-mind-nvim": { |     "plugin-mind-nvim": { | ||||||
|       "flake": false, |       "flake": false, | ||||||
|       "locked": { |       "locked": { | ||||||
|  | @ -1757,22 +1789,6 @@ | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "plugin-vim-vsnip": { |  | ||||||
|       "flake": false, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1704937299, |  | ||||||
|         "narHash": "sha256-gvm6z4pgSULBVPukewRyjwxZ0vZgreQWbG/0kOB1QBo=", |  | ||||||
|         "owner": "hrsh7th", |  | ||||||
|         "repo": "vim-vsnip", |  | ||||||
|         "rev": "02a8e79295c9733434aab4e0e2b8c4b7cea9f3a9", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "hrsh7th", |  | ||||||
|         "repo": "vim-vsnip", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "plugin-which-key": { |     "plugin-which-key": { | ||||||
|       "flake": false, |       "flake": false, | ||||||
|       "locked": { |       "locked": { | ||||||
|  | @ -1827,10 +1843,10 @@ | ||||||
|         "plugin-cheatsheet-nvim": "plugin-cheatsheet-nvim", |         "plugin-cheatsheet-nvim": "plugin-cheatsheet-nvim", | ||||||
|         "plugin-cinnamon-nvim": "plugin-cinnamon-nvim", |         "plugin-cinnamon-nvim": "plugin-cinnamon-nvim", | ||||||
|         "plugin-cmp-buffer": "plugin-cmp-buffer", |         "plugin-cmp-buffer": "plugin-cmp-buffer", | ||||||
|  |         "plugin-cmp-luasnip": "plugin-cmp-luasnip", | ||||||
|         "plugin-cmp-nvim-lsp": "plugin-cmp-nvim-lsp", |         "plugin-cmp-nvim-lsp": "plugin-cmp-nvim-lsp", | ||||||
|         "plugin-cmp-path": "plugin-cmp-path", |         "plugin-cmp-path": "plugin-cmp-path", | ||||||
|         "plugin-cmp-treesitter": "plugin-cmp-treesitter", |         "plugin-cmp-treesitter": "plugin-cmp-treesitter", | ||||||
|         "plugin-cmp-vsnip": "plugin-cmp-vsnip", |  | ||||||
|         "plugin-codewindow-nvim": "plugin-codewindow-nvim", |         "plugin-codewindow-nvim": "plugin-codewindow-nvim", | ||||||
|         "plugin-comment-nvim": "plugin-comment-nvim", |         "plugin-comment-nvim": "plugin-comment-nvim", | ||||||
|         "plugin-copilot-cmp": "plugin-copilot-cmp", |         "plugin-copilot-cmp": "plugin-copilot-cmp", | ||||||
|  | @ -1844,6 +1860,7 @@ | ||||||
|         "plugin-fastaction-nvim": "plugin-fastaction-nvim", |         "plugin-fastaction-nvim": "plugin-fastaction-nvim", | ||||||
|         "plugin-fidget-nvim": "plugin-fidget-nvim", |         "plugin-fidget-nvim": "plugin-fidget-nvim", | ||||||
|         "plugin-flutter-tools": "plugin-flutter-tools", |         "plugin-flutter-tools": "plugin-flutter-tools", | ||||||
|  |         "plugin-friendly-snippets": "plugin-friendly-snippets", | ||||||
|         "plugin-gesture-nvim": "plugin-gesture-nvim", |         "plugin-gesture-nvim": "plugin-gesture-nvim", | ||||||
|         "plugin-gitsigns-nvim": "plugin-gitsigns-nvim", |         "plugin-gitsigns-nvim": "plugin-gitsigns-nvim", | ||||||
|         "plugin-glow-nvim": "plugin-glow-nvim", |         "plugin-glow-nvim": "plugin-glow-nvim", | ||||||
|  | @ -1859,6 +1876,7 @@ | ||||||
|         "plugin-lspkind": "plugin-lspkind", |         "plugin-lspkind": "plugin-lspkind", | ||||||
|         "plugin-lspsaga": "plugin-lspsaga", |         "plugin-lspsaga": "plugin-lspsaga", | ||||||
|         "plugin-lualine": "plugin-lualine", |         "plugin-lualine": "plugin-lualine", | ||||||
|  |         "plugin-luasnip": "plugin-luasnip", | ||||||
|         "plugin-mind-nvim": "plugin-mind-nvim", |         "plugin-mind-nvim": "plugin-mind-nvim", | ||||||
|         "plugin-minimap-vim": "plugin-minimap-vim", |         "plugin-minimap-vim": "plugin-minimap-vim", | ||||||
|         "plugin-modes-nvim": "plugin-modes-nvim", |         "plugin-modes-nvim": "plugin-modes-nvim", | ||||||
|  | @ -1917,7 +1935,6 @@ | ||||||
|         "plugin-vim-markdown": "plugin-vim-markdown", |         "plugin-vim-markdown": "plugin-vim-markdown", | ||||||
|         "plugin-vim-repeat": "plugin-vim-repeat", |         "plugin-vim-repeat": "plugin-vim-repeat", | ||||||
|         "plugin-vim-startify": "plugin-vim-startify", |         "plugin-vim-startify": "plugin-vim-startify", | ||||||
|         "plugin-vim-vsnip": "plugin-vim-vsnip", |  | ||||||
|         "plugin-which-key": "plugin-which-key", |         "plugin-which-key": "plugin-which-key", | ||||||
|         "rnix-lsp": "rnix-lsp", |         "rnix-lsp": "rnix-lsp", | ||||||
|         "systems": "systems_2" |         "systems": "systems_2" | ||||||
|  |  | ||||||
							
								
								
									
										19
									
								
								flake.nix
									
										
									
									
									
								
							
							
						
						
									
										19
									
								
								flake.nix
									
										
									
									
									
								
							|  | @ -277,11 +277,6 @@ | ||||||
|       flake = false; |       flake = false; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     plugin-cmp-vsnip = { |  | ||||||
|       url = "github:hrsh7th/cmp-vsnip"; |  | ||||||
|       flake = false; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     plugin-cmp-path = { |     plugin-cmp-path = { | ||||||
|       url = "github:hrsh7th/cmp-path"; |       url = "github:hrsh7th/cmp-path"; | ||||||
|       flake = false; |       flake = false; | ||||||
|  | @ -292,9 +287,19 @@ | ||||||
|       flake = false; |       flake = false; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|  |     plugin-cmp-luasnip = { | ||||||
|  |       url = "github:saadparwaiz1/cmp_luasnip"; | ||||||
|  |       flake = false; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|     # snippets |     # snippets | ||||||
|     plugin-vim-vsnip = { |     plugin-luasnip = { | ||||||
|       url = "github:hrsh7th/vim-vsnip"; |       url = "github:L3MON4D3/LuaSnip"; | ||||||
|  |       flake = false; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     plugin-friendly-snippets = { | ||||||
|  |       url = "github:rafamadriz/friendly-snippets"; | ||||||
|       flake = false; |       flake = false; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										5
									
								
								lib/attrsets.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								lib/attrsets.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,5 @@ | ||||||
|  | {lib}: let | ||||||
|  |   inherit (builtins) listToAttrs; | ||||||
|  | in { | ||||||
|  |   mapListToAttrs = f: list: listToAttrs (map f list); | ||||||
|  | } | ||||||
|  | @ -10,6 +10,7 @@ | ||||||
|   dag = import ./dag.nix {inherit lib;}; |   dag = import ./dag.nix {inherit lib;}; | ||||||
|   languages = import ./languages.nix {inherit lib;}; |   languages = import ./languages.nix {inherit lib;}; | ||||||
|   lists = import ./lists.nix {inherit lib;}; |   lists = import ./lists.nix {inherit lib;}; | ||||||
|  |   attrsets = import ./attrsets.nix {inherit lib;}; | ||||||
|   lua = import ./lua.nix {inherit lib;}; |   lua = import ./lua.nix {inherit lib;}; | ||||||
|   neovimConfiguration = import ../modules {inherit inputs lib;}; |   neovimConfiguration = import ../modules {inherit inputs lib;}; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -2,8 +2,8 @@ | ||||||
| {lib}: let | {lib}: let | ||||||
|   inherit (builtins) isString getAttr; |   inherit (builtins) isString getAttr; | ||||||
|   inherit (lib.options) mkOption; |   inherit (lib.options) mkOption; | ||||||
|   inherit (lib.attrsets) listToAttrs; |  | ||||||
|   inherit (lib.types) bool; |   inherit (lib.types) bool; | ||||||
|  |   inherit (lib.nvim.attrsets) mapListToAttrs; | ||||||
| in { | in { | ||||||
|   # Converts a boolean to a yes/no string. This is used in lots of |   # Converts a boolean to a yes/no string. This is used in lots of | ||||||
|   # configuration formats. |   # configuration formats. | ||||||
|  | @ -12,8 +12,8 @@ in { | ||||||
|     config, |     config, | ||||||
|     diagnosticsProviders, |     diagnosticsProviders, | ||||||
|   }: |   }: | ||||||
|     listToAttrs |     mapListToAttrs | ||||||
|     (map (v: let |     (v: let | ||||||
|       type = |       type = | ||||||
|         if isString v |         if isString v | ||||||
|         then v |         then v | ||||||
|  | @ -26,7 +26,7 @@ in { | ||||||
|       name = "${lang}-diagnostics-${type}"; |       name = "${lang}-diagnostics-${type}"; | ||||||
|       value = diagnosticsProviders.${type}.nullConfig package; |       value = diagnosticsProviders.${type}.nullConfig package; | ||||||
|     }) |     }) | ||||||
|       config); |     config; | ||||||
| 
 | 
 | ||||||
|   mkEnable = desc: |   mkEnable = desc: | ||||||
|     mkOption { |     mkOption { | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| {lib}: let | {lib}: let | ||||||
|   inherit (lib) isStringLike showOption showFiles getFiles mergeOneOption mergeEqualOption mkOptionType; |   inherit (lib.options) showOption showFiles getFiles mergeOneOption mergeEqualOption; | ||||||
|   inherit (lib.strings) isString; |   inherit (lib.strings) isString isStringLike; | ||||||
|   inherit (lib.types) anything attrsOf; |   inherit (lib.types) anything attrsOf listOf mkOptionType; | ||||||
|   inherit (lib.nvim.types) anythingConcatLists; |   inherit (lib.nvim.types) anythingConcatLists; | ||||||
|   inherit (builtins) typeOf isAttrs any head concatLists stringLength match; |   inherit (builtins) typeOf isAttrs any head concatLists stringLength match; | ||||||
| in { | in { | ||||||
|  | @ -52,6 +52,16 @@ in { | ||||||
|         (mergeFunctions.${commonType} or mergeEqualOption) loc defs; |         (mergeFunctions.${commonType} or mergeEqualOption) loc defs; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|  |   mergelessListOf = elemType: let | ||||||
|  |     super = listOf elemType; | ||||||
|  |   in | ||||||
|  |     super | ||||||
|  |     // { | ||||||
|  |       name = "mergelessListOf"; | ||||||
|  |       description = "mergeless ${super.description}"; | ||||||
|  |       merge = mergeEqualOption; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|   char = mkOptionType { |   char = mkOptionType { | ||||||
|     name = "char"; |     name = "char"; | ||||||
|     description = "character"; |     description = "character"; | ||||||
|  | @ -6,10 +6,10 @@ | ||||||
|   typesDag = import ./dag.nix {inherit lib;}; |   typesDag = import ./dag.nix {inherit lib;}; | ||||||
|   typesPlugin = import ./plugins.nix {inherit inputs lib;}; |   typesPlugin = import ./plugins.nix {inherit inputs lib;}; | ||||||
|   typesLanguage = import ./languages.nix {inherit lib;}; |   typesLanguage = import ./languages.nix {inherit lib;}; | ||||||
|   typesTypes = import ./types.nix {inherit lib;}; |   customTypes = import ./custom.nix {inherit lib;}; | ||||||
| in { | in { | ||||||
|   inherit (typesDag) dagOf; |   inherit (typesDag) dagOf; | ||||||
|   inherit (typesPlugin) pluginsOpt extraPluginType mkPluginSetupOption luaInline pluginType borderType; |   inherit (typesPlugin) pluginsOpt extraPluginType mkPluginSetupOption luaInline pluginType borderType; | ||||||
|   inherit (typesLanguage) diagnostics mkGrammarOption; |   inherit (typesLanguage) diagnostics mkGrammarOption; | ||||||
|   inherit (typesTypes) anythingConcatLists char hexColor; |   inherit (customTypes) anythingConcatLists char hexColor mergelessListOf; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| {lib, ...}: let | {lib, ...}: let | ||||||
|   inherit (lib.modules) mkRemovedOptionModule; |   inherit (lib.modules) mkRemovedOptionModule mkRenamedOptionModule; | ||||||
| in { | in { | ||||||
|   imports = [ |   imports = [ | ||||||
|     # 2024-06-06 |     # 2024-06-06 | ||||||
|  | @ -14,5 +14,26 @@ in { | ||||||
|       available under `vim.ui.fastaction` as a replacement. Simply remove everything under |       available under `vim.ui.fastaction` as a replacement. Simply remove everything under | ||||||
|       `vim.lsp.nvimCodeActionMenu`, and set `vim.ui.fastaction.enable` to `true`. |       `vim.lsp.nvimCodeActionMenu`, and set `vim.ui.fastaction.enable` to `true`. | ||||||
|     '') |     '') | ||||||
|  | 
 | ||||||
|  |     (mkRemovedOptionModule ["vim" "autopairs" "enable"] '' | ||||||
|  |       vim.autopairs.enable has been removed in favor of per-plugin modules. | ||||||
|  |       You can enable nvim-autopairs with vim.autopairs.nvim-autopairs.enable instead. | ||||||
|  |     '') | ||||||
|  |     (mkRemovedOptionModule ["vim" "autopairs" "type"] '' | ||||||
|  |       vim.autopairs.type has been removed in favor of per-plugin modules. | ||||||
|  |       You can enable nvim-autopairs with vim.autopairs.nvim-autopairs.enable instead. | ||||||
|  |     '') | ||||||
|  |     (mkRemovedOptionModule ["vim" "autocomplete" "enable"] '' | ||||||
|  |       vim.autocomplete.enable has been removed in favor of per-plugin modules. | ||||||
|  |       You can enable nvim-cmp with vim.autocomplete.nvim-cmp.enable instead. | ||||||
|  |     '') | ||||||
|  |     (mkRemovedOptionModule ["vim" "autocomplete" "type"] '' | ||||||
|  |       vim.autocomplete.type has been removed in favor of per-plugin modules. | ||||||
|  |       You can enable nvim-cmp with vim.autocomplete.nvim-cmp.enable instead. | ||||||
|  |     '') | ||||||
|  |     (mkRemovedOptionModule ["vim" "snippets" "vsnip" "enable"] '' | ||||||
|  |       vim.snippets.vsnip.enable has been removed in favor of the more modern luasnip. | ||||||
|  |     '') | ||||||
|  |     (mkRenamedOptionModule ["vim" "lsp" "lspkind" "mode"] ["vim" "lsp" "lspkind" "setupOpts" "mode"]) | ||||||
|   ]; |   ]; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -34,6 +34,8 @@ in { | ||||||
|         "copilot-cmp" |         "copilot-cmp" | ||||||
|       ]; |       ]; | ||||||
| 
 | 
 | ||||||
|  |     vim.autocomplete.nvim-cmp.sources = {copilot = "[Copilot]";}; | ||||||
|  | 
 | ||||||
|     vim.pluginRC.copilot = entryAnywhere '' |     vim.pluginRC.copilot = entryAnywhere '' | ||||||
|       require("copilot").setup(${toLuaObject cfg.setupOpts}) |       require("copilot").setup(${toLuaObject cfg.setupOpts}) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -4,16 +4,17 @@ | ||||||
|   ... |   ... | ||||||
| }: let | }: let | ||||||
|   inherit (lib.modules) mkIf; |   inherit (lib.modules) mkIf; | ||||||
|   inherit (lib.trivial) boolToString; |  | ||||||
|   inherit (lib.nvim.dag) entryAnywhere; |   inherit (lib.nvim.dag) entryAnywhere; | ||||||
|  |   inherit (lib.nvim.lua) toLuaObject; | ||||||
| 
 | 
 | ||||||
|   cfg = config.vim.autopairs; |   cfg = config.vim.autopairs.nvim-autopairs; | ||||||
| in { | in { | ||||||
|   config = mkIf cfg.enable { |   config = mkIf cfg.enable { | ||||||
|     vim.startPlugins = ["nvim-autopairs"]; |     vim = { | ||||||
| 
 |       startPlugins = ["nvim-autopairs"]; | ||||||
|     vim.pluginRC.autopairs = entryAnywhere '' |       pluginRC.autopairs = entryAnywhere '' | ||||||
|       require("nvim-autopairs").setup({ map_cr = ${boolToString (!config.vim.autocomplete.enable)} }) |         require('nvim-autopairs').setup(${toLuaObject cfg.setupOpts}) | ||||||
|       ''; |       ''; | ||||||
|     }; |     }; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,21 +1,14 @@ | ||||||
| {lib, ...}: let | {lib, ...}: let | ||||||
|   inherit (lib) mkRemovedOptionModule; |   inherit (lib) mkRemovedOptionModule; | ||||||
|   inherit (lib.options) mkEnableOption mkOption; |   inherit (lib.options) mkEnableOption; | ||||||
|   inherit (lib.types) enum; |   inherit (lib.nvim.types) mkPluginSetupOption; | ||||||
| in { | in { | ||||||
|   imports = [ |   imports = [ | ||||||
|     (mkRemovedOptionModule ["vim" "autopairs" "nvim-compe"] "nvim-compe is deprecated and no longer suported.") |     (mkRemovedOptionModule ["vim" "autopairs" "nvim-compe"] "nvim-compe is deprecated and no longer suported.") | ||||||
|   ]; |   ]; | ||||||
| 
 | 
 | ||||||
|   options.vim = { |   options.vim.autopairs.nvim-autopairs = { | ||||||
|     autopairs = { |     enable = mkEnableOption "autopairs"; | ||||||
|       enable = mkEnableOption "autopairs" // {default = false;}; |     setupOpts = mkPluginSetupOption "nvim-autopairs" {}; | ||||||
| 
 |  | ||||||
|       type = mkOption { |  | ||||||
|         type = enum ["nvim-autopairs"]; |  | ||||||
|         default = "nvim-autopairs"; |  | ||||||
|         description = "Set the autopairs type. Options: nvim-autopairs [nvim-autopairs]"; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -3,246 +3,115 @@ | ||||||
|   config, |   config, | ||||||
|   ... |   ... | ||||||
| }: let | }: let | ||||||
|   inherit (builtins) toJSON; |   inherit (lib.modules) mkIf; | ||||||
|   inherit (lib.modules) mkIf mkMerge; |   inherit (lib.strings) optionalString; | ||||||
|   inherit (lib.attrsets) attrNames mapAttrsToList; |   inherit (lib.generators) mkLuaInline; | ||||||
|   inherit (lib.strings) concatMapStringsSep concatStringsSep optionalString; |   inherit (lib.nvim.binds) addDescriptionsToMappings; | ||||||
|   inherit (lib.nvim.binds) addDescriptionsToMappings mkSetLuaBinding; |   inherit (lib.nvim.dag) entryAfter; | ||||||
|   inherit (lib.nvim.dag) entryAnywhere entryAfter; |   inherit (lib.nvim.lua) toLuaObject; | ||||||
|  |   inherit (builtins) attrNames; | ||||||
| 
 | 
 | ||||||
|   cfg = config.vim.autocomplete; |   cfg = config.vim.autocomplete.nvim-cmp; | ||||||
|   lspkindEnabled = config.vim.lsp.enable && config.vim.lsp.lspkind.enable; |   luasnipEnable = config.vim.snippets.luasnip.enable; | ||||||
| 
 |  | ||||||
|   self = import ./nvim-cmp.nix {inherit lib;}; |  | ||||||
|   mappingDefinitions = self.options.vim.autocomplete.mappings; |  | ||||||
| 
 | 
 | ||||||
|  |   self = import ./nvim-cmp.nix {inherit lib config;}; | ||||||
|  |   mappingDefinitions = self.options.vim.autocomplete.nvim-cmp.mappings; | ||||||
|   mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions; |   mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions; | ||||||
| 
 |  | ||||||
|   builtSources = |  | ||||||
|     concatMapStringsSep |  | ||||||
|     "\n" |  | ||||||
|     (n: "{ name = '${n}'},") |  | ||||||
|     (attrNames cfg.sources); |  | ||||||
| 
 |  | ||||||
|   builtMaps = |  | ||||||
|     concatStringsSep |  | ||||||
|     "\n" |  | ||||||
|     (mapAttrsToList |  | ||||||
|       (n: v: |  | ||||||
|         if v == null |  | ||||||
|         then "" |  | ||||||
|         else "${n} = '${v}',") |  | ||||||
|       cfg.sources); |  | ||||||
| 
 |  | ||||||
|   dagPlacement = |  | ||||||
|     if lspkindEnabled |  | ||||||
|     then entryAfter ["lspkind"] |  | ||||||
|     else entryAnywhere; |  | ||||||
| in { | in { | ||||||
|   config = mkIf cfg.enable { |   config = mkIf cfg.enable { | ||||||
|     vim.startPlugins = [ |     vim = { | ||||||
|  |       startPlugins = [ | ||||||
|         "nvim-cmp" |         "nvim-cmp" | ||||||
|         "cmp-buffer" |         "cmp-buffer" | ||||||
|       "cmp-vsnip" |  | ||||||
|         "cmp-path" |         "cmp-path" | ||||||
|       "vim-vsnip" |  | ||||||
|       ]; |       ]; | ||||||
| 
 | 
 | ||||||
|     vim.autocomplete.sources = { |       autocomplete.nvim-cmp.sources = { | ||||||
|       "nvim-cmp" = null; |         nvim-cmp = null; | ||||||
|       "vsnip" = "[VSnip]"; |         buffer = "[Buffer]"; | ||||||
|       "buffer" = "[Buffer]"; |         path = "[Path]"; | ||||||
|       "crates" = "[Crates]"; |  | ||||||
|       "path" = "[Path]"; |  | ||||||
|       "copilot" = "[Copilot]"; |  | ||||||
|       }; |       }; | ||||||
| 
 | 
 | ||||||
|     vim.maps.insert = mkMerge [ |       autocomplete.nvim-cmp.setupOpts = { | ||||||
|       (mkSetLuaBinding mappings.complete '' |         sources = map (s: {name = s;}) (attrNames cfg.sources); | ||||||
|         require('cmp').complete |  | ||||||
|       '') |  | ||||||
|       (let |  | ||||||
|         defaultKeys = |  | ||||||
|           if config.vim.autopairs.enable |  | ||||||
|           then "require('nvim-autopairs').autopairs_cr()" |  | ||||||
|           else "vim.api.nvim_replace_termcodes(${toJSON mappings.confirm.value}, true, false, true)"; |  | ||||||
|       in |  | ||||||
|         mkSetLuaBinding mappings.confirm '' |  | ||||||
|           function() |  | ||||||
|             if not require('cmp').confirm({ select = true }) then |  | ||||||
|               vim.fn.feedkeys(${defaultKeys}, 'n') |  | ||||||
|             end |  | ||||||
|           end |  | ||||||
|         '') |  | ||||||
|       (mkSetLuaBinding mappings.next '' |  | ||||||
|         function() |  | ||||||
|           local has_words_before = function() |  | ||||||
|             local line, col = unpack(vim.api.nvim_win_get_cursor(0)) |  | ||||||
|             return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil |  | ||||||
|           end |  | ||||||
| 
 | 
 | ||||||
|           local cmp = require('cmp') |         # TODO: try to get nvim-cmp to follow global border style | ||||||
|  |         window = mkIf config.vim.ui.borders.enable { | ||||||
|  |           completion = mkLuaInline "cmp.config.window.bordered()"; | ||||||
|  |           documentation = mkLuaInline "cmp.config.window.bordered()"; | ||||||
|  |         }; | ||||||
| 
 | 
 | ||||||
|           local feedkey = function(key, mode) |         formatting.format = cfg.format; | ||||||
|             vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true) |       }; | ||||||
|           end |  | ||||||
| 
 | 
 | ||||||
|           if cmp.visible() then |       pluginRC.nvim-cmp = mkIf cfg.enable (entryAfter ["autopairs" "luasnip"] '' | ||||||
|             cmp.select_next_item() |         local luasnip = require("luasnip") | ||||||
|           elseif vim.fn['vsnip#available'](1) == 1 then |         local cmp = require("cmp") | ||||||
|             feedkey("<Plug>(vsnip-expand-or-jump)", "") |         cmp.setup(${toLuaObject cfg.setupOpts}) | ||||||
|           elseif has_words_before() then |  | ||||||
|             cmp.complete() |  | ||||||
|           else |  | ||||||
|             local termcode = vim.api.nvim_replace_termcodes(${toJSON mappings.next.value}, true, false, true) |  | ||||||
| 
 |  | ||||||
|             vim.fn.feedkeys(termcode, 'n') |  | ||||||
|           end |  | ||||||
|         end |  | ||||||
|       '') |  | ||||||
|       (mkSetLuaBinding mappings.previous '' |  | ||||||
|         function() |  | ||||||
|           local cmp = require('cmp') |  | ||||||
| 
 |  | ||||||
|           local feedkey = function(key, mode) |  | ||||||
|             vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true) |  | ||||||
|           end |  | ||||||
| 
 |  | ||||||
|           if cmp.visible() then |  | ||||||
|             cmp.select_prev_item() |  | ||||||
|           elseif vim.fn['vsnip#available'](-1) == 1 then |  | ||||||
|             feedkeys("<Plug>(vsnip-jump-prev)", "") |  | ||||||
|           end |  | ||||||
|         end |  | ||||||
|       '') |  | ||||||
|       (mkSetLuaBinding mappings.close '' |  | ||||||
|         require('cmp').mapping.abort() |  | ||||||
|       '') |  | ||||||
|       (mkSetLuaBinding mappings.scrollDocsUp '' |  | ||||||
|         require('cmp').mapping.scroll_docs(-4) |  | ||||||
|       '') |  | ||||||
|       (mkSetLuaBinding mappings.scrollDocsDown '' |  | ||||||
|         require('cmp').mapping.scroll_docs(4) |  | ||||||
|       '') |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     vim.maps.command = mkMerge [ |  | ||||||
|       (mkSetLuaBinding mappings.complete '' |  | ||||||
|         require('cmp').complete |  | ||||||
|       '') |  | ||||||
|       (mkSetLuaBinding mappings.close '' |  | ||||||
|         require('cmp').mapping.close() |  | ||||||
|       '') |  | ||||||
|       (mkSetLuaBinding mappings.scrollDocsUp '' |  | ||||||
|         require('cmp').mapping.scroll_docs(-4) |  | ||||||
|       '') |  | ||||||
|       (mkSetLuaBinding mappings.scrollDocsDown '' |  | ||||||
|         require('cmp').mapping.scroll_docs(4) |  | ||||||
|       '') |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     vim.maps.select = mkMerge [ |  | ||||||
|       (mkSetLuaBinding mappings.next '' |  | ||||||
|         function() |  | ||||||
|           local cmp = require('cmp') |  | ||||||
|           local has_words_before = function() |  | ||||||
|             local line, col = unpack(vim.api.nvim_win_get_cursor(0)) |  | ||||||
|             return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil |  | ||||||
|           end |  | ||||||
| 
 |  | ||||||
|           local feedkey = function(key, mode) |  | ||||||
|             vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true) |  | ||||||
|           end |  | ||||||
| 
 |  | ||||||
|           if cmp.visible() then |  | ||||||
|             cmp.select_next_item() |  | ||||||
|           elseif vim.fn['vsnip#available'](1) == 1 then |  | ||||||
|             feedkey("<Plug>(vsnip-expand-or-jump)", "") |  | ||||||
|           elseif has_words_before() then |  | ||||||
|             cmp.complete() |  | ||||||
|           else |  | ||||||
|             local termcode = vim.api.nvim_replace_termcodes(${toJSON mappings.next.value}, true, false, true) |  | ||||||
| 
 |  | ||||||
|             vim.fn.feedkeys(termcode, 'n') |  | ||||||
|           end |  | ||||||
|         end |  | ||||||
|       '') |  | ||||||
|       (mkSetLuaBinding mappings.previous '' |  | ||||||
|         function() |  | ||||||
|           local cmp = require('cmp') |  | ||||||
| 
 |  | ||||||
|           local feedkey = function(key, mode) |  | ||||||
|             vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true) |  | ||||||
|           end |  | ||||||
| 
 |  | ||||||
|           if cmp.visible() then |  | ||||||
|             cmp.select_prev_item() |  | ||||||
|           elseif vim.fn['vsnip#available'](-1) == 1 then |  | ||||||
|             feedkeys("<Plug>(vsnip-jump-prev)", "") |  | ||||||
|           end |  | ||||||
|         end |  | ||||||
|       '') |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     # TODO: alternative snippet engines to vsnip |  | ||||||
|     # https://github.com/hrsh7th/nvim-cmp/blob/main/doc/cmp.txt#L82 |  | ||||||
|     vim.pluginRC.completion = mkIf (cfg.type == "nvim-cmp") (dagPlacement '' |  | ||||||
|       local nvim_cmp_menu_map = function(entry, vim_item) |  | ||||||
|         -- name for each source |  | ||||||
|         vim_item.menu = ({ |  | ||||||
|           ${builtMaps} |  | ||||||
|         })[entry.source.name] |  | ||||||
|         return vim_item |  | ||||||
|       end |  | ||||||
| 
 |  | ||||||
|       ${optionalString lspkindEnabled '' |  | ||||||
|         lspkind_opts.before = ${cfg.formatting.format} |  | ||||||
|       ''} |  | ||||||
| 
 |  | ||||||
|       local cmp = require'cmp' |  | ||||||
|       cmp.setup({ |  | ||||||
|         ${optionalString config.vim.ui.borders.enable '' |  | ||||||
|         -- explicitly enabled by setting ui.borders.enable = true |  | ||||||
|         -- TODO: try to get nvim-cmp to follow global border style |  | ||||||
|         window = { |  | ||||||
|           completion = cmp.config.window.bordered(), |  | ||||||
|           documentation = cmp.config.window.bordered(), |  | ||||||
|         }, |  | ||||||
|       ''} |  | ||||||
| 
 |  | ||||||
|         snippet = { |  | ||||||
|           expand = function(args) |  | ||||||
|             vim.fn["vsnip#anonymous"](args.body) |  | ||||||
|           end, |  | ||||||
|         }, |  | ||||||
| 
 |  | ||||||
|         sources = { |  | ||||||
|           ${builtSources} |  | ||||||
|         }, |  | ||||||
| 
 |  | ||||||
|         completion = { |  | ||||||
|           completeopt = 'menu,menuone,noinsert', |  | ||||||
|           ${optionalString (!cfg.alwaysComplete) "autocomplete = false"} |  | ||||||
|         }, |  | ||||||
| 
 |  | ||||||
|         formatting = { |  | ||||||
|           format = |  | ||||||
|       ${ |  | ||||||
|         if lspkindEnabled |  | ||||||
|         then "lspkind.cmp_format(lspkind_opts)" |  | ||||||
|         else cfg.formatting.format |  | ||||||
|       }, |  | ||||||
|         } |  | ||||||
|       }) |  | ||||||
|       ${optionalString (config.vim.autopairs.enable && config.vim.autopairs.type == "nvim-autopairs") '' |  | ||||||
|         local cmp_autopairs = require('nvim-autopairs.completion.cmp') |  | ||||||
|         cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done({ map_char = { text = ""} })) |  | ||||||
|       ''} |  | ||||||
|       ''); |       ''); | ||||||
| 
 | 
 | ||||||
|     vim.snippets.vsnip.enable = |       # `cmp` and `luasnip` are defined above, in the `nvim-cmp` section | ||||||
|       if (cfg.type == "nvim-cmp") |       autocomplete.nvim-cmp.setupOpts.mapping = { | ||||||
|       then true |         ${mappings.complete.value} = mkLuaInline "cmp.mapping.complete()"; | ||||||
|       else config.vim.snippets.vsnip.enable; |         ${mappings.close.value} = mkLuaInline "cmp.mapping.abort()"; | ||||||
|  |         ${mappings.scrollDocsUp.value} = mkLuaInline "cmp.mapping.scroll_docs(-4)"; | ||||||
|  |         ${mappings.scrollDocsDown.value} = mkLuaInline "cmp.mapping.scroll_docs(4)"; | ||||||
|  | 
 | ||||||
|  |         ${mappings.confirm.value} = mkLuaInline '' | ||||||
|  |           cmp.mapping(function(fallback) | ||||||
|  |             if cmp.visible() then | ||||||
|  |               ${ | ||||||
|  |             if luasnipEnable | ||||||
|  |             then '' | ||||||
|  |               if luasnip.expandable() then | ||||||
|  |                 luasnip.expand() | ||||||
|  |               else | ||||||
|  |                 cmp.confirm({ select = true }) | ||||||
|  |               end | ||||||
|  |             '' | ||||||
|  |             else "cmp.confirm({ select = true })" | ||||||
|  |           } | ||||||
|  |             else | ||||||
|  |                 fallback() | ||||||
|  |             end | ||||||
|  |           end) | ||||||
|  |         ''; | ||||||
|  | 
 | ||||||
|  |         ${mappings.next.value} = mkLuaInline '' | ||||||
|  |           cmp.mapping(function(fallback) | ||||||
|  |             local has_words_before = function() | ||||||
|  |               local line, col = unpack(vim.api.nvim_win_get_cursor(0)) | ||||||
|  |               return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil | ||||||
|  |             end | ||||||
|  | 
 | ||||||
|  |             if cmp.visible() then | ||||||
|  |               cmp.select_next_item() | ||||||
|  |               ${optionalString luasnipEnable '' | ||||||
|  |             elseif luasnip.locally_jumpable(1) then | ||||||
|  |               luasnip.jump(1) | ||||||
|  |           ''} | ||||||
|  |             elseif has_words_before() then | ||||||
|  |               cmp.complete() | ||||||
|  |             else | ||||||
|  |               fallback() | ||||||
|  |             end | ||||||
|  |           end) | ||||||
|  |         ''; | ||||||
|  | 
 | ||||||
|  |         ${mappings.previous.value} = mkLuaInline '' | ||||||
|  |           cmp.mapping(function(fallback) | ||||||
|  |             if cmp.visible() then | ||||||
|  |               cmp.select_prev_item() | ||||||
|  |               ${optionalString luasnipEnable '' | ||||||
|  |             elseif luasnip.locally_jumpable(-1) then | ||||||
|  |               luasnip.jump(-1) | ||||||
|  |           ''} | ||||||
|  |             else | ||||||
|  |               fallback() | ||||||
|  |             end | ||||||
|  |           end) | ||||||
|  |         ''; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| _: { | { | ||||||
|   imports = [ |   imports = [ | ||||||
|     ./config.nix |     ./config.nix | ||||||
|     ./nvim-cmp.nix |     ./nvim-cmp.nix | ||||||
|  |  | ||||||
|  | @ -1,16 +1,56 @@ | ||||||
| {lib, ...}: let | { | ||||||
|   inherit (lib.options) mkEnableOption mkOption literalMD; |   lib, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: let | ||||||
|  |   inherit (lib.options) mkEnableOption mkOption literalExpression literalMD; | ||||||
|  |   inherit (lib.types) str attrsOf nullOr either; | ||||||
|  |   inherit (lib.generators) mkLuaInline; | ||||||
|   inherit (lib.nvim.binds) mkMappingOption; |   inherit (lib.nvim.binds) mkMappingOption; | ||||||
|   inherit (lib.types) enum attrsOf nullOr str bool; |   inherit (lib.nvim.types) mkPluginSetupOption luaInline mergelessListOf; | ||||||
| in { |   inherit (lib.nvim.lua) toLuaObject; | ||||||
|   options.vim = { |   inherit (builtins) isString; | ||||||
|     autocomplete = { |  | ||||||
|       enable = mkEnableOption "autocomplete" // {default = false;}; |  | ||||||
| 
 | 
 | ||||||
|       alwaysComplete = mkOption { |   cfg = config.vim.autocomplete.nvim-cmp; | ||||||
|         type = bool; | in { | ||||||
|         description = "Automatically show completion."; |   options.vim.autocomplete.nvim-cmp = { | ||||||
|         default = true; |     enable = mkEnableOption "nvim-cmp"; | ||||||
|  |     setupOpts = mkPluginSetupOption "the autocomplete plugin" { | ||||||
|  |       completion.completeopt = mkOption { | ||||||
|  |         type = str; | ||||||
|  |         default = "menu,menuone,noinsert"; | ||||||
|  |         description = '' | ||||||
|  |           A comma-separated list of options for completion. | ||||||
|  | 
 | ||||||
|  |           See `:help completeopt` for the complete list. | ||||||
|  |         ''; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       sorting.comparators = mkOption { | ||||||
|  |         type = mergelessListOf (either str luaInline); | ||||||
|  |         default = [ | ||||||
|  |           "offset" | ||||||
|  |           "exact" | ||||||
|  |           "score" | ||||||
|  |           "kind" | ||||||
|  |           "length" | ||||||
|  |           "sort_text" | ||||||
|  |         ]; | ||||||
|  |         description = '' | ||||||
|  |           The comparator functions used for sorting completions. | ||||||
|  | 
 | ||||||
|  |           You can either pass a valid inline lua function | ||||||
|  |           (see `:help cmp-config.sorting.comparators`), | ||||||
|  |           or a string, in which case the builtin comparator with that name will | ||||||
|  |           be used. | ||||||
|  |         ''; | ||||||
|  |         apply = map ( | ||||||
|  |           c: | ||||||
|  |             if isString c | ||||||
|  |             then mkLuaInline ("cmp.config.compare." + c) | ||||||
|  |             else c | ||||||
|  |         ); | ||||||
|  |       }; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     mappings = { |     mappings = { | ||||||
|  | @ -23,50 +63,41 @@ in { | ||||||
|       scrollDocsDown = mkMappingOption "Scroll docs down [nvim-cmp]" "<C-f>"; |       scrollDocsDown = mkMappingOption "Scroll docs down [nvim-cmp]" "<C-f>"; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|       type = mkOption { |  | ||||||
|         type = enum ["nvim-cmp"]; |  | ||||||
|         default = "nvim-cmp"; |  | ||||||
|         description = "Set the autocomplete plugin. Options: [nvim-cmp]"; |  | ||||||
|       }; |  | ||||||
| 
 |  | ||||||
|       sources = mkOption { |  | ||||||
|         description = '' |  | ||||||
|           Attribute set of source names for nvim-cmp. |  | ||||||
| 
 |  | ||||||
|           If an attribute set is provided, then the menu value of |  | ||||||
|           `vim_item` in the format will be set to the value (if |  | ||||||
|           utilizing the `nvim_cmp_menu_map` function). |  | ||||||
| 
 |  | ||||||
|           Note: only use a single attribute name per attribute set |  | ||||||
|         ''; |  | ||||||
|         type = attrsOf (nullOr str); |  | ||||||
|         default = {}; |  | ||||||
|         example = '' |  | ||||||
|           {nvim-cmp = null; buffer = "[Buffer]";} |  | ||||||
|         ''; |  | ||||||
|       }; |  | ||||||
| 
 |  | ||||||
|       formatting = { |  | ||||||
|     format = mkOption { |     format = mkOption { | ||||||
|           description = '' |       type = luaInline; | ||||||
|             The function used to customize the appearance of the completion menu. |       default = mkLuaInline '' | ||||||
| 
 |         function(entry, vim_item) | ||||||
|             If [](#opt-vim.lsp.lspkind.enable) is true, then the function |           vim_item.menu = (${toLuaObject cfg.sources})[entry.source.name] | ||||||
|             will be called before modifications from lspkind. |           return vim_item | ||||||
| 
 |         end | ||||||
|             Default is to call the menu mapping function. |  | ||||||
|       ''; |       ''; | ||||||
|           type = str; |       defaultText = literalMD '' | ||||||
|           default = "nvim_cmp_menu_map"; |  | ||||||
|           example = literalMD '' |  | ||||||
|         ```lua |         ```lua | ||||||
|         function(entry, vim_item) |         function(entry, vim_item) | ||||||
|  |           vim_item.menu = (''${toLuaObject config.vim.autocomplete.nvim-cmp.sources})[entry.source.name] | ||||||
|           return vim_item |           return vim_item | ||||||
|         end |         end | ||||||
|         ``` |         ``` | ||||||
|       ''; |       ''; | ||||||
|  |       description = '' | ||||||
|  |         The function used to customize the completion menu entires. This is | ||||||
|  |         outside of `setupOpts` to allow for an easier integration with | ||||||
|  |         lspkind.nvim. | ||||||
|  | 
 | ||||||
|  |         See `:help cmp-config.formatting.format`. | ||||||
|  |       ''; | ||||||
|     }; |     }; | ||||||
|       }; | 
 | ||||||
|  |     sources = mkOption { | ||||||
|  |       type = attrsOf (nullOr str); | ||||||
|  |       default = {}; | ||||||
|  |       description = "The list of sources used by nvim-cmp"; | ||||||
|  |       example = literalExpression '' | ||||||
|  |         { | ||||||
|  |           nvim-cmp = null; | ||||||
|  |           buffer = "[Buffer]"; | ||||||
|  |         } | ||||||
|  |       ''; | ||||||
|     }; |     }; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -16,9 +16,10 @@ | ||||||
| in { | in { | ||||||
|   config = mkMerge [ |   config = mkMerge [ | ||||||
|     (mkIf cfg.enable { |     (mkIf cfg.enable { | ||||||
|       vim.startPlugins = ["nvim-dap"]; |       vim = { | ||||||
|  |         startPlugins = ["nvim-dap"]; | ||||||
| 
 | 
 | ||||||
|       vim.pluginRC = |         pluginRC = | ||||||
|           { |           { | ||||||
|             # TODO customizable keymaps |             # TODO customizable keymaps | ||||||
|             nvim-dap = entryAnywhere '' |             nvim-dap = entryAnywhere '' | ||||||
|  | @ -28,7 +29,7 @@ in { | ||||||
|           } |           } | ||||||
|           // mapAttrs (_: v: (entryAfter ["nvim-dap"] v)) cfg.sources; |           // mapAttrs (_: v: (entryAfter ["nvim-dap"] v)) cfg.sources; | ||||||
| 
 | 
 | ||||||
|       vim.maps.normal = mkMerge [ |         maps.normal = mkMerge [ | ||||||
|           (mkSetLuaBinding mappings.continue "require('dap').continue") |           (mkSetLuaBinding mappings.continue "require('dap').continue") | ||||||
|           (mkSetLuaBinding mappings.restart "require('dap').restart") |           (mkSetLuaBinding mappings.restart "require('dap').restart") | ||||||
|           (mkSetLuaBinding mappings.terminate "require('dap').terminate") |           (mkSetLuaBinding mappings.terminate "require('dap').terminate") | ||||||
|  | @ -47,11 +48,13 @@ in { | ||||||
|           (mkSetLuaBinding mappings.goUp "require('dap').up") |           (mkSetLuaBinding mappings.goUp "require('dap').up") | ||||||
|           (mkSetLuaBinding mappings.goDown "require('dap').down") |           (mkSetLuaBinding mappings.goDown "require('dap').down") | ||||||
|         ]; |         ]; | ||||||
|  |       }; | ||||||
|     }) |     }) | ||||||
|     (mkIf (cfg.enable && cfg.ui.enable) { |     (mkIf (cfg.enable && cfg.ui.enable) { | ||||||
|       vim.startPlugins = ["nvim-dap-ui" "nvim-nio"]; |       vim = { | ||||||
|  |         startPlugins = ["nvim-dap-ui" "nvim-nio"]; | ||||||
| 
 | 
 | ||||||
|       vim.pluginRC.nvim-dap-ui = entryAfter ["nvim-dap"] ('' |         pluginRC.nvim-dap-ui = entryAfter ["nvim-dap"] ('' | ||||||
|             local dapui = require("dapui") |             local dapui = require("dapui") | ||||||
|             dapui.setup() |             dapui.setup() | ||||||
|           '' |           '' | ||||||
|  | @ -66,7 +69,8 @@ in { | ||||||
|               dapui.close() |               dapui.close() | ||||||
|             end |             end | ||||||
|           ''); |           ''); | ||||||
|       vim.maps.normal = mkSetLuaBinding mappings.toggleDapUI "require('dapui').toggle"; |         maps.normal = mkSetLuaBinding mappings.toggleDapUI "require('dapui').toggle"; | ||||||
|  |       }; | ||||||
|     }) |     }) | ||||||
|   ]; |   ]; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -9,7 +9,7 @@ | ||||||
|   inherit (lib.options) mkOption mkEnableOption; |   inherit (lib.options) mkOption mkEnableOption; | ||||||
|   inherit (lib.strings) optionalString; |   inherit (lib.strings) optionalString; | ||||||
|   inherit (lib.trivial) boolToString; |   inherit (lib.trivial) boolToString; | ||||||
|   inherit (lib.lists) isList optionals; |   inherit (lib.lists) isList; | ||||||
|   inherit (lib.types) bool package str listOf either enum; |   inherit (lib.types) bool package str listOf either enum; | ||||||
|   inherit (lib.nvim.types) mkGrammarOption; |   inherit (lib.nvim.types) mkGrammarOption; | ||||||
|   inherit (lib.nvim.lua) expToLua; |   inherit (lib.nvim.lua) expToLua; | ||||||
|  | @ -101,7 +101,7 @@ in { | ||||||
|       vim = { |       vim = { | ||||||
|         startPlugins = ["crates-nvim"]; |         startPlugins = ["crates-nvim"]; | ||||||
|         lsp.null-ls.enable = mkIf cfg.crates.codeActions true; |         lsp.null-ls.enable = mkIf cfg.crates.codeActions true; | ||||||
|         autocomplete.sources = {"crates" = "[Crates]";}; |         autocomplete.nvim-cmp.sources = {crates = "[Crates]";}; | ||||||
|         pluginRC.rust-crates = entryAnywhere '' |         pluginRC.rust-crates = entryAnywhere '' | ||||||
|           require('crates').setup { |           require('crates').setup { | ||||||
|             null_ls = { |             null_ls = { | ||||||
|  |  | ||||||
|  | @ -11,7 +11,7 @@ | ||||||
|   inherit (lib.nvim.binds) addDescriptionsToMappings; |   inherit (lib.nvim.binds) addDescriptionsToMappings; | ||||||
| 
 | 
 | ||||||
|   cfg = config.vim.lsp; |   cfg = config.vim.lsp; | ||||||
|   usingNvimCmp = config.vim.autocomplete.enable && config.vim.autocomplete.type == "nvim-cmp"; |   usingNvimCmp = config.vim.autocomplete.nvim-cmp.enable; | ||||||
|   self = import ./module.nix {inherit config lib pkgs;}; |   self = import ./module.nix {inherit config lib pkgs;}; | ||||||
| 
 | 
 | ||||||
|   mappingDefinitions = self.options.vim.lsp.mappings; |   mappingDefinitions = self.options.vim.lsp.mappings; | ||||||
|  | @ -25,7 +25,7 @@ in { | ||||||
|     vim = { |     vim = { | ||||||
|       startPlugins = optional usingNvimCmp "cmp-nvim-lsp"; |       startPlugins = optional usingNvimCmp "cmp-nvim-lsp"; | ||||||
| 
 | 
 | ||||||
|       autocomplete.sources = {"nvim_lsp" = "[LSP]";}; |       autocomplete.nvim-cmp.sources = {nvim_lsp = "[LSP]";}; | ||||||
| 
 | 
 | ||||||
|       pluginRC.lsp-setup = '' |       pluginRC.lsp-setup = '' | ||||||
|         vim.g.formatsave = ${boolToString cfg.formatOnSave}; |         vim.g.formatsave = ${boolToString cfg.formatOnSave}; | ||||||
|  |  | ||||||
|  | @ -3,18 +3,32 @@ | ||||||
|   lib, |   lib, | ||||||
|   ... |   ... | ||||||
| }: let | }: let | ||||||
|   inherit (lib.modules) mkIf; |   inherit (lib.modules) mkIf mkForce; | ||||||
|   inherit (lib.nvim.dag) entryAnywhere; |   inherit (lib.generators) mkLuaInline; | ||||||
|  |   inherit (lib.nvim.lua) toLuaObject; | ||||||
| 
 | 
 | ||||||
|   cfg = config.vim.lsp; |   cfg = config.vim.lsp.lspkind; | ||||||
| in { | in { | ||||||
|   config = mkIf (cfg.enable && cfg.lspkind.enable) { |   config = mkIf cfg.enable { | ||||||
|     vim.startPlugins = ["lspkind"]; |     assertions = [ | ||||||
|     vim.pluginRC.lspkind = entryAnywhere '' |       { | ||||||
|       local lspkind = require'lspkind' |         assertion = config.vim.autocomplete.nvim-cmp.enable; | ||||||
|       local lspkind_opts = { |         message = '' | ||||||
|         mode = '${cfg.lspkind.mode}' |           While lspkind supports Neovim's native lsp upstream, using that over | ||||||
|       } |           nvim-cmp isn't recommended, nor supported by nvf. | ||||||
|  | 
 | ||||||
|  |           Please migrate to nvim-cmp if you want to use lspkind. | ||||||
|         ''; |         ''; | ||||||
|  |       } | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     vim = { | ||||||
|  |       startPlugins = ["lspkind"]; | ||||||
|  | 
 | ||||||
|  |       lsp.lspkind.setupOpts.before = config.vim.autocomplete.nvim-cmp.format; | ||||||
|  |       autocomplete.nvim-cmp.setupOpts.formatting.format = mkForce (mkLuaInline '' | ||||||
|  |         require("lspkind").cmp_format(${toLuaObject cfg.setupOpts}) | ||||||
|  |       ''); | ||||||
|  |     }; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,16 +1,22 @@ | ||||||
| {lib, ...}: let | {lib, ...}: let | ||||||
|   inherit (lib.options) mkEnableOption mkOption; |   inherit (lib.options) mkEnableOption mkOption; | ||||||
|   inherit (lib.types) enum; |   inherit (lib.types) enum nullOr; | ||||||
|  |   inherit (lib.nvim.types) mkPluginSetupOption luaInline; | ||||||
| in { | in { | ||||||
|   options.vim.lsp = { |   options.vim.lsp.lspkind = { | ||||||
|     lspkind = { |  | ||||||
|     enable = mkEnableOption "vscode-like pictograms for lsp [lspkind]"; |     enable = mkEnableOption "vscode-like pictograms for lsp [lspkind]"; | ||||||
| 
 |     setupOpts = mkPluginSetupOption "lspkind.nvim" { | ||||||
|       mode = mkOption { |       mode = mkOption { | ||||||
|         description = "Defines how annotations are shown"; |         description = "Defines how annotations are shown"; | ||||||
|         type = enum ["text" "text_symbol" "symbol_text" "symbol"]; |         type = enum ["text" "text_symbol" "symbol_text" "symbol"]; | ||||||
|         default = "symbol_text"; |         default = "symbol_text"; | ||||||
|       }; |       }; | ||||||
|  | 
 | ||||||
|  |       before = mkOption { | ||||||
|  |         description = "The function that will be called before lspkind's modifications are applied"; | ||||||
|  |         type = nullOr luaInline; | ||||||
|  |         default = null; | ||||||
|  |       }; | ||||||
|     }; |     }; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -45,10 +45,10 @@ in { | ||||||
| 
 | 
 | ||||||
|         completion = { |         completion = { | ||||||
|           nvim_cmp = mkOption { |           nvim_cmp = mkOption { | ||||||
|             # if using nvim-cmp, otherwise set to false |             # If using nvim-cmp, otherwise set to false | ||||||
|             type = bool; |             type = bool; | ||||||
|             description = "If using nvim-cmp, otherwise set to false"; |             description = "If using nvim-cmp, otherwise set to false"; | ||||||
|             default = config.vim.autocomplete.type == "nvim-cmp"; |             default = config.vim.autocomplete.nvim-cmp.enable; | ||||||
|           }; |           }; | ||||||
|         }; |         }; | ||||||
|       }; |       }; | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| { | { | ||||||
|   imports = [ |   imports = [ | ||||||
|     ./vsnip |     ./luasnip | ||||||
|   ]; |   ]; | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										17
									
								
								modules/plugins/snippets/luasnip/config.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								modules/plugins/snippets/luasnip/config.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | ||||||
|  | { | ||||||
|  |   config, | ||||||
|  |   lib, | ||||||
|  |   ... | ||||||
|  | }: let | ||||||
|  |   inherit (lib.modules) mkIf; | ||||||
|  | 
 | ||||||
|  |   cfg = config.vim.snippets.luasnip; | ||||||
|  | in { | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     vim = { | ||||||
|  |       startPlugins = ["luasnip" "cmp-luasnip"] ++ cfg.providers; | ||||||
|  |       autocomplete.nvim-cmp.sources = {luasnip = "[LuaSnip]";}; | ||||||
|  |       pluginRC.luasnip = cfg.loaders; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										6
									
								
								modules/plugins/snippets/luasnip/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								modules/plugins/snippets/luasnip/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | ||||||
|  | { | ||||||
|  |   imports = [ | ||||||
|  |     ./luasnip.nix | ||||||
|  |     ./config.nix | ||||||
|  |   ]; | ||||||
|  | } | ||||||
							
								
								
									
										36
									
								
								modules/plugins/snippets/luasnip/luasnip.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								modules/plugins/snippets/luasnip/luasnip.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,36 @@ | ||||||
|  | {lib, ...}: let | ||||||
|  |   inherit (lib.options) mkEnableOption mkOption literalExpression literalMD; | ||||||
|  |   inherit (lib.types) listOf lines; | ||||||
|  |   inherit (lib.nvim.types) pluginType; | ||||||
|  | in { | ||||||
|  |   options.vim.snippets.luasnip = { | ||||||
|  |     enable = mkEnableOption "luasnip"; | ||||||
|  |     providers = mkOption { | ||||||
|  |       type = listOf pluginType; | ||||||
|  |       default = ["friendly-snippets"]; | ||||||
|  |       description = '' | ||||||
|  |         The snippet provider packages. | ||||||
|  | 
 | ||||||
|  |         ::: {.note} | ||||||
|  |         These are simply appended to {option} `vim.startPlugins`. | ||||||
|  |         ::: | ||||||
|  |       ''; | ||||||
|  |       example = literalExpression "[\"vimPlugins.vim-snippets\"]"; | ||||||
|  |     }; | ||||||
|  |     loaders = mkOption { | ||||||
|  |       type = lines; | ||||||
|  |       default = "require('luasnip.loaders.from_vscode').lazy_load()"; | ||||||
|  |       defaultText = literalMD '' | ||||||
|  |         ```lua | ||||||
|  |         require('luasnip.loaders.from_vscode').lazy_load() | ||||||
|  |         ``` | ||||||
|  |       ''; | ||||||
|  |       description = "Lua code used to load snippet providers."; | ||||||
|  |       example = literalMD '' | ||||||
|  |         ```lua | ||||||
|  |         require("luasnip.loaders.from_snipmate").lazy_load() | ||||||
|  |         ``` | ||||||
|  |       ''; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  | @ -1,13 +0,0 @@ | ||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   ... |  | ||||||
| }: let |  | ||||||
|   inherit (lib.modules) mkIf; |  | ||||||
| 
 |  | ||||||
|   cfg = config.vim.snippets.vsnip; |  | ||||||
| in { |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     vim.startPlugins = ["vim-vsnip"]; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,5 +0,0 @@ | ||||||
| { |  | ||||||
|   imports = [ |  | ||||||
|     ./vsnip.nix |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
|  | @ -1,7 +0,0 @@ | ||||||
| {lib, ...}: let |  | ||||||
|   inherit (lib.options) mkEnableOption; |  | ||||||
| in { |  | ||||||
|   options.vim.snippets.vsnip = { |  | ||||||
|     enable = mkEnableOption "vim-vsnip: snippet LSP/VSCode's format"; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -4,10 +4,11 @@ | ||||||
|   ... |   ... | ||||||
| }: let | }: let | ||||||
|   inherit (lib.options) mkOption; |   inherit (lib.options) mkOption; | ||||||
|   inherit (lib.attrsets) attrNames listToAttrs; |   inherit (lib.attrsets) attrNames; | ||||||
|   inherit (lib.strings) hasPrefix; |   inherit (lib.strings) hasPrefix; | ||||||
|   inherit (lib.types) bool lines enum; |   inherit (lib.types) bool lines enum; | ||||||
|   inherit (lib.modules) mkIf; |   inherit (lib.modules) mkIf; | ||||||
|  |   inherit (lib.nvim.attrsets) mapListToAttrs; | ||||||
|   inherit (lib.nvim.dag) entryBefore; |   inherit (lib.nvim.dag) entryBefore; | ||||||
|   inherit (lib.nvim.types) hexColor; |   inherit (lib.nvim.types) hexColor; | ||||||
| 
 | 
 | ||||||
|  | @ -17,7 +18,8 @@ | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   numbers = ["0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "A" "B" "C" "D" "E" "F"]; |   numbers = ["0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "A" "B" "C" "D" "E" "F"]; | ||||||
|   base16Options = listToAttrs (map (n: { |   base16Options = | ||||||
|  |     mapListToAttrs (n: { | ||||||
|       name = "base0${n}"; |       name = "base0${n}"; | ||||||
|       value = mkOption { |       value = mkOption { | ||||||
|         description = "The base0${n} color to use"; |         description = "The base0${n} color to use"; | ||||||
|  | @ -28,7 +30,7 @@ | ||||||
|           else "#${v}"; |           else "#${v}"; | ||||||
|       }; |       }; | ||||||
|     }) |     }) | ||||||
|     numbers); |     numbers; | ||||||
| in { | in { | ||||||
|   options.vim.theme = { |   options.vim.theme = { | ||||||
|     enable = mkOption { |     enable = mkOption { | ||||||
|  |  | ||||||
|  | @ -11,7 +11,7 @@ | ||||||
|   inherit (lib.nvim.dag) entryBefore entryAfter; |   inherit (lib.nvim.dag) entryBefore entryAfter; | ||||||
| 
 | 
 | ||||||
|   cfg = config.vim.treesitter; |   cfg = config.vim.treesitter; | ||||||
|   usingNvimCmp = config.vim.autocomplete.enable && config.vim.autocomplete.type == "nvim-cmp"; |   usingNvimCmp = config.vim.autocomplete.nvim-cmp.enable; | ||||||
| 
 | 
 | ||||||
|   self = import ./treesitter.nix {inherit pkgs lib;}; |   self = import ./treesitter.nix {inherit pkgs lib;}; | ||||||
|   mappingDefinitions = self.options.vim.treesitter.mappings; |   mappingDefinitions = self.options.vim.treesitter.mappings; | ||||||
|  | @ -21,7 +21,7 @@ in { | ||||||
|     vim = { |     vim = { | ||||||
|       startPlugins = ["nvim-treesitter"] ++ optional usingNvimCmp "cmp-treesitter"; |       startPlugins = ["nvim-treesitter"] ++ optional usingNvimCmp "cmp-treesitter"; | ||||||
| 
 | 
 | ||||||
|       autocomplete.sources = {"treesitter" = "[Treesitter]";}; |       autocomplete.nvim-cmp.sources = {treesitter = "[Treesitter]";}; | ||||||
|       treesitter.grammars = optionals cfg.addDefaultGrammars cfg.defaultGrammars; |       treesitter.grammars = optionals cfg.addDefaultGrammars cfg.defaultGrammars; | ||||||
| 
 | 
 | ||||||
|       maps = { |       maps = { | ||||||
|  |  | ||||||
|  | @ -21,7 +21,7 @@ in { | ||||||
|             mkBool true "override the lsp markdown formatter with Noice"; |             mkBool true "override the lsp markdown formatter with Noice"; | ||||||
| 
 | 
 | ||||||
|           "cmp.entry.get_documentation" = |           "cmp.entry.get_documentation" = | ||||||
|             mkBool (config.vim.autocomplete.type == "nvim-cmp") "override cmp documentation with Noice"; |             mkBool config.vim.autocomplete.nvim-cmp.enable "override cmp documentation with Noice"; | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|         signature = { |         signature = { | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ | ||||||
|   ... |   ... | ||||||
| }: let | }: let | ||||||
|   inherit (builtins) map mapAttrs filter; |   inherit (builtins) map mapAttrs filter; | ||||||
|   inherit (lib.attrsets) mapAttrsToList filterAttrs; |   inherit (lib.attrsets) mapAttrsToList; | ||||||
|   inherit (lib.strings) concatLines concatMapStringsSep; |   inherit (lib.strings) concatLines concatMapStringsSep; | ||||||
|   inherit (lib.trivial) showWarnings; |   inherit (lib.trivial) showWarnings; | ||||||
|   inherit (lib.generators) mkLuaInline; |   inherit (lib.generators) mkLuaInline; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 diniamo
				diniamo