【问题标题】:How to write a new .nix config file for packages?如何为包编写新的 .nix 配置文件?
【发布时间】:2019-02-10 09:55:28
【问题描述】:

我想在一个单独的 .nix 文件中从 configuration.nix 中获得我的已安装软件包列表。我按照手册提出了这个:

{ config, pkgs }:

{
  environment.systemPackages = [
    pkgs.firefox
  ];
}

试图编译它给我一个错误:

[root@nixos:/dev/disk]# nixos-rebuild build
building Nix...
error: anonymous function at /etc/nixos/packages.nix:1:1 called with unexpected argument 'options', at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:170:8
(use '--show-trace' to show detailed location information)
building the system configuration...
error: anonymous function at /etc/nixos/packages.nix:1:1 called with unexpected argument 'options', at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:170:8
(use '--show-trace' to show detailed location information)

【问题讨论】:

    标签: config nix nixos


    【解决方案1】:

    从错误来看,您似乎在参数列表中缺少...,所以这应该可以:

    { config, pkgs, ... }:
    
    {
      environment.systemPackages = [
        pkgs.firefox
      ];
    }
    

    (下面尝试更详细的解释:)

    您的packages.nix 是一个函数,configpkgs 是它的一些参数。不过还有更多,快速尝试一下,我得到了 config, pkgs, lib, options, modulesPath 作为完整的参数列表。

    您的/etc/nixos/configuration.nix 只是众多 NixOS 模块之一,它使用lib.evalModules(在<nixpkgs/lib/modules.nix> 中定义)中的 NixOS 模块机制进行评估。它有点特殊(但只有一点),它不是直接评估而是通过<nixpkgs/nixos/lib/eval-config.nix>,这是评估整个 NixOS 配置的入口点(也用于 NixOps 和为 NixOS 创建安装介质时)。您可以在手册"Writing NixOS Modules" 章节中阅读有关 NixOS 模块的更多信息,尽管对于仅使用 NixOS 来说确实没有必要。不过,在深入研究 NixOS 模块的源代码之前滚动浏览它可能会很好,但我学得太晚了。

    【讨论】:

    • 感谢您的出色回答。我还发现我可以通过将上面的行更改为environment.systemPackages = with pkgs; [ 来避免为我安装的每个程序输入pkgs.
    猜你喜欢
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    相关资源
    最近更新 更多