ソフトウェアを Nix 経由で使う際、nixpkgs にあるバージョンとは異なるものが欲しい場合は src
の値を overrideAttrs
などで書き換えるというのがよくある手だと思います。ところが Rust 製のソフトウェアの場合、これがそんなに単純ではなかったのでメモしておきます。
ちなみに Google で検索すると分かるように、書き換えの方法は月日と共に正解が移り変わっているようなので注意してください。この記事の方法は 2025/6 時点の nixos-unstable では動きましたが、今後はどうなるか分かりません。
#やり方
overrideAttrs
に cargoDeps
を指定し、その中で cargoHash
を指定します。以下は WezTerm の例です:
pkgs.wezterm.overrideAttrs (finalAttrs: prevAttrs: rec {
src = pkgs.fetchFromGitHub {
owner = "wezterm";
repo = "wezterm";
rev = "7ee60e2d9bb3b5da8c849389f576d0dfcb630ac0";
fetchSubmodules = true;
hash = "sha256-riZhNt4eblELJTHzuBB6AUVops87BgXwJOGxPLF49ms=";
};
cargoHash = "sha256-t/R4QViLzpdPHynw1Bni42KId+ywKHyYZF40J/OQMVo=";
cargoDeps = pkgs.rustPlatform.fetchCargoVendor {
inherit (finalAttrs) pname src version;
hash = finalAttrs.cargoHash;
};
})
この方法は discource のこの投稿を参考にしています。ただし、提示されている方法をそのまま使うと 25.05 から削除された fetchCargoTarball
を使うことになってエラーになってしまうので、代わりに fetchCargoVendor
を使っています。
#ちなみに
WezTerm を Hyprland から使おうとするとエラーで起動せず、ぐぐってみると動くと思しきコミットハッシュの情報を見つけたので、そのコミットでビルドしてみようと思って以上のやり方を見つけました。ちなみにビルドした WezTerm は、やっぱりクラッシュしてしまったのでダメそうです。