当尝试恢复旧项目时,有时我必须四处寻找较旧的 Nixpkgs 承诺才能开始工作。
例如,我的大多数shell.nix文件都是这样开始的,
{pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
# ...
}
Run Code Online (Sandbox Code Playgroud)
这将从当前通道指向的提交中导入所有表达式,但一段时间后,发生了太多更改,我的项目将不再构建;然后我必须找到一个仍然有效的提交,然后从那里开始。
$ nix-shell --arg pkgs \
> 'import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/0c0fe6d85b92c4e992e314bd6f9943413af9a309.tar.gz") {}'
Run Code Online (Sandbox Code Playgroud)
如果我当时能够从通道中保存工作提交,并在以后需要时有一些可靠的东西可以回退,那可能是最好的。
我有一个 package-upgrades.nix,我用它来从不稳定或分支升级包。
{...}:
{
nixpkgs.config = {
packageOverrides = let
pkgsUnstable = import (
fetchTarball https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz
) { };
pkgsMaster = import (
fetchTarball https://github.com/NixOS/nixpkgs/archive/master.tar.gz
) { };
pkgsLocal = import (
fetchTarball https://github.com/moaxcp/nixpkgs/archive/local.tar.gz
) { };
in pkgs:
rec {
dropbox = pkgsUnstable.dropbox;
jbake = pkgsUnstable.jbake;
};
};
}
Run Code Online (Sandbox Code Playgroud)
这适用于 Windows 管理器之类的东西。
notion = pkgsUnstable.notion;
...
windowManager.notion.enable = true;
Run Code Online (Sandbox Code Playgroud)
问题是 allowUnfree 似乎没有在不稳定的导入上设置。我想尝试这样的事情。
pkgsUnstable = import (
fetchTarball https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz
) { inherit config };
Run Code Online (Sandbox Code Playgroud)
这会导致未定义配置的错误。
error: undefined variable ‘config’ at …Run Code Online (Sandbox Code Playgroud)