From a97aa7d72485f94ad19cf35a61da436276bb86fc Mon Sep 17 00:00:00 2001 From: dathegreat Date: Mon, 27 Apr 2026 10:16:08 -0600 Subject: [PATCH] languages/haskell.nix: address PR comments - Rename hls -> haskell-language-server to match the nixpkgs name - Remove unneeded injection - Only set lsp filetypes in the language module, not the preset - Remove unneeded `mkDefault` - Use `root_markers` instead of yucky inline Lua --- docs/manual/release-notes/rl-0.9.md | 6 +-- modules/plugins/languages/haskell.nix | 6 ++- modules/plugins/lsp/presets/default.nix | 2 +- .../lsp/presets/haskell-language-server.nix | 30 +++++++++++++ modules/plugins/lsp/presets/hls.nix | 42 ------------------- 5 files changed, 38 insertions(+), 48 deletions(-) create mode 100644 modules/plugins/lsp/presets/haskell-language-server.nix delete mode 100644 modules/plugins/lsp/presets/hls.nix diff --git a/docs/manual/release-notes/rl-0.9.md b/docs/manual/release-notes/rl-0.9.md index 870b3d32..15685e8b 100644 --- a/docs/manual/release-notes/rl-0.9.md +++ b/docs/manual/release-notes/rl-0.9.md @@ -204,9 +204,9 @@ [dathegreat](https://github.com/dathegreat): - Fixed invalid keys in the haskell-tools configuration -- Changed the default haskell formatter to - [fourmolu](https://github.com/fourmolu/fourmolu), matching the - [haskell-tools default](https://github.com/mrcjkb/haskell-tools.nvim/blob/9ea030aa67f3875753e70e1eb59701f7020479a0/lua/haskell-tools/config/internal.lua#L131) +- Split haskell configuration into `lsp/presets/haskell-language-server.nix` and + `languages/haskell.nix` +- Made the haskell LSP and formatter configurable [alfarel](https://github.com/alfarelcynthesis): diff --git a/modules/plugins/languages/haskell.nix b/modules/plugins/languages/haskell.nix index c4546640..90cc2d38 100644 --- a/modules/plugins/languages/haskell.nix +++ b/modules/plugins/languages/haskell.nix @@ -18,9 +18,9 @@ cfg = config.vim.languages.haskell; - defaultServers = ["hls"]; + defaultServers = ["haskell-language-server"]; servers = { - hls = {}; + haskell-language-server = {}; }; in { options.vim.languages.haskell = { @@ -84,6 +84,8 @@ in { }; }) + # haskell-tools prefers to manage the lsp directly, + # so we only configure the lsp ourselves if haskell-tools is disabled (mkIf (cfg.lsp.enable && !cfg.extensions.haskell-tools.enable) { vim.lsp = { presets = genAttrs cfg.lsp.servers (_: {enable = true;}); diff --git a/modules/plugins/lsp/presets/default.nix b/modules/plugins/lsp/presets/default.nix index 98dee73d..8c43b61e 100644 --- a/modules/plugins/lsp/presets/default.nix +++ b/modules/plugins/lsp/presets/default.nix @@ -22,7 +22,7 @@ ./gopls.nix ./harper.nix ./helm-ls.nix - ./hls.nix + ./haskell-language-server.nix ./intelephense.nix ./jdt-language-server.nix ./jinja-lsp.nix diff --git a/modules/plugins/lsp/presets/haskell-language-server.nix b/modules/plugins/lsp/presets/haskell-language-server.nix new file mode 100644 index 00000000..a9ed0980 --- /dev/null +++ b/modules/plugins/lsp/presets/haskell-language-server.nix @@ -0,0 +1,30 @@ +{ + config, + lib, + pkgs, + ... +}: let + inherit (lib.meta) getExe'; + inherit (lib.modules) mkIf; + inherit (lib.nvim.types) mkLspPresetEnableOption; + + cfg = config.vim.lsp.presets.haskell-language-server; +in { + options.vim.lsp.presets.haskell-language-server = { + enable = mkLspPresetEnableOption "haskell-language-server" "Haskell" []; + }; + + config = mkIf cfg.enable { + vim.lsp.servers.haskell-language-server = { + enable = true; + cmd = [(getExe' pkgs.haskellPackages.haskell-language-server "haskell-language-server-wrapper") "--lsp"]; + root_markers = ["hie.yaml" "stack.yaml" "cabal.project" "*.cabal" "package.yaml"]; + settings = { + haskell = { + formattingProvider = "ormolu"; + cabalFormattingProvider = "cabal-fmt"; + }; + }; + }; + }; +} diff --git a/modules/plugins/lsp/presets/hls.nix b/modules/plugins/lsp/presets/hls.nix deleted file mode 100644 index 11f4dd44..00000000 --- a/modules/plugins/lsp/presets/hls.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - inherit (lib.meta) getExe'; - inherit (lib.modules) mkDefault mkIf; - inherit (lib.nvim.types) mkLspPresetEnableOption; - inherit (lib.generators) mkLuaInline; - - cfg = config.vim.lsp.presets.hls; -in { - options.vim.lsp.presets.hls = { - enable = mkLspPresetEnableOption "hls" "Haskell" []; - }; - - config = mkIf cfg.enable { - vim.lsp.servers.hls = { - enable = true; - cmd = [(getExe' pkgs.haskellPackages.haskell-language-server "haskell-language-server-wrapper") "--lsp"]; - filetypes = ["haskell" "lhaskell"]; - 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 = mkDefault "ormolu"; - cabalFormattingProvider = "cabal-fmt"; - }; - }; - }; - }; -}