相关疑难解决方法(0)

如何找到 Nix 通道指向的提交?

当尝试恢复旧项目时,有时我必须四处寻找较旧的 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)

如果我当时能够从通道中保存工作提交,并在以后需要时有一些可靠的东西可以回退,那可能是最好的。

nixos nix nixpkgs

6
推荐指数
2
解决办法
2297
查看次数

导入不稳定并继承配置

我有一个 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)

nixos nix

5
推荐指数
1
解决办法
1273
查看次数

标签 统计

nix ×2

nixos ×2

nixpkgs ×1