# SPDX-FileCopyrightText: 2025 Ethan Reece # # SPDX-License-Identifier: LGPL-3.0-or-later { module-name, ... }: { flake-parts-lib, lib, ... }: { options.perSystem = flake-parts-lib.mkPerSystemOption ( { config, pkgs, ... }: { options.languages.${module-name} = { enable = lib.mkEnableOption "Haskell"; package = lib.mkOption { description = '' Package for Haskell. ''; type = lib.types.package; default = pkgs.ghc; }; }; config = lib.mkIf config.languages.${module-name}.enable ({ editors.helix.languages = { language = [ { name = "haskell"; language-servers = [ "haskell-language-server" ] ++ (lib.optionals config.languages.en-us.enable [ "vale-ls" "harper-ls" "typos" ]); formatter = { command = "${config.treefmt.build.wrapper}/bin/treefmt"; args = [ "--stdin" "%{buffer_name}" "--quiet" ]; }; auto-format = true; # TODO: https://github.com/tree-sitter/tree-sitter-haskell/issues/144 grammar = ""; } ]; # TODO: See https://github.com/helix-editor/helix/issues/13586, this workaround does not work # grammar = [ # { # name = "haskell"; # source = { # git = "https://github.com/tree-sitter/tree-sitter-haskell"; # rev = "af32d884088ce7b74541b5e51820baa7e305caae"; # }; # } # ]; language-server.haskell-language-server = { command = "${pkgs.haskell-language-server}/bin/haskell-language-server-wrapper"; args = [ "--lsp" ]; }; }; treefmt.programs.fourmolu.enable = true; devshells.default.packages = [ config.languages.haskell.package pkgs.haskell-language-server ]; }); } ); }