nix에서 손상된 Haskell 패키지를 덮어쓰는 방법은 무엇입니까?

nix에서 손상된 Haskell 패키지를 덮어쓰는 방법은 무엇입니까?

저는 NixOS를 사용하고 있으며 Haskell 프로젝트에 Nix Haskell 환경을 설정하려고 합니다. 나는 가지고있다하스켈 패키지Nix로 작성하여 작업하려고 노력 중이지만 nix-shellHaskell 패키지 Clay에 의존합니다.방금 연 버그 보고서에 명시된 대로 빌드되지 않습니다.. 이 Haskell 패키지를 다른 버전(이전 버전이든 새 버전이든 상관없습니다)으로 어떻게 재정의할 수 있나요?

답변1

정확히 관련은 없지만 빌드되지 않는 기존 패키지를 수정해야 합니다. 나는 결국 :

nixpkgs.config.packageOverrides = pkgs: {
    haskellPackages = pkgs.haskellPackages.override {
      overrides = hsSelf: hsSuper: {
        greenclip  = pkgs.haskell.lib.overrideCabal hsSuper.greenclip  (oa: {
          version = "3.1.1";
          sha256 = "1axh1q7kcvcnhn4rl704i4gcix5yn5v0sb3bdgjk4vgkd7fv8chw";
          executablePkgconfigDepends = oa.executablePkgconfigDepends ++ [pkgs.xorg.libXdmcp];
        });

        wordexp  = pkgs.haskell.lib.overrideCabal hsSuper.wordexp  (oa: {
          version = "0.2.2";
          sha256 = "1mbcrq89jz0dcibw66w0jdy4f4bfpx4zwjfs98rm3jjgdikwdzb4";
        });
      };
    };
  };

위의 내용은 내 구성에 있습니다.nix

답변2

다른 모든 사람의 경우 속성에서 재정의를 사용 override하고 제공할 수 있습니다 . 그러면 재정의 패키지가 포함된 패키지 세트의 자체 버전이 생성됩니다.haskellPackagesoverrides

예를 들어 beam-core패키지에서 버전 제한을 제거하고 패키지 테스트를 비활성화합니다 beam-postgres.

myHaskellPackages = nixpkgs.haskellPackages.override {
    overrides = hself: hsuper: {
      # Can add/override packages here
      beam-core = nixpkgs.haskell.lib.doJailbreak hsuper.beam-core;
      beam-postgres = nixpkgs.haskell.lib.dontCheck hsuper.beam-postgres;
    };
  };

그런 다음 수정된 패키지 세트를 사용하여 프로젝트를 빌드합니다.

myHaskellPackages.callCabal2nix "my-project" ./. { }

nixpkgs.haskellPackages.callHackageHackage에 존재하는 한 특정 버전의 패키지에 대한 포크를 빌드하거나 callCabal2nix수정된 ​​로컬 저장소에서 사용하거나 fetchFromGitHub유사하게 원격 저장소를 참조할 수 있습니다.

손상된 Haskell 패키지를 수정하는 방법에 대한 자세한 내용은 다음을 참조하세요.여기및 Haskell 개발에 Nix를 사용하는 일반적인 팁여기에서 종속성에 대한 종속성을 재정의하는 방법에 대한 예를 찾을 수 있습니다.

관련 정보