Эквивалент передачи аргумента `-p zlib` в` nix-shell` в `shell.nix` - PullRequest
2 голосов
/ 10 октября 2019

Если я строю свой проект на Haskell под nix-shell, это выдает ошибку об отсутствии zlib.

Если я собираю проект в nix-shell с использованием nix-shell -p zlib, тогда проект видит zlib и строитуспешно.

Как добавить пакет zlib в файл shell.nix, чтобы больше не требовалось передавать -p zlib?

Примечание: сборки были выполнены с использованием cabal v2-build

Для построения со стеком мне пришлось сделать следующее

Вот как определяется мой shell.nix:

{ nixpkgs ? import <nixpkgs> {}, compiler ? "default", doBenchmark ? false }:

let

  inherit (nixpkgs) pkgs;

  f = { mkDerivation, base, directory, stdenv, text, turtle, zlib }:
      mkDerivation {
        pname = "haskell-editor-setup";
        version = "0.1.0.0";
        src = ./.;
        isLibrary = false;
        isExecutable = true;
        executableHaskellDepends = [ base directory text turtle zlib ];
        description = "Terminal program that will set up Haskell environment with a target selected editor or IDE";
        license = stdenv.lib.licenses.gpl3;
      };

  haskellPackages = if compiler == "default"
                       then pkgs.haskellPackages
                       else pkgs.haskell.packages.${compiler};

  variant = if doBenchmark then pkgs.haskell.lib.doBenchmark else pkgs.lib.id;

  drv = variant (haskellPackages.callPackage f {});

in

  if pkgs.lib.inNixShell then drv.env else drv

1 Ответ

2 голосов
/ 17 октября 2019

Я получил его на работу, создав среду GHC, используя учебник по Haskell + nix . Ниже мои release.nix и default.nix генерируются через cabal2nix . > default.nix: (обратите внимание на zlib как часть пакетов haskell для включения в вызов ghcWithPackages)

let
  config = 
  {
    packageOverrides = pkgs: 
    {
      haskellPackages = pkgs.haskellPackages.override 
      {
        overrides = new: old:
        {
          interview = new.callPackage ./default.nix;
        };
      };
    };
  };

  pkgs = import <nixpkgs> { inherit config; };

  ghc = pkgs.haskellPackages.ghcWithPackages (hpkgs: with hpkgs;
    [ cabal-install
      interview
      zlib
    ]
  );
in

with pkgs;

mkShell 
{ buildInputs = [ ghc ];
}

...