저는 NixOS를 사용하고 있으며 Haskell 프로젝트에 Nix Haskell 환경을 설정하려고 합니다. 나는 가지고있다하스켈 패키지Nix로 작성하여 작업하려고 노력 중이지만 nix-shell
Haskell 패키지 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
하고 제공할 수 있습니다 . 그러면 재정의 패키지가 포함된 패키지 세트의 자체 버전이 생성됩니다.haskellPackages
overrides
예를 들어 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.callHackage
Hackage에 존재하는 한 특정 버전의 패키지에 대한 포크를 빌드하거나 callCabal2nix
수정된 로컬 저장소에서 사용하거나 fetchFromGitHub
유사하게 원격 저장소를 참조할 수 있습니다.
손상된 Haskell 패키지를 수정하는 방법에 대한 자세한 내용은 다음을 참조하세요.여기및 Haskell 개발에 Nix를 사용하는 일반적인 팁여기에서 종속성에 대한 종속성을 재정의하는 방법에 대한 예를 찾을 수 있습니다.