mirror of
				https://github.com/NotAShelf/nvf.git
				synced 2025-10-31 19:12:38 +00:00 
			
		
		
		
	languages/qml: init
Create the qml language module with treesitting, lsp, and formatting
This commit is contained in:
		
					parent
					
						
							
								b7d321fd88
							
						
					
				
			
			
				commit
				
					
						7866caa6db
					
				
			
		
					 4 changed files with 103 additions and 0 deletions
				
			
		|  | @ -89,6 +89,7 @@ isMaximal: { | ||||||
|       ruby.enable = false; |       ruby.enable = false; | ||||||
|       fsharp.enable = false; |       fsharp.enable = false; | ||||||
|       just.enable = false; |       just.enable = false; | ||||||
|  |       qml.enable = false; | ||||||
| 
 | 
 | ||||||
|       tailwind.enable = false; |       tailwind.enable = false; | ||||||
|       svelte.enable = false; |       svelte.enable = false; | ||||||
|  |  | ||||||
|  | @ -483,6 +483,8 @@ | ||||||
| [superhtml]: https://github.com/kristoff-it/superhtml | [superhtml]: https://github.com/kristoff-it/superhtml | ||||||
| [htmlHTML]: https://github.com/htmlhint/HTMLHint | [htmlHTML]: https://github.com/htmlhint/HTMLHint | ||||||
| [qmk-nvim]: https://github.com/codethread/qmk.nvim | [qmk-nvim]: https://github.com/codethread/qmk.nvim | ||||||
|  | [qmlls]: https://doc.qt.io/qt-6/qtqml-tooling-qmlls.html | ||||||
|  | [qmlformat]: https://doc.qt.io/qt-6/qtqml-tooling-qmlformat.html | ||||||
| 
 | 
 | ||||||
| - Add just support under `vim.languages.just` using [just-lsp]. | - Add just support under `vim.languages.just` using [just-lsp]. | ||||||
| - Add [roslyn-ls] to the `vim.languages.csharp` module. | - Add [roslyn-ls] to the `vim.languages.csharp` module. | ||||||
|  | @ -490,3 +492,4 @@ | ||||||
| - Add advanced HTML support under `vim.languages.html` using [superhtml] and | - Add advanced HTML support under `vim.languages.html` using [superhtml] and | ||||||
|   [htmlHINT]. |   [htmlHINT]. | ||||||
| - Add QMK support under `vim.utility.qmk-nvim` via [qmk-nvim]. | - Add QMK support under `vim.utility.qmk-nvim` via [qmk-nvim]. | ||||||
|  | - Add QML support under `vim.languages.just` using [qmlls] and [qmlformat] | ||||||
|  |  | ||||||
|  | @ -30,6 +30,7 @@ in { | ||||||
|     ./ocaml.nix |     ./ocaml.nix | ||||||
|     ./php.nix |     ./php.nix | ||||||
|     ./python.nix |     ./python.nix | ||||||
|  |     ./qml.nix | ||||||
|     ./r.nix |     ./r.nix | ||||||
|     ./rust.nix |     ./rust.nix | ||||||
|     ./scala.nix |     ./scala.nix | ||||||
|  |  | ||||||
							
								
								
									
										98
									
								
								modules/plugins/languages/qml.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								modules/plugins/languages/qml.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,98 @@ | ||||||
|  | { | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   lib, | ||||||
|  |   ... | ||||||
|  | }: let | ||||||
|  |   inherit (builtins) attrNames; | ||||||
|  |   inherit (lib.meta) getExe getExe'; | ||||||
|  |   inherit (lib.options) mkEnableOption mkOption; | ||||||
|  |   inherit (lib.modules) mkIf mkMerge; | ||||||
|  |   inherit (lib.types) enum package; | ||||||
|  |   inherit (lib.nvim.types) mkGrammarOption singleOrListOf; | ||||||
|  |   inherit (lib.nvim.attrsets) mapListToAttrs; | ||||||
|  | 
 | ||||||
|  |   cfg = config.vim.languages.qml; | ||||||
|  | 
 | ||||||
|  |   qmlPackage = pkgs.kdePackages.qtdeclarative; | ||||||
|  | 
 | ||||||
|  |   defaultServers = ["qmlls"]; | ||||||
|  |   servers = { | ||||||
|  |     qmlls = { | ||||||
|  |       cmd = [(getExe' qmlPackage "qmlls")]; | ||||||
|  |       filetypes = ["qml" "qmljs"]; | ||||||
|  |       rootmarkers = [".git"]; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   defaultFormat = "qmlformat"; | ||||||
|  |   formats = { | ||||||
|  |     qmlformat = { | ||||||
|  |       package = pkgs.writeShellApplication { | ||||||
|  |         name = "qmlformat"; | ||||||
|  |         runtimeInputs = [qmlPackage]; | ||||||
|  |         text = "qmlformat -"; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | in { | ||||||
|  |   options.vim.languages.qml = { | ||||||
|  |     enable = mkEnableOption "QML language support"; | ||||||
|  |     treesitter = { | ||||||
|  |       enable = mkEnableOption "QML treesitter support" // {default = config.vim.languages.enableTreesitter;}; | ||||||
|  |       package = mkGrammarOption pkgs "qmljs"; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     lsp = { | ||||||
|  |       enable = mkEnableOption "QML LSP support" // {default = config.vim.lsp.enable;}; | ||||||
|  |       servers = mkOption { | ||||||
|  |         type = singleOrListOf (enum (attrNames servers)); | ||||||
|  |         default = defaultServers; | ||||||
|  |         description = "QML LSP server to use"; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     format = { | ||||||
|  |       enable = mkEnableOption "QML formatting" // {default = config.vim.languages.enableFormat;}; | ||||||
|  | 
 | ||||||
|  |       type = mkOption { | ||||||
|  |         type = enum (attrNames formats); | ||||||
|  |         default = defaultFormat; | ||||||
|  |         description = "QML formatter to use"; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       package = mkOption { | ||||||
|  |         type = package; | ||||||
|  |         default = formats.${cfg.format.type}.package; | ||||||
|  |         description = "QML formatter package"; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable (mkMerge [ | ||||||
|  |     (mkIf cfg.treesitter.enable { | ||||||
|  |       vim.treesitter = { | ||||||
|  |         enable = true; | ||||||
|  |         grammars = [cfg.treesitter.package]; | ||||||
|  |       }; | ||||||
|  |     }) | ||||||
|  |     (mkIf cfg.lsp.enable { | ||||||
|  |       vim.lsp.servers = | ||||||
|  |         mapListToAttrs (n: { | ||||||
|  |           name = n; | ||||||
|  |           value = servers.${n}; | ||||||
|  |         }) | ||||||
|  |         cfg.lsp.servers; | ||||||
|  |     }) | ||||||
|  | 
 | ||||||
|  |     (mkIf (cfg.format.enable && !cfg.lsp.enable) { | ||||||
|  |       vim.formatter.conform-nvim = { | ||||||
|  |         enable = true; | ||||||
|  |         setupOpts.formatters_by_ft.qml = [cfg.format.type]; | ||||||
|  |         setupOpts.formatters.${cfg.format.type} = { | ||||||
|  |           command = getExe cfg.format.package; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }) | ||||||
|  |   ]); | ||||||
|  | } | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Poseidon
				Poseidon