1
0
Fork 0
nix-flake-base/languages/haskell/default.nix

70 lines
2.2 KiB
Nix

# SPDX-FileCopyrightText: 2025 Ethan Reece <contact@ethanreece.com>
#
# 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
];
});
}
);
}