有一些库,例如 gitrev,它允许将 git 修订版本编译为可执行文件,但在使用
nix-build http://../master
的情况下,源树中会丢失 git 元数据。
在这种情况下如何引用派生修订版以至少将其包含在 shellHook 中?
您可以使用
self.rev
将当前 Nix flake 的 git 版本注入到推导中。
flake.nix
:
{
inputs.nixpkgs.url = "github:NixOS/nixpkgs";
outputs = { self, nixpkgs }:
let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
in
{
devShells.${system}.default = pkgs.mkShell {
shellHook = ''
echo "Nix flake revision is ${self.rev or self.dirtyRev or "dirty"}"
echo "nixpkgs revision is ${nixpkgs.rev}"
'';
};
};
nixConfig.bash-prompt-suffix = "[devshell] ";
}
$ git init
$ git add flake.nix
$ git commit -m initial
$ nix develop
Nix flake revision is 32074a3b6583d7677f3aeb3679f75c190ab62c78
nixpkgs revision is bd1cde45c77891214131cbbea5b1203e485a9d51
也可以使用其他薄片输入的修订版。从 Nix v2.17 开始,还提供了
dirtyRev
和 dirtyShortRev
(因此您可以删除 or "dirty"
部分),以防 git 工作目录处于修改状态。
截至 2023 年,Nix flake 已成为开发、构建和打包软件项目的事实标准。