From e5e7e34ef25b3f6f133b694ada78e71b48a16b7b Mon Sep 17 00:00:00 2001 From: Charlie Root Date: Sun, 1 Sep 2024 22:10:02 +0200 Subject: [PATCH] helix: steal fuf's conftig to try it --- flake.nix | 1 + modules/programs/editors/helix/languages.nix | 151 +++++++++++++++++++ modules/programs/editors/helix/module.nix | 11 +- 3 files changed, 154 insertions(+), 9 deletions(-) create mode 100644 modules/programs/editors/helix/languages.nix diff --git a/flake.nix b/flake.nix index c0f67c3..c4e7792 100644 --- a/flake.nix +++ b/flake.nix @@ -49,6 +49,7 @@ treefmt-nix.url = "github:numtide/treefmt-nix"; helix.url = "github:helix-editor/helix"; + neovim-flake = { url = "github:notashelf/nvf"; inputs.nixpkgs.follows = "nixpkgs"; diff --git a/modules/programs/editors/helix/languages.nix b/modules/programs/editors/helix/languages.nix new file mode 100644 index 0000000..442dc9d --- /dev/null +++ b/modules/programs/editors/helix/languages.nix @@ -0,0 +1,151 @@ +{ + config, + inputs', + lib, + pkgs, + ... +}: let + cfg = config.modules.system.programs.editors.helix; + inherit (config.modules.other.system) username; + inherit (lib) mkIf getExe makeBinPath; +in { + config = mkIf cfg.enable { + home-manager.users.${username} = { + programs.helix.languages = { + language = let + extraFormatter = lang: { + command = getExe pkgs.deno; + args = ["fmt" "-" "--ext" lang]; + }; + in [ + { + name = "bash"; + auto-format = true; + formatter = { + command = getExe pkgs.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 = "cmake"; + auto-format = true; + language-servers = ["cmake-language-server"]; + formatter = { + command = getExe pkgs.cmake-format; + args = ["-"]; + }; + } + { + name = "javascript"; + auto-format = true; + language-servers = ["dprint" "typescript-language-server"]; + } + { + name = "json"; + formatter = extraFormatter "json"; + } + { + name = "markdown"; + auto-format = true; + formatter = extraFormatter "md"; + } + { + name = "python"; + language-servers = ["pyright"]; + formatter = { + command = getExe pkgs.black; + args = ["-" "--quiet" "--line-length 100"]; + }; + } + { + name = "typescript"; + auto-format = true; + language-servers = ["dprint" "typescript-language-server"]; + } + ]; + + language-server = { + bash-language-server = { + command = getExe pkgs.bash-language-server; + args = ["start"]; + }; + + clangd = { + command = "${pkgs.clang-tools}/bin/clangd"; + clangd.fallbackFlags = ["-std=c++2b"]; + }; + + cmake-language-server = { + command = getExe pkgs.cmake-language-server; + }; + + dprint = { + command = getExe pkgs.dprint; + args = ["lsp"]; + }; + + nil = { + command = getExe pkgs.nil; + config.nil.formatting.command = ["${getExe pkgs.alejandra}" "-q"]; + }; + + pyright = { + command = "${pkgs.pyright}/bin/pyright-langserver"; + args = ["--stdio"]; + config = { + reportMissingTypeStubs = false; + analysis = { + typeCheckingMode = "basic"; + autoImportCompletions = true; + }; + }; + }; + + # typescript-language-server = { + # command = getExe pkgs.nodePackages.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-langservers-extracted}/bin/vscode-css-languageserver"; + # args = ["--stdio"]; + # config = { + # provideFormatter = true; + # css.validate.enable = true; + # scss.validate.enable = true; + # }; + # }; + }; + }; + }; + }; +} diff --git a/modules/programs/editors/helix/module.nix b/modules/programs/editors/helix/module.nix index 0001c54..aba8756 100644 --- a/modules/programs/editors/helix/module.nix +++ b/modules/programs/editors/helix/module.nix @@ -9,12 +9,13 @@ inherit (config.modules.other.system) username; inherit (lib) mkIf getExe makeBinPath; in { + imports = [./languages.nix]; config = mkIf cfg.enable { home-manager.users.${username} = { programs.helix = { enable = true; # thanks fufexan, this is great! - package = inputs'.helix.packages.default.helix.overrideAttrs (previousAttrs: { + package = inputs'.helix.packages.default.overrideAttrs (previousAttrs: { makeWrapperArgs = with pkgs; previousAttrs.makeWrapperArgs or [] @@ -60,14 +61,6 @@ in { A-f = ":format"; }; }; - languages = { - language-server = { - nil = { - command = getExe pkgs.nil; - config.nil.formatting.command = ["${getExe pkgs.alejandra}" "-q"]; - }; - }; - }; }; }; };