144 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { pkgs, lib, config, ... }: 
 | |
| 
 | |
| let
 | |
|   inherit (lib) mkIf getExe;
 | |
|   cfg = config.ooknet.editor.helix;
 | |
|   console = config.ooknet.console;
 | |
| in
 | |
| 
 | |
| {
 | |
|   config = mkIf (cfg.enable || console.editor == "helix") {
 | |
|     programs.helix.languages = {
 | |
|       language = let
 | |
|         deno = lang: {
 | |
|           command = "${pkgs.deno}/bin/deno";
 | |
|           args = ["fmt" "-" "--ext" lang];
 | |
|         };
 | |
| 
 | |
|         prettier = lang: {
 | |
|           command = "${pkgs.nodePackages.prettier}/bin/prettier";
 | |
|           args = ["--parser" lang];
 | |
|         };
 | |
|         prettierLangs = map (e: {
 | |
|           name = e;
 | |
|           formatter = prettier e;
 | |
|         });
 | |
|         langs = ["css" "scss" "html"];
 | |
|       in
 | |
|         [
 | |
|           {
 | |
|             name = "bash";
 | |
|             auto-format = true;
 | |
|             formatter = {
 | |
|               command = "${pkgs.shfmt}/bin/shfmt";
 | |
|               args = ["-i" "2"];
 | |
|             };
 | |
|           }
 | |
|           {
 | |
|             name = "clojure";
 | |
|             injection-regex = "(clojure|clj|edn|boot|yuck)";
 | |
|             file-types = ["clj" "cljs" "cljc" "clje" "cljr" "cljx" "edn" "boot" "yuck"];
 | |
|           }
 | |
|           {
 | |
|             name = "javascript";
 | |
|             auto-format = true;
 | |
|             language-servers = ["dprint" "typescript-language-server"];
 | |
|           }
 | |
|           {
 | |
|             name = "json";
 | |
|             formatter = deno "json";
 | |
|           }
 | |
|           {
 | |
|             name = "markdown";
 | |
|             auto-format = true;
 | |
|             formatter = deno "md";
 | |
|           }
 | |
|         ]
 | |
|         ++ prettierLangs langs;
 | |
| 
 | |
|       language-server = {
 | |
|         bash-language-server = {
 | |
|           command = "${pkgs.nodePackages.bash-language-server}/bin/bash-language-server";
 | |
|           args = ["start"];
 | |
|         };
 | |
| 
 | |
|         clangd = {
 | |
|           command = "${pkgs.clang-tools}/bin/clangd";
 | |
|           clangd.fallbackFlags = ["-std=c++2b"];
 | |
|         };
 | |
| 
 | |
|         deno-lsp = {
 | |
|           command = "${pkgs.deno}/bin/deno";
 | |
|           args = ["lsp"];
 | |
|           environment.NO_COLOR = "1";
 | |
|           config.deno = {
 | |
|             enable = true;
 | |
|             lint = true;
 | |
|             unstable = true;
 | |
|             suggest = {
 | |
|               completeFunctionCalls = false;
 | |
|               imports = {hosts."https://deno.land" = true;};
 | |
|             };
 | |
|             inlayHints = {
 | |
|               enumMemberValues.enabled = true;
 | |
|               functionLikeReturnTypes.enabled = true;
 | |
|               parameterNames.enabled = "all";
 | |
|               parameterTypes.enabled = true;
 | |
|               propertyDeclarationTypes.enabled = true;
 | |
|               variableTypes.enabled = true;
 | |
|             };
 | |
|           };
 | |
|         };
 | |
| 
 | |
|         nil = {
 | |
|           command = getExe pkgs.nil;
 | |
|           config.nil.formatting.command = ["${getExe pkgs.alejandra}" "-q"];
 | |
|         };
 | |
| 
 | |
|         dprint = {
 | |
|           command = getExe pkgs.dprint;
 | |
|           args = ["lsp"];
 | |
|         };
 | |
| 
 | |
|         typescript-language-server = {
 | |
|           command = "${pkgs.nodePackages.typescript-language-server}/bin/typescript-language-server";
 | |
|           args = ["--stdio"];
 | |
|           config = let
 | |
|             inlayHints = {
 | |
|               includeInlayEnumMemberValueHints = true;
 | |
|               includeInlayFunctionLikeReturnTypeHints = true;
 | |
|               includeInlayFunctionParameterTypeHints = true;
 | |
|               includeInlayParameterNameHints = "all";
 | |
|               includeInlayParameterNameHintsWhenArgumentMatchesName = true;
 | |
|               includeInlayPropertyDeclarationTypeHints = true;
 | |
|               includeInlayVariableTypeHints = true;
 | |
|             };
 | |
|           in {
 | |
|             typescript-language-server.source = {
 | |
|               addMissingImports.ts = true;
 | |
|               fixAll.ts = true;
 | |
|               organizeImports.ts = true;
 | |
|               removeUnusedImports.ts = true;
 | |
|               sortImports.ts = true;
 | |
|             };
 | |
| 
 | |
|             typescript = {inherit inlayHints;};
 | |
|             javascript = {inherit inlayHints;};
 | |
| 
 | |
|             hostInfo = "helix";
 | |
|           };
 | |
|         };
 | |
| 
 | |
|         vscode-css-language-server = {
 | |
|           command = "${pkgs.nodePackages.vscode-css-languageserver-bin}/bin/css-languageserver";
 | |
|           args = ["--stdio"];
 | |
|           config = {
 | |
|             provideFormatter = true;
 | |
|             css.validate.enable = true;
 | |
|             scss.validate.enable = true;
 | |
|           };
 | |
|         };
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| }
 |