如何为软件包编写新的.nix配置文件

时间:2019-02-10 09:55:28

标签: config nixos

我想将已安装软件包的列表保存在与configuration.nix不同的.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)

1 个答案:

答案 0 :(得分:4)

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

{ 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模块的源代码之前,可能需要滚动浏览它,这对我来说太晚了。