构建 Nixos 配置,其中我使用 mkMerge 合并两个属性集会导致错误“选项‘导入’不存在。定义值...”

构建 Nixos 配置,其中我使用 mkMerge 合并两个属性集会导致错误“选项‘导入’不存在。定义值...”

我正在尝试做的事情:

我正在尝试定义 Nixos 配置,可以是

  1. 已安装(这将是configuration-pineapple.nix文件)
  2. 通过设置一些额外的配置()作为虚拟机安装/运行vmExtra,我nixos-shell为此使用了nix-build '<nixpkgs/nixos>' -A vm....

vm-pineapple.nix:

{ config, lib, pkgs, ... }: 
let vmExtra = 
  {
    virtualisation = {
      cores = 6;
      memorySize = 8000;
      qemu.guestAgent.enable = true;
      diskSize = 1024*20;
      graphics = false;
    };
  };
in
  lib.mkMerge [
    ((import (./configuration-pineapple.nix)) { config = config; pkgs = pkgs; })
    vmExtra
  ]

上述错误有:

 nixos-shell /etc/nixos/vm-pineapple.nix
error: The option `imports' does not exist. Definition values:
       - In `/etc/nixos/vm-pineapple.nix':
           [
             /etc/nixos/hardware-configuration.nix
             /etc/nixos/services.nix
             /etc/nixos/desktop-services.nix
             /etc/nixos/services/pgbouncer.nix
           ...
(use '--show-trace' to show detailed location information)

我的问题:为什么我会收到此错误?我怎样才能实现上述目标?

我尝试过的:

我试图做一个简单的例子,mkMerge以便更好地理解出了什么问题。我创建了一个x.nix文件:

{}: 
let
  a = { a.example = "hi"; };
  b = { a.example2 = "bye" ; b.example2 = "hello"; };
  nixpkgs = import <nixpkgs> {};
in
  { fv = nixpkgs.lib.mkMerge [ a b ]; }

nix eval --file x.nix fv并通过结果运行:

{ _type = "merge"; contents = [ { a = { example = "hi"; }; } { a = { example2 = "bye"; }; b = { example2 = "hello"; }; } ]; }

这看起来与我的预期有很大不同(我没想到包装结构)。在这种情况下,它让我认为这mkMerge不是适合我想要的功能。

相关内容