From fdba701b46e2fe47c2670e2aeb7850c001abcb31 Mon Sep 17 00:00:00 2001 From: siggsy Date: Fri, 7 Nov 2025 21:07:06 +0100 Subject: [PATCH] languages/haskell: hls-wrapper -> hls hls-wrapper is a simple script to start the correct language server based on the currently oppened project. From nvf perspective, this makes it effectively useless. To allow haskell to work on nvf OOTB, we specify cmd with hls (not wrapper). NOTE: this pins the language server to specific GHC version. To circumvent this, users must override (lib.mkForce) vim.lsp.servers.haskell-tools.cmd with their own, or just specify it as [ "haskell-language-server-wrapper" "--lsp" ]. --- modules/plugins/languages/haskell.nix | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/modules/plugins/languages/haskell.nix b/modules/plugins/languages/haskell.nix index a2b7a424..0d73a987 100644 --- a/modules/plugins/languages/haskell.nix +++ b/modules/plugins/languages/haskell.nix @@ -12,16 +12,18 @@ inherit (lib.nvim.types) mkGrammarOption; inherit (lib.nvim.dag) entryAfter; inherit (lib.nvim.lua) toLuaObject; + inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.meta) getExe'; inherit (lib.generators) mkLuaInline; inherit (pkgs) haskellPackages; cfg = config.vim.languages.haskell; - defaultServers = ["hls"]; + defaultServers = ["haskell-tools"]; servers = { - hls = { - cmd = [(getExe' pkgs.haskellPackages.haskell-language-server "haskell-language-server-wrapper") "--lsp"]; + haskell-tools = { + enable = true; + cmd = [(getExe' pkgs.haskellPackages.haskell-language-server "haskell-language-server") "--lsp"]; on_attach = mkLuaInline /* @@ -79,6 +81,15 @@ in { }; }) + (mkIf cfg.lsp.enable { + vim.lsp.servers = + mapListToAttrs (n: { + name = n; + value = servers.${n}; + }) + cfg.lsp.servers; + }) + (mkIf (cfg.dap.enable || cfg.lsp.enable) { vim = { startPlugins = ["haskell-tools-nvim"]; @@ -94,7 +105,6 @@ in { enable = true, }, }, - hls = ${toLuaObject servers.hls}, ''} ${optionalString cfg.dap.enable '' dap = {