Nix FlakeでRustネイティブ開発環境構築
個人的なメモ。
rust-overlay を使います。macOSで使ってますが、おそらくLinuxでも動作すると思います。
{
description = "Rust development environment";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
rust-overlay.url = "github:oxalica/rust-overlay";
};
outputs = { self, nixpkgs, flake-utils, rust-overlay }:
flake-utils.lib.eachDefaultSystem (system:
let
overlays = [ (import rust-overlay) ];
pkgs = import nixpkgs {
inherit system overlays;
};
in
{
devShells.default = pkgs.mkShell {
buildInputs = with pkgs; [
git
pkg-config
(rust-bin.stable.latest.default.override {
extensions = [ "rust-src" ];
})
];
};
}
);
}- git
- ホストにgitが入っていても、devShellにgitを入れておかないとなぜか以下のようなエラーになってgitコマンドが使えなくなって色々挙動がおかしくなります
warning: unhandled Platform key FamilyDisplayName error: tool 'git' not found
- ホストにgitが入っていても、devShellにgitを入れておかないとなぜか以下のようなエラーになってgitコマンドが使えなくなって色々挙動がおかしくなります
- pkg-config
- いつ必要なのか詳しくは把握してないんだけど、ネイティブライブラリとリンクするなら入れておいたほうがいいという認識
- rust-bin.~
- Rust本体
extensions = [ "rust-src" ]がないとrust-analyzerが動作しなかった
あとはVSCodeでディレクトリを開いて、direnvでFlakeで定義されたdevShellの環境を読み込みます。
注意点として、flakeで開発環境を立ち上げたあとにcargo initをすると、このタイミングでgitのローカルレポジトリが初期化され、そこにはflake.nixがstagingされていないため次回以降のnix developが失敗するようになります。なのでちゃんとcargo initしたあと作業開始する前にflake.nixをgit管理化に入れておきましょう。
