blog.anqou.net
rss
author
tags

Nix で Rust 製パッケージの src を上書きする

ソフトウェアを Nix 経由で使う際、nixpkgs にあるバージョンとは異なるものが欲しい場合は src の値を overrideAttrs などで書き換えるというのがよくある手だと思います。ところが Rust 製のソフトウェアの場合、これがそんなに単純ではなかったのでメモしておきます。

ちなみに Google で検索すると分かるように、書き換えの方法は月日と共に正解が移り変わっているようなので注意してください。この記事の方法は 2025/6 時点の nixos-unstable では動きましたが、今後はどうなるか分かりません。

#やり方

overrideAttrscargoDeps を指定し、その中で 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 は、やっぱりクラッシュしてしまったのでダメそうです。