mirror of
				https://github.com/NotAShelf/nvf.git
				synced 2025-10-31 19:12:38 +00:00 
			
		
		
		
	Merge branch 'v0.7' into typos-and-friends
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				Check for typos in the source tree / check-typos (push) Has been cancelled
				
			
		
		
	
	
		
	
		
			Some checks failed
		
		
	
	Check for typos in the source tree / check-typos (push) Has been cancelled
				
			This commit is contained in:
		
				commit
				
					
						4fd0ac1750
					
				
			
		
					 9 changed files with 244 additions and 16 deletions
				
			
		|  | @ -76,6 +76,7 @@ isMaximal: { | ||||||
|       csharp.enable = isMaximal; |       csharp.enable = isMaximal; | ||||||
|       julia.enable = isMaximal; |       julia.enable = isMaximal; | ||||||
|       vala.enable = isMaximal; |       vala.enable = isMaximal; | ||||||
|  |       nu.enable = false; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     visuals = { |     visuals = { | ||||||
|  |  | ||||||
|  | @ -297,6 +297,7 @@ To migrate to `nixfmt`, simply change `vim.languages.nix.format.type` to | ||||||
| - Telescope: | - Telescope: | ||||||
|   - Fixed `project-nvim` command and keybinding |   - Fixed `project-nvim` command and keybinding | ||||||
|   - Added default ikeybind/command for `Telescope resume` (`<leader>fr`) |   - Added default ikeybind/command for `Telescope resume` (`<leader>fr`) | ||||||
|  | - Add `hcl` lsp/formatter (not the same as `terraform`, which is not useful for e.g. `nomad` config files). | ||||||
| 
 | 
 | ||||||
| [Soliprem](https://github.com/Soliprem): | [Soliprem](https://github.com/Soliprem): | ||||||
| 
 | 
 | ||||||
|  | @ -314,6 +315,7 @@ To migrate to `nixfmt`, simply change `vim.languages.nix.format.type` to | ||||||
|   the Typst language module. |   the Typst language module. | ||||||
| - Add LSP and Treesitter support for Assembly under `vim.languages.assembly` | - Add LSP and Treesitter support for Assembly under `vim.languages.assembly` | ||||||
| - Move [which-key](https://github.com/folke/which-key.nvim) to the new spec | - Move [which-key](https://github.com/folke/which-key.nvim) to the new spec | ||||||
|  | - Add LSP and Treesitter support for Nushell under `vim.languages.nu` | ||||||
| 
 | 
 | ||||||
| [Bloxx12](https://github.com/Bloxx12) | [Bloxx12](https://github.com/Bloxx12) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										12
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							|  | @ -98,11 +98,11 @@ | ||||||
|     }, |     }, | ||||||
|     "nixpkgs": { |     "nixpkgs": { | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1730958623, |         "lastModified": 1732617236, | ||||||
|         "narHash": "sha256-JwQZIGSYnRNOgDDoIgqKITrPVil+RMWHsZH1eE1VGN0=", |         "narHash": "sha256-PYkz6U0bSEaEB1al7O1XsqVNeSNS+s3NVclJw7YC43w=", | ||||||
|         "owner": "nixos", |         "owner": "nixos", | ||||||
|         "repo": "nixpkgs", |         "repo": "nixpkgs", | ||||||
|         "rev": "85f7e662eda4fa3a995556527c87b2524b691933", |         "rev": "af51545ec9a44eadf3fe3547610a5cdd882bc34e", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
|  | @ -1713,11 +1713,11 @@ | ||||||
|     "plugin-rustaceanvim": { |     "plugin-rustaceanvim": { | ||||||
|       "flake": false, |       "flake": false, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1731172933, |         "lastModified": 1732565373, | ||||||
|         "narHash": "sha256-B2AdSgGPANCBbVN+Sd7gvJ16ODZZwv4WSOxnRs3SWnk=", |         "narHash": "sha256-WRaNW0trZYEUKd05Uc+5nP+G81HI14d6lM7/WWz61E0=", | ||||||
|         "owner": "mrcjkb", |         "owner": "mrcjkb", | ||||||
|         "repo": "rustaceanvim", |         "repo": "rustaceanvim", | ||||||
|         "rev": "244443311f1c4e34ec1ea7f219a4b682b6ec066e", |         "rev": "fee0aa094b0c9f93fffe5a385b3d5d2386c2b072", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
|  |  | ||||||
|  | @ -9,6 +9,7 @@ in { | ||||||
|     ./css.nix |     ./css.nix | ||||||
|     ./elixir.nix |     ./elixir.nix | ||||||
|     ./go.nix |     ./go.nix | ||||||
|  |     ./hcl.nix | ||||||
|     ./kotlin.nix |     ./kotlin.nix | ||||||
|     ./html.nix |     ./html.nix | ||||||
|     ./java.nix |     ./java.nix | ||||||
|  | @ -32,6 +33,7 @@ in { | ||||||
|     ./zig.nix |     ./zig.nix | ||||||
|     ./csharp.nix |     ./csharp.nix | ||||||
|     ./julia.nix |     ./julia.nix | ||||||
|  |     ./nu.nix | ||||||
|   ]; |   ]; | ||||||
| 
 | 
 | ||||||
|   options.vim.languages = { |   options.vim.languages = { | ||||||
|  |  | ||||||
							
								
								
									
										117
									
								
								modules/plugins/languages/hcl.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								modules/plugins/languages/hcl.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,117 @@ | ||||||
|  | { | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   lib, | ||||||
|  |   ... | ||||||
|  | }: let | ||||||
|  |   inherit (builtins) attrNames; | ||||||
|  |   inherit (lib.options) mkEnableOption mkOption; | ||||||
|  |   inherit (lib.modules) mkIf mkMerge; | ||||||
|  |   inherit (lib.types) package bool enum; | ||||||
|  |   inherit (lib.nvim.types) mkGrammarOption; | ||||||
|  | 
 | ||||||
|  |   cfg = config.vim.languages.hcl; | ||||||
|  | 
 | ||||||
|  |   defaultServer = "terraform-ls"; | ||||||
|  |   servers = { | ||||||
|  |     terraform-ls = { | ||||||
|  |       package = pkgs.terraform-ls; | ||||||
|  |       lspConfig = '' | ||||||
|  |         lspconfig.terraformls.setup { | ||||||
|  |           capabilities = capabilities, | ||||||
|  |           on_attach=default_on_attach, | ||||||
|  |           cmd = {"${lib.getExe cfg.lsp.package}", "serve"}, | ||||||
|  |         } | ||||||
|  |       ''; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   defaultFormat = "hclfmt"; | ||||||
|  |   formats = { | ||||||
|  |     hclfmt = { | ||||||
|  |       package = pkgs.hclfmt; | ||||||
|  |       nullConfig = '' | ||||||
|  |         table.insert( | ||||||
|  |           ls_sources, | ||||||
|  |           null_ls.builtins.formatting.hclfmt.with({ | ||||||
|  |             command = "${lib.getExe cfg.format.package}", | ||||||
|  |           }) | ||||||
|  |         ) | ||||||
|  |       ''; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | in { | ||||||
|  |   options.vim.languages.hcl = { | ||||||
|  |     enable = mkEnableOption "HCL support"; | ||||||
|  | 
 | ||||||
|  |     treesitter = { | ||||||
|  |       enable = mkEnableOption "HCL treesitter" // {default = config.vim.languages.enableTreesitter;}; | ||||||
|  |       package = mkGrammarOption pkgs "hcl"; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     lsp = { | ||||||
|  |       enable = mkEnableOption "HCL LSP support (terraform-ls)" // {default = config.vim.languages.enableLSP;}; | ||||||
|  |       # TODO: (maybe, is it better?) it would be cooler to use vscode-extensions.hashicorp.hcl probably, shouldn't be too hard | ||||||
|  |       package = mkOption { | ||||||
|  |         type = package; | ||||||
|  |         default = servers.${defaultServer}.package; | ||||||
|  |         description = "HCL language server package (terraform-ls)"; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     format = { | ||||||
|  |       enable = mkOption { | ||||||
|  |         type = bool; | ||||||
|  |         default = config.vim.languages.enableFormat; | ||||||
|  |         description = "Enable HCL formatting"; | ||||||
|  |       }; | ||||||
|  |       type = mkOption { | ||||||
|  |         type = enum (attrNames formats); | ||||||
|  |         default = defaultFormat; | ||||||
|  |         description = "HCL formatter to use"; | ||||||
|  |       }; | ||||||
|  |       package = mkOption { | ||||||
|  |         type = package; | ||||||
|  |         default = formats.${cfg.format.type}.package; | ||||||
|  |         description = "HCL formatter package"; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable (mkMerge [ | ||||||
|  |     { | ||||||
|  |       # hcl style official: https://developer.hashicorp.com/terraform/language/style#code-formatting | ||||||
|  |       vim.pluginRC.hcl = '' | ||||||
|  |         vim.api.nvim_create_autocmd("FileType", { | ||||||
|  |           pattern = "hcl", | ||||||
|  |           callback = function(opts) | ||||||
|  |             local bo = vim.bo[opts.buf] | ||||||
|  |             bo.tabstop = 2 | ||||||
|  |             bo.shiftwidth = 2 | ||||||
|  |             bo.softtabstop = 2 | ||||||
|  |           end | ||||||
|  |         }) | ||||||
|  | 
 | ||||||
|  |         local ft = require('Comment.ft') | ||||||
|  |         ft | ||||||
|  |           .set('hcl', '#%s') | ||||||
|  |       ''; | ||||||
|  |     } | ||||||
|  |     (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 = lib.optionalAttrs (! config.vim.languages.terraform.lsp.enable) { | ||||||
|  |         terraform-ls = servers.${cfg.lsp.server}.lspConfig; | ||||||
|  |       }; | ||||||
|  |     }) | ||||||
|  | 
 | ||||||
|  |     (mkIf cfg.format.enable { | ||||||
|  |       vim.lsp.null-ls.enable = true; | ||||||
|  |       vim.lsp.null-ls.sources.hcl-format = formats.${cfg.format.type}.nullConfig; | ||||||
|  |     }) | ||||||
|  |   ]); | ||||||
|  | } | ||||||
							
								
								
									
										70
									
								
								modules/plugins/languages/nu.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								modules/plugins/languages/nu.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,70 @@ | ||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   pkgs, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: let | ||||||
|  |   inherit (lib.options) mkEnableOption mkOption; | ||||||
|  |   inherit (lib.types) str either package listOf; | ||||||
|  |   inherit (lib.modules) mkIf mkMerge; | ||||||
|  |   inherit (lib.nvim.lua) expToLua; | ||||||
|  |   inherit (lib.nvim.types) mkGrammarOption; | ||||||
|  |   inherit (builtins) isList; | ||||||
|  | 
 | ||||||
|  |   defaultServer = "nushell"; | ||||||
|  |   servers = { | ||||||
|  |     nushell = { | ||||||
|  |       package = pkgs.nushell; | ||||||
|  |       lspConfig = '' | ||||||
|  |         lspconfig.nushell.setup{ | ||||||
|  |           capabilities = capabilities, | ||||||
|  |           on_attach = default_on_attach, | ||||||
|  |           cmd = ${ | ||||||
|  |           if isList cfg.lsp.package | ||||||
|  |           then expToLua cfg.lsp.package | ||||||
|  |           else ''{"${cfg.lsp.package}/bin/nu", "--no-config-file", "--lsp"}'' | ||||||
|  |         } | ||||||
|  |         } | ||||||
|  |       ''; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   cfg = config.vim.languages.nu; | ||||||
|  | in { | ||||||
|  |   options.vim.languages.nu = { | ||||||
|  |     enable = mkEnableOption "Nu language support"; | ||||||
|  | 
 | ||||||
|  |     treesitter = { | ||||||
|  |       enable = mkEnableOption "Nu treesitter" // {default = config.vim.languages.enableTreesitter;}; | ||||||
|  |       package = mkGrammarOption pkgs "nu"; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     lsp = { | ||||||
|  |       enable = mkEnableOption "Nu LSP support" // {default = config.vim.languages.enableLSP;}; | ||||||
|  |       server = mkOption { | ||||||
|  |         type = str; | ||||||
|  |         default = defaultServer; | ||||||
|  |         description = "Nu LSP server to use"; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       package = mkOption { | ||||||
|  |         type = either package (listOf str); | ||||||
|  |         default = servers.${cfg.lsp.server}.package; | ||||||
|  |         example = ''[(lib.getExe pkgs.nushell) "--lsp"]''; | ||||||
|  |         description = "Nu LSP server package, or the command to run as a list of strings"; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   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.nu-lsp = servers.${cfg.lsp.server}.lspConfig; | ||||||
|  |     }) | ||||||
|  |   ]); | ||||||
|  | } | ||||||
|  | @ -21,7 +21,10 @@ | ||||||
|       lspConfig = '' |       lspConfig = '' | ||||||
|         lspconfig.typst_lsp.setup { |         lspconfig.typst_lsp.setup { | ||||||
|           capabilities = capabilities, |           capabilities = capabilities, | ||||||
|           on_attach = default_on_attach, |           on_attach = function(client, bufnr) | ||||||
|  |             -- Disable semantic tokens as a workaround for a semantic token error when using non-english characters | ||||||
|  |             client.server_capabilities.semanticTokensProvider = nil | ||||||
|  |           end, | ||||||
|           cmd = ${ |           cmd = ${ | ||||||
|           if isList cfg.lsp.package |           if isList cfg.lsp.package | ||||||
|           then expToLua cfg.lsp.package |           then expToLua cfg.lsp.package | ||||||
|  | @ -36,7 +39,10 @@ | ||||||
|         lspconfig.tinymist.setup { |         lspconfig.tinymist.setup { | ||||||
|           capabilities = capabilities, |           capabilities = capabilities, | ||||||
|           single_file_support = true, |           single_file_support = true, | ||||||
|           on_attach = default_on_attach, |           on_attach = function(client, bufnr) | ||||||
|  |             -- Disable semantic tokens as a workaround for a semantic token error when using non-english characters | ||||||
|  |             client.server_capabilities.semanticTokensProvider = nil | ||||||
|  |           end, | ||||||
|           cmd = ${ |           cmd = ${ | ||||||
|           if isList cfg.lsp.package |           if isList cfg.lsp.package | ||||||
|           then expToLua cfg.lsp.package |           then expToLua cfg.lsp.package | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ | ||||||
|   config, |   config, | ||||||
|   ... |   ... | ||||||
| }: let | }: let | ||||||
|   inherit (builtins) toJSON typeOf head length filter concatLists concatStringsSep; |   inherit (builtins) toJSON typeOf head length filter concatLists concatStringsSep tryEval; | ||||||
|   inherit (lib.attrsets) mapAttrsToList; |   inherit (lib.attrsets) mapAttrsToList; | ||||||
|   inherit (lib.modules) mkIf mkMerge; |   inherit (lib.modules) mkIf mkMerge; | ||||||
|   inherit (lib.generators) mkLuaInline; |   inherit (lib.generators) mkLuaInline; | ||||||
|  | @ -21,10 +21,36 @@ | ||||||
|         else keySpec.action; |         else keySpec.action; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|   toLuaLznSpec = name: spec: |   toLuaLznSpec = name: spec: let | ||||||
|  |     packageName = | ||||||
|  |       if typeOf spec.package == "string" | ||||||
|  |       then spec.package | ||||||
|  |       else if (spec.package ? pname && (tryEval spec.package.pname).success) | ||||||
|  |       then spec.package.pname | ||||||
|  |       else spec.package.name; | ||||||
|  |   in | ||||||
|     (removeAttrs spec ["package" "setupModule" "setupOpts" "keys"]) |     (removeAttrs spec ["package" "setupModule" "setupOpts" "keys"]) | ||||||
|     // { |     // { | ||||||
|       "@1" = name; |       "@1" = | ||||||
|  |         if spec.package != null && packageName != name && spec.load == null | ||||||
|  |         then | ||||||
|  |           abort '' | ||||||
|  |             vim.lazy.plugins.${name} does not match the package name ${packageName}. | ||||||
|  | 
 | ||||||
|  |             Please either: | ||||||
|  |             - rename it to vim.lazy.plugins.${packageName}, or | ||||||
|  |             - if you intend to use a custom loader, specify a | ||||||
|  |               vim.lazy.plugins.${name}.load function. | ||||||
|  |           '' | ||||||
|  |         else if spec.package == null && spec.load == null | ||||||
|  |         then | ||||||
|  |           abort '' | ||||||
|  |             vim.lazy.plugins.${name} has null package but no load function given. | ||||||
|  | 
 | ||||||
|  |             Please either specify a package, or (if you know what you're doing) provide a | ||||||
|  |             custom load function. | ||||||
|  |           '' | ||||||
|  |         else name; | ||||||
|       beforeAll = |       beforeAll = | ||||||
|         if spec.beforeAll != null |         if spec.beforeAll != null | ||||||
|         then |         then | ||||||
|  | @ -62,7 +88,7 @@ | ||||||
|         if spec.load != null |         if spec.load != null | ||||||
|         then |         then | ||||||
|           mkLuaInline '' |           mkLuaInline '' | ||||||
|             function() |             function(name) | ||||||
|               ${spec.load} |               ${spec.load} | ||||||
|             end |             end | ||||||
|           '' |           '' | ||||||
|  | @ -76,7 +102,7 @@ | ||||||
|     }; |     }; | ||||||
|   lznSpecs = mapAttrsToList toLuaLznSpec cfg.plugins; |   lznSpecs = mapAttrsToList toLuaLznSpec cfg.plugins; | ||||||
| 
 | 
 | ||||||
|   pluginPackages = mapAttrsToList (_: plugin: plugin.package) cfg.plugins; |   pluginPackages = filter (x: x != null) (mapAttrsToList (_: plugin: plugin.package) cfg.plugins); | ||||||
| 
 | 
 | ||||||
|   specToNotLazyConfig = _: spec: '' |   specToNotLazyConfig = _: spec: '' | ||||||
|     do |     do | ||||||
|  |  | ||||||
|  | @ -66,8 +66,12 @@ | ||||||
|   lznPluginType = submodule { |   lznPluginType = submodule { | ||||||
|     options = { |     options = { | ||||||
|       package = mkOption { |       package = mkOption { | ||||||
|         type = pluginType; |         type = nullOr pluginType; | ||||||
|         description = "Plugin package"; |         description = '' | ||||||
|  |           Plugin package. | ||||||
|  | 
 | ||||||
|  |           If null, a custom load function must be provided | ||||||
|  |         ''; | ||||||
|       }; |       }; | ||||||
| 
 | 
 | ||||||
|       setupModule = mkOption { |       setupModule = mkOption { | ||||||
|  | @ -173,7 +177,7 @@ | ||||||
|         description = '' |         description = '' | ||||||
|           Lua code to override the `vim.g.lz_n.load()` function for a single plugin. |           Lua code to override the `vim.g.lz_n.load()` function for a single plugin. | ||||||
| 
 | 
 | ||||||
|           This will be wrapped in a function. |           This will be wrapped in a `function(name) ... end`. | ||||||
|         ''; |         ''; | ||||||
|       }; |       }; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 GitHub
					GitHub