From e814f8e8bef00bfab0a1af0260474a0f139e4688 Mon Sep 17 00:00:00 2001 From: siggsy Date: Fri, 17 Oct 2025 09:41:09 +0200 Subject: [PATCH 1/8] languages/haskell: remove invalid vim.g options Haskell is not configured with lspconfig, but rather with haskell-tools.nvim. This commit fixes "conversion" made in 39efdc799. Without this, users are met with nvim errors about invalid vim.g options --- modules/plugins/languages/haskell.nix | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/modules/plugins/languages/haskell.nix b/modules/plugins/languages/haskell.nix index ac18fe55..32b8dda9 100644 --- a/modules/plugins/languages/haskell.nix +++ b/modules/plugins/languages/haskell.nix @@ -21,9 +21,7 @@ defaultServers = ["hls"]; servers = { hls = { - enable = false; cmd = [(getExe' pkgs.haskellPackages.haskell-language-server "haskell-language-server-wrapper") "--lsp"]; - filetypes = ["haskell" "lhaskell"]; on_attach = mkLuaInline /* @@ -43,17 +41,6 @@ vim.keymap.set('n', 'rq', ht.repl.quit, opts) end ''; - root_dir = - mkLuaInline - /* - lua - */ - '' - function(bufnr, on_dir) - local fname = vim.api.nvim_buf_get_name(bufnr) - on_dir(util.root_pattern('hie.yaml', 'stack.yaml', 'cabal.project', '*.cabal', 'package.yaml')(fname)) - end - ''; settings = { haskell = { formattingProvider = "ormolu"; From 6c559a144fe0ee9ea25f1e6556fcb3550f2e2435 Mon Sep 17 00:00:00 2001 From: siggsy Date: Fri, 17 Oct 2025 10:08:38 +0200 Subject: [PATCH 2/8] Describe changes in changelog v0.8 --- docs/release-notes/rl-0.8.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index a779037e..da7ee395 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -584,3 +584,8 @@ [mellow.nvim]: https://github.com/mellow-theme/mellow.nvim - Add [mellow.nvim] plugin for vim and lualine theme support + +[Siggsy](https://github.com/siggsy): + +- Fix `vim.languages.haskell.lsp` using `lspconfig` options instead of + `haskell-tools.nvim` options. From 43f33b8bdd8b958338be2797f0ab7f0fab25dd1a Mon Sep 17 00:00:00 2001 From: siggsy Date: Sat, 18 Oct 2025 08:50:27 +0200 Subject: [PATCH 3/8] languages/haskell: remove language server settings Theses are already provided by `haskell-language-server`. We also do not prvoide any packages to complement the specified settings, so it seems unecessary. --- modules/plugins/languages/haskell.nix | 6 ------ 1 file changed, 6 deletions(-) diff --git a/modules/plugins/languages/haskell.nix b/modules/plugins/languages/haskell.nix index 32b8dda9..a2b7a424 100644 --- a/modules/plugins/languages/haskell.nix +++ b/modules/plugins/languages/haskell.nix @@ -41,12 +41,6 @@ vim.keymap.set('n', 'rq', ht.repl.quit, opts) end ''; - settings = { - haskell = { - formattingProvider = "ormolu"; - cabalFormattingProvider = "cabalfmt"; - }; - }; }; }; in { From e2632059d5c6dba6f6cb0804474102f4f875b388 Mon Sep 17 00:00:00 2001 From: siggsy Date: Sat, 18 Oct 2025 08:51:58 +0200 Subject: [PATCH 4/8] languages/haskell: remove cmd with hls-wrapper `haskell-language-server-wrapper` only selects the correct `haskell-language-server`. Snippet from hls documentation: > HLS is a binary that must be compiled with the same version of > GHC as the project you are using it on. For this reason it is > usually distributed as a collection of binaries, along with a > haskell-language-server-wrapper executable that selects the correct > one based on which version of GHC it thinks you are using. By providing `hls-wrapper` we pull A LOT of dependencies, but do not use them (around 6.7GB). This is unecessary since we then have to provide `haskell-language-server` in haskell projects bundled with compatable GHC. --- modules/plugins/languages/haskell.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/plugins/languages/haskell.nix b/modules/plugins/languages/haskell.nix index a2b7a424..7f4c62e9 100644 --- a/modules/plugins/languages/haskell.nix +++ b/modules/plugins/languages/haskell.nix @@ -21,7 +21,6 @@ defaultServers = ["hls"]; servers = { hls = { - cmd = [(getExe' pkgs.haskellPackages.haskell-language-server "haskell-language-server-wrapper") "--lsp"]; on_attach = mkLuaInline /* From 871e04f077da6936e227a83d0a46fab588b59877 Mon Sep 17 00:00:00 2001 From: siggsy Date: Sat, 18 Oct 2025 09:02:23 +0200 Subject: [PATCH 5/8] Document changes in release-notes/rl-0.8 --- docs/release-notes/rl-0.8.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index da7ee395..f7533c29 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -589,3 +589,5 @@ - Fix `vim.languages.haskell.lsp` using `lspconfig` options instead of `haskell-tools.nvim` options. +- Remove unecessary `haskell-language-server-wrapper`, reducing nvf size by 6GB. + From 1189e7813234dc234b845d4e8f7fc15a4d087791 Mon Sep 17 00:00:00 2001 From: siggsy Date: Fri, 7 Nov 2025 20:24:58 +0100 Subject: [PATCH 6/8] Revert "languages/haskell: remove cmd" This reverts commit 9181d4f34e9d9b1edc414e7a0b19f1127e41fbec. --- modules/plugins/languages/haskell.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/plugins/languages/haskell.nix b/modules/plugins/languages/haskell.nix index 7f4c62e9..a2b7a424 100644 --- a/modules/plugins/languages/haskell.nix +++ b/modules/plugins/languages/haskell.nix @@ -21,6 +21,7 @@ defaultServers = ["hls"]; servers = { hls = { + cmd = [(getExe' pkgs.haskellPackages.haskell-language-server "haskell-language-server-wrapper") "--lsp"]; on_attach = mkLuaInline /* From fdba701b46e2fe47c2670e2aeb7850c001abcb31 Mon Sep 17 00:00:00 2001 From: siggsy Date: Fri, 7 Nov 2025 21:07:06 +0100 Subject: [PATCH 7/8] 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 = { From 37671ac59d14cc531c5552f174ff984a7c77a747 Mon Sep 17 00:00:00 2001 From: siggsy Date: Fri, 7 Nov 2025 21:12:29 +0100 Subject: [PATCH 8/8] docs: fix release notes --- docs/release-notes/rl-0.8.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index f7533c29..c1d0d508 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -589,5 +589,5 @@ - Fix `vim.languages.haskell.lsp` using `lspconfig` options instead of `haskell-tools.nvim` options. -- Remove unecessary `haskell-language-server-wrapper`, reducing nvf size by 6GB. +- Fix default language server `cmd` by replacing `haskell-language-server-wrapper` with `haskell-language-server`