diff --git a/flake.nix b/flake.nix index 3a4b726a190a4..b487800b7ac0b 100644 --- a/flake.nix +++ b/flake.nix @@ -39,7 +39,7 @@ formatter = pkgs.nixpkgs-fmt; - devShells.default = import ./nix/shell.nix { inherit pkgs; }; + devShells.default = import ./nix/shell.nix { inherit pkgs system; }; } ); } diff --git a/nix/shell.nix b/nix/shell.nix index d0dffbe8279ca..d6c5b08c480c9 100644 --- a/nix/shell.nix +++ b/nix/shell.nix @@ -1,7 +1,14 @@ -{ pkgs }: +{ pkgs, system }: let versions = import ./versions.nix { inherit pkgs; }; + # empty package, for shenanigans + empty = builtins.derivation { + inherit system; + name = "empty"; + builder = pkgs.writeShellScript "null.sh" "${pkgs.coreutils}/bin/mkdir $out"; + }; + # Unix ODBC Support freetdsWithODBC = pkgs.freetds.override { odbcSupport = true; @@ -28,6 +35,40 @@ let configureFlags = [ "--disable-gui" "--sysconfdir=${odbcConfiguration}" ]; }); + # Ensure that GHC and HLS have access to all the dynamic libraries we have kicking around. + ghc = + let original = pkgs.haskell.compiler.${pkgs.ghcName}; + in pkgs.stdenv.mkDerivation + { + name = original.name; + src = empty; + buildInputs = [ original pkgs.makeWrapper ]; + installPhase = '' + mkdir -p "$out/bin" + makeWrapper ${original}/bin/ghc "$out/bin/ghc" \ + --set LD_LIBRARY_PATH ${pkgs.lib.strings.makeLibraryPath dynamicLibraries} \ + --set DYLD_LIBRARY_PATH ${pkgs.lib.strings.makeLibraryPath dynamicLibraries} + ''; + }; + + hls = + let original = pkgs.haskell.packages.${pkgs.ghcName}.haskell-language-server; + in pkgs.stdenv.mkDerivation + { + name = original.name; + src = empty; + buildInputs = [ original pkgs.makeWrapper ]; + installPhase = '' + mkdir -p "$out/bin" + makeWrapper ${original}/bin/haskell-language-server "$out/bin/haskell-language-server" \ + --set LD_LIBRARY_PATH ${pkgs.lib.strings.makeLibraryPath dynamicLibraries} \ + --set DYLD_LIBRARY_PATH ${pkgs.lib.strings.makeLibraryPath dynamicLibraries} + makeWrapper ${original}/bin/haskell-language-server-wrapper "$out/bin/haskell-language-server-wrapper" \ + --set LD_LIBRARY_PATH ${pkgs.lib.strings.makeLibraryPath dynamicLibraries} \ + --set DYLD_LIBRARY_PATH ${pkgs.lib.strings.makeLibraryPath dynamicLibraries} + ''; + }; + baseInputs = [ pkgs.stdenv pkgs.jq @@ -56,15 +97,14 @@ let haskellInputs = [ pkgs.cabal2nix - # The correct version of GHC. - pkgs.haskell.compiler.${pkgs.ghcName} + ghc + hls pkgs.haskell.packages.${pkgs.ghcName}.alex pkgs.haskell.packages.${pkgs.ghcName}.apply-refact (versions.ensureVersion pkgs.haskell.packages.${pkgs.ghcName}.cabal-install) pkgs.haskell.packages.${pkgs.ghcName}.ghcid pkgs.haskell.packages.${pkgs.ghcName}.happy - pkgs.haskell.packages.${pkgs.ghcName}.haskell-language-server (versions.ensureVersion pkgs.haskell.packages.${pkgs.ghcName}.hlint) pkgs.haskell.packages.${pkgs.ghcName}.hoogle pkgs.haskell.packages.${pkgs.ghcName}.hspec-discover