nix-cargo-integration
轻松无缝地将Cargo项目与Nix集成。
- 使用dream2nix构建Cargo包并提供开发shell环境。
- 采用合理的默认设置,力求与Cargo兼容。
- 旨在减轻用户的工作负担;提供实用的配置选项。
- 作为flake-parts模块,可以轻松地集成到使用
flake-parts
的现有Nix代码中。
文档
master
分支的文档位于https://flake.parts/options/nix-cargo-integration.html
(或者直接阅读src/interface.nix
和src/modules
中的选项)
示例可以在examples
目录中找到。
重要的(主要是破坏性的)更改可以在CHANGELOG.md
中找到。
安装
运行nix flake init -t github:yusdacra/nix-cargo-integration
以初始化一个简单的flake.nix
。
你也可以运行nix flake init -t github:yusdacra/nix-cargo-integration#simple-crate
来初始化一个Cargo crate和flake.nix
,
或者运行nix flake init -t github:yusdacra/nix-cargo-integration#simple-workspace
来初始化一个带有flake.nix
的Cargo工作空间。
如果你已经有了一个设置了flake-parts
的flake.nix
,只需将NCI添加到inputs中:
{
# ...
inputs.nci.url = "github:yusdacra/nix-cargo-integration";
# ...
}
然后在mkFlake
内部:
{
imports = [
inputs.nci.flakeModule
];
}
技巧和窍门
在Rust库中忽略Cargo.lock
Rust库的官方建议
曾经是将Cargo.lock
添加到.gitignore
中。
现在情况已经改变,
但是较老的项目可能仍然这样做,这将导致使用flake.nix
时路径评估方式的冲突。
只有版本控制系统(如git)跟踪的文件才能在评估期间被访问。
这将表现为以下警告:
$ nix build
trace: Cargo.lock not found for project at path path/to/project.
Please ensure the lockfile exists for your project.
If you are using a VCS, ensure the lockfile is added to the VCS and not ignored (eg. run `git add path/to/project/Cargo.lock` for git).
This project will be skipped and won't have any outputs generated.
Run `nix run .#generate-lockfiles` to generate lockfiles for projects that don't have one.
一个巧妙的解决方法是跟踪Cargo.lock
的路径而不暂存它
(感谢@bew)。
$ git add --intent-to-add Cargo.lock
如果你的Cargo.lock
列在.gitignore
中,请添加--force
参数。