私はNixOSを使用しており、HaskellプロジェクトにNix Haskell環境を設定しようとしています。私は持っています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";
});
};
};
};
上記は私の設定にあります。
答え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を使用する一般的なヒントここで依存関係の依存関係をオーバーライドする方法の例を見つけることができます。