haskell-language-server: reformat code a bit & document better

This commit is contained in:
Profpatsch 2023-10-18 16:23:42 +02:00
parent 51ea6bf33c
commit 811db8c616

View File

@ -1,9 +1,18 @@
{ lib { lib
, stdenv , stdenv
, supportedGhcVersions ? [ "94" ]
, dynamic ? true
, haskellPackages , haskellPackages
, haskell , haskell
# Which GHC versions this hls can support.
# These are looked up in nixpkgs as `pkgs.haskell.packages."ghc${version}`.
# Run
# $ nix-instantiate --eval -E 'with import <nixpkgs> {}; builtins.attrNames pkgs.haskell.packages'
# to list for your nixpkgs version.
, supportedGhcVersions ? [ "94" ]
# Whether to build hls with the dynamic run-time system.
# See https://haskell-language-server.readthedocs.io/en/latest/troubleshooting.html#static-binaries for more information.
, dynamic ? true
}: }:
# #
# The recommended way to override this package is # The recommended way to override this package is
@ -13,9 +22,15 @@
# for example. Read more about this in the haskell-language-server section of the nixpkgs manual. # for example. Read more about this in the haskell-language-server section of the nixpkgs manual.
# #
let let
inherit (lib) concatStringsSep concatMapStringsSep take splitString pipe optionals; inherit (haskell.lib.compose)
inherit (haskell.lib.compose) justStaticExecutables overrideCabal enableCabalFlag disableCabalFlag; justStaticExecutables
overrideCabal
enableCabalFlag
disableCabalFlag
;
getPackages = version: haskell.packages."ghc${version}"; getPackages = version: haskell.packages."ghc${version}";
tunedHls = hsPkgs: tunedHls = hsPkgs:
lib.pipe hsPkgs.haskell-language-server ([ lib.pipe hsPkgs.haskell-language-server ([
(haskell.lib.compose.overrideCabal (old: { (haskell.lib.compose.overrideCabal (old: {
@ -27,32 +42,40 @@ let
''; '';
})) }))
((if dynamic then enableCabalFlag else disableCabalFlag) "dynamic") ((if dynamic then enableCabalFlag else disableCabalFlag) "dynamic")
] ++ optionals (!dynamic) [ ]
++ lib.optionals (!dynamic) [
justStaticExecutables justStaticExecutables
]); ]);
targets = version: targets = version:
let packages = getPackages version; let packages = getPackages version;
in [ in [ "haskell-language-server-${packages.ghc.version}" ];
"haskell-language-server-${packages.ghc.version}"
];
makeSymlinks = version: makeSymlinks = version:
concatMapStringsSep "\n" (x: lib.concatMapStringsSep "\n"
"ln -s ${ (x:
tunedHls (getPackages version) "ln -s ${
}/bin/haskell-language-server $out/bin/${x}") (targets version); tunedHls (getPackages version)
in assert supportedGhcVersions != []; stdenv.mkDerivation { }/bin/haskell-language-server $out/bin/${x}")
(targets version);
in
assert supportedGhcVersions != []; stdenv.mkDerivation
{
pname = "haskell-language-server"; pname = "haskell-language-server";
version = haskellPackages.haskell-language-server.version; version = haskellPackages.haskell-language-server.version;
buildCommand = '' buildCommand = ''
mkdir -p $out/bin mkdir -p $out/bin
ln -s ${tunedHls (getPackages (builtins.head supportedGhcVersions))}/bin/haskell-language-server-wrapper $out/bin/haskell-language-server-wrapper ln -s ${tunedHls (getPackages (builtins.head supportedGhcVersions))}/bin/haskell-language-server-wrapper $out/bin/haskell-language-server-wrapper
${concatMapStringsSep "\n" makeSymlinks supportedGhcVersions} ${lib.concatMapStringsSep "\n" makeSymlinks supportedGhcVersions}
''; '';
meta = haskellPackages.haskell-language-server.meta // { meta = haskellPackages.haskell-language-server.meta // {
maintainers = [ lib.maintainers.maralorn ]; maintainers = [ lib.maintainers.maralorn ];
longDescription = '' longDescription = ''
This package provides the executables ${ This package provides the executables ${
concatMapStringsSep ", " (x: concatStringsSep ", " (targets x)) lib.concatMapStringsSep ", " (x: lib.concatStringsSep ", " (targets x))
supportedGhcVersions supportedGhcVersions
} and haskell-language-server-wrapper. } and haskell-language-server-wrapper.
You can choose for which ghc versions to install hls with pkgs.haskell-language-server.override { supportedGhcVersions = [ "90" "92" ]; }. You can choose for which ghc versions to install hls with pkgs.haskell-language-server.override { supportedGhcVersions = [ "90" "92" ]; }.