mirror of
				https://github.com/NotAShelf/nvf.git
				synced 2025-10-26 09:20:08 +00:00 
			
		
		
		
	languages: csharp init with omnisharp and csharp_ls
This commit is contained in:
		
					parent
					
						
							
								0aa557dac6
							
						
					
				
			
			
				commit
				
					
						665feee445
					
				
			
		
					 6 changed files with 179 additions and 3 deletions
				
			
		|  | @ -75,6 +75,7 @@ isMaximal: { | ||||||
|         enable = isMaximal; |         enable = isMaximal; | ||||||
|         crates.enable = isMaximal; |         crates.enable = isMaximal; | ||||||
|       }; |       }; | ||||||
|  |       csharp.enable = isMaximal; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     visuals = { |     visuals = { | ||||||
|  |  | ||||||
|  | @ -189,6 +189,9 @@ To migrate to `nixfmt`, simply change `vim.languages.nix.format.type` to | ||||||
|   - Add sorting function options for completion sources under |   - Add sorting function options for completion sources under | ||||||
|     [](#opt-vim.autocomplete.nvim-cmp.setupOpts.sorting.comparators) |     [](#opt-vim.autocomplete.nvim-cmp.setupOpts.sorting.comparators) | ||||||
| 
 | 
 | ||||||
|  | - Add C# support under `vim.languages.csharp`, with support for both | ||||||
|  |   omnisharp-roslyn and csharp-language-server. | ||||||
|  | 
 | ||||||
| [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 | ||||||
|  | @ -230,7 +233,8 @@ To migrate to `nixfmt`, simply change `vim.languages.nix.format.type` to | ||||||
|   `vim.languages.ts.extensions.ts-error-translator` to aid with Typescript |   `vim.languages.ts.extensions.ts-error-translator` to aid with Typescript | ||||||
|   development. |   development. | ||||||
| 
 | 
 | ||||||
| - Add [neo-tree.nvim] as an alternative file-tree plugin. It will be available under `vim.filetree.neo-tree`, similar to nvimtree. | - Add [neo-tree.nvim] as an alternative file-tree plugin. It will be available | ||||||
|  |   under `vim.filetree.neo-tree`, similar to nvimtree. | ||||||
| 
 | 
 | ||||||
| - Add `nvf-print-config` & `nvf-print-config-path` helper scripts to Neovim | - Add `nvf-print-config` & `nvf-print-config-path` helper scripts to Neovim | ||||||
|   closure. Both of those scripts have been automatically added to your PATH upon |   closure. Both of those scripts have been automatically added to your PATH upon | ||||||
|  | @ -298,5 +302,9 @@ To migrate to `nixfmt`, simply change `vim.languages.nix.format.type` to | ||||||
| 
 | 
 | ||||||
| [nezia1](https://github.com/nezia1): | [nezia1](https://github.com/nezia1): | ||||||
| 
 | 
 | ||||||
| - Add [biome](https://github.com/biomejs/biome) support for Typescript, CSS and Svelte. Enable them via [](#opt-vim.languages.ts.format.type), [](#opt-vim.languages.css.format.type) and [](#opt-vim.languages.svelte.format.type) respectively. | - Add [biome](https://github.com/biomejs/biome) support for Typescript, CSS and | ||||||
| - Replace [nixpkgs-fmt](https://github.com/nix-community/nixpkgs-fmt) with [nixfmt](https://github.com/NixOS/nixfmt) (nixfmt-rfc-style). |   Svelte. Enable them via [](#opt-vim.languages.ts.format.type), | ||||||
|  |   [](#opt-vim.languages.css.format.type) and | ||||||
|  |   [](#opt-vim.languages.svelte.format.type) respectively. | ||||||
|  | - Replace [nixpkgs-fmt](https://github.com/nix-community/nixpkgs-fmt) with | ||||||
|  |   [nixfmt](https://github.com/NixOS/nixfmt) (nixfmt-rfc-style). | ||||||
|  |  | ||||||
							
								
								
									
										34
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										34
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							|  | @ -460,6 +460,22 @@ | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "plugin-csharpls-extended": { | ||||||
|  |       "flake": false, | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1728438370, | ||||||
|  |         "narHash": "sha256-sOLPV5IhOvQ0+u7CDAfG3X0ZbRCicz18QyYXQ0dxpwQ=", | ||||||
|  |         "owner": "Decodetalkers", | ||||||
|  |         "repo": "csharpls-extended-lsp.nvim", | ||||||
|  |         "rev": "b647e1bd1f9c0410f5ef4a1517a331cbac322d9a", | ||||||
|  |         "type": "github" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "owner": "Decodetalkers", | ||||||
|  |         "repo": "csharpls-extended-lsp.nvim", | ||||||
|  |         "type": "github" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "plugin-dashboard-nvim": { |     "plugin-dashboard-nvim": { | ||||||
|       "flake": false, |       "flake": false, | ||||||
|       "locked": { |       "locked": { | ||||||
|  | @ -1453,6 +1469,22 @@ | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "plugin-omnisharp-extended": { | ||||||
|  |       "flake": false, | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1719701797, | ||||||
|  |         "narHash": "sha256-P1ZCaW8w+e3H3oBhbEjDc7vuR+XuxJmb/7IbPL3KWi4=", | ||||||
|  |         "owner": "Hoffs", | ||||||
|  |         "repo": "omnisharp-extended-lsp.nvim", | ||||||
|  |         "rev": "aad7bf06b4ca0de816b919d475a75b30f5f62b61", | ||||||
|  |         "type": "github" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "owner": "Hoffs", | ||||||
|  |         "repo": "omnisharp-extended-lsp.nvim", | ||||||
|  |         "type": "github" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "plugin-onedark": { |     "plugin-onedark": { | ||||||
|       "flake": false, |       "flake": false, | ||||||
|       "locked": { |       "locked": { | ||||||
|  | @ -1932,6 +1964,7 @@ | ||||||
|         "plugin-copilot-cmp": "plugin-copilot-cmp", |         "plugin-copilot-cmp": "plugin-copilot-cmp", | ||||||
|         "plugin-copilot-lua": "plugin-copilot-lua", |         "plugin-copilot-lua": "plugin-copilot-lua", | ||||||
|         "plugin-crates-nvim": "plugin-crates-nvim", |         "plugin-crates-nvim": "plugin-crates-nvim", | ||||||
|  |         "plugin-csharpls-extended": "plugin-csharpls-extended", | ||||||
|         "plugin-dashboard-nvim": "plugin-dashboard-nvim", |         "plugin-dashboard-nvim": "plugin-dashboard-nvim", | ||||||
|         "plugin-diffview-nvim": "plugin-diffview-nvim", |         "plugin-diffview-nvim": "plugin-diffview-nvim", | ||||||
|         "plugin-dracula": "plugin-dracula", |         "plugin-dracula": "plugin-dracula", | ||||||
|  | @ -1994,6 +2027,7 @@ | ||||||
|         "plugin-nvim-ts-autotag": "plugin-nvim-ts-autotag", |         "plugin-nvim-ts-autotag": "plugin-nvim-ts-autotag", | ||||||
|         "plugin-nvim-web-devicons": "plugin-nvim-web-devicons", |         "plugin-nvim-web-devicons": "plugin-nvim-web-devicons", | ||||||
|         "plugin-obsidian-nvim": "plugin-obsidian-nvim", |         "plugin-obsidian-nvim": "plugin-obsidian-nvim", | ||||||
|  |         "plugin-omnisharp-extended": "plugin-omnisharp-extended", | ||||||
|         "plugin-onedark": "plugin-onedark", |         "plugin-onedark": "plugin-onedark", | ||||||
|         "plugin-orgmode-nvim": "plugin-orgmode-nvim", |         "plugin-orgmode-nvim": "plugin-orgmode-nvim", | ||||||
|         "plugin-otter-nvim": "plugin-otter-nvim", |         "plugin-otter-nvim": "plugin-otter-nvim", | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								flake.nix
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								flake.nix
									
										
									
									
									
								
							|  | @ -211,6 +211,16 @@ | ||||||
|       flake = false; |       flake = false; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|  |     plugin-omnisharp-extended = { | ||||||
|  |       url = "github:Hoffs/omnisharp-extended-lsp.nvim"; | ||||||
|  |       flake = false; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     plugin-csharpls-extended = { | ||||||
|  |       url = "github:Decodetalkers/csharpls-extended-lsp.nvim"; | ||||||
|  |       flake = false; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|     # Copying/Registers |     # Copying/Registers | ||||||
|     plugin-registers = { |     plugin-registers = { | ||||||
|       url = "github:tversteeg/registers.nvim"; |       url = "github:tversteeg/registers.nvim"; | ||||||
|  |  | ||||||
							
								
								
									
										122
									
								
								modules/plugins/languages/csharp.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								modules/plugins/languages/csharp.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,122 @@ | ||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   pkgs, | ||||||
|  |   config, | ||||||
|  |   options, | ||||||
|  |   ... | ||||||
|  | }: let | ||||||
|  |   inherit (builtins) attrNames; | ||||||
|  |   inherit (lib.options) mkEnableOption mkOption; | ||||||
|  |   inherit (lib.types) either listOf package str enum; | ||||||
|  |   inherit (lib.modules) mkIf mkMerge; | ||||||
|  |   inherit (lib.lists) isList; | ||||||
|  |   inherit (lib.strings) optionalString; | ||||||
|  |   inherit (lib.nvim.types) mkGrammarOption; | ||||||
|  |   inherit (lib.nvim.lua) expToLua; | ||||||
|  | 
 | ||||||
|  |   lspKeyConfig = config.vim.lsp.mappings; | ||||||
|  |   lspKeyOptions = options.vim.lsp.mappings; | ||||||
|  |   mkLspBinding = optionName: action: let | ||||||
|  |     key = lspKeyConfig.${optionName}; | ||||||
|  |     desc = lspKeyOptions.${optionName}.description; | ||||||
|  |   in | ||||||
|  |     optionalString (key != null) "vim.keymap.set('n', '${key}', ${action}, {buffer=bufnr, noremap=true, silent=true, desc='${desc}'})"; | ||||||
|  | 
 | ||||||
|  |   # Omnisharp doesn't have colors in popup docs for some reason, and I've also | ||||||
|  |   # seen mentions of it being way slower, so until someone finds missing | ||||||
|  |   # functionality, this will be the default. | ||||||
|  |   defaultServer = "csharp_ls"; | ||||||
|  |   servers = { | ||||||
|  |     omnisharp = { | ||||||
|  |       package = pkgs.omnisharp-roslyn; | ||||||
|  |       internalFormatter = true; | ||||||
|  |       lspConfig = '' | ||||||
|  |         lspconfig.omnisharp.setup { | ||||||
|  |           capabilities = capabilities, | ||||||
|  |           on_attach = function(client, bufnr) | ||||||
|  |             default_on_attach(client, bufnr) | ||||||
|  | 
 | ||||||
|  |             local oe = require("omnisharp_extended") | ||||||
|  |             ${mkLspBinding "goToDefinition" "oe.lsp_definition"} | ||||||
|  |             ${mkLspBinding "goToType" "oe.lsp_type_definition"} | ||||||
|  |             ${mkLspBinding "listReferences" "oe.lsp_references"} | ||||||
|  |             ${mkLspBinding "listImplementations" "oe.lsp_implementation"} | ||||||
|  |           end, | ||||||
|  |           cmd = ${ | ||||||
|  |           if isList cfg.lsp.package | ||||||
|  |           then expToLua cfg.lsp.package | ||||||
|  |           else "{'${cfg.lsp.package}/bin/OmniSharp'}" | ||||||
|  |         } | ||||||
|  |         } | ||||||
|  |       ''; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     csharp_ls = { | ||||||
|  |       package = pkgs.csharp-ls; | ||||||
|  |       internalFormatter = true; | ||||||
|  |       lspConfig = '' | ||||||
|  |         local extended_handler = require("csharpls_extended").handler | ||||||
|  | 
 | ||||||
|  |         lspconfig.csharp_ls.setup { | ||||||
|  |           capabilities = capabilities, | ||||||
|  |           on_attach = default_on_attach, | ||||||
|  |           handlers = { | ||||||
|  |             ["textDocument/definition"] = extended_handler, | ||||||
|  |             ["textDocument/typeDefinition"] = extended_handler | ||||||
|  |           }, | ||||||
|  |           cmd = ${ | ||||||
|  |           if isList cfg.lsp.package | ||||||
|  |           then expToLua cfg.lsp.package | ||||||
|  |           else "{'${cfg.lsp.package}/bin/csharp-ls'}" | ||||||
|  |         } | ||||||
|  |         } | ||||||
|  |       ''; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   extraServerPlugins = { | ||||||
|  |     omnisharp = ["omnisharp-extended"]; | ||||||
|  |     csharp_ls = ["csharpls-extended"]; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   cfg = config.vim.languages.csharp; | ||||||
|  | in { | ||||||
|  |   options = { | ||||||
|  |     vim.languages.csharp = { | ||||||
|  |       enable = mkEnableOption "C# language support"; | ||||||
|  | 
 | ||||||
|  |       treesitter = { | ||||||
|  |         enable = mkEnableOption "C# treesitter" // {default = config.vim.languages.enableTreesitter;}; | ||||||
|  |         package = mkGrammarOption pkgs "c-sharp"; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       lsp = { | ||||||
|  |         enable = mkEnableOption "C# LSP support" // {default = config.vim.languages.enableLSP;}; | ||||||
|  |         server = mkOption { | ||||||
|  |           description = "C# LSP server to use"; | ||||||
|  |           type = enum (attrNames servers); | ||||||
|  |           default = defaultServer; | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         package = mkOption { | ||||||
|  |           description = "C# LSP server package, or the command to run as a list of strings"; | ||||||
|  |           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.startPlugins = extraServerPlugins.${cfg.lsp.server} or []; | ||||||
|  |       vim.lsp.lspconfig.enable = true; | ||||||
|  |       vim.lsp.lspconfig.sources.csharp-lsp = servers.${cfg.lsp.server}.lspConfig; | ||||||
|  |     }) | ||||||
|  |   ]); | ||||||
|  | } | ||||||
|  | @ -28,6 +28,7 @@ in { | ||||||
|     ./ts.nix |     ./ts.nix | ||||||
|     ./typst.nix |     ./typst.nix | ||||||
|     ./zig.nix |     ./zig.nix | ||||||
|  |     ./csharp.nix | ||||||
|   ]; |   ]; | ||||||
| 
 | 
 | ||||||
|   options.vim.languages = { |   options.vim.languages = { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 diniamo
				diniamo