mkMergeを使用して2つの属性セットをマージするNixos設定を構築すると、「インポート」オプションはありません。値定義...」というエラーが発生します。

mkMergeを使用して2つの属性セットをマージするNixos設定を構築すると、「インポート」オプションはありません。値定義...」というエラーが発生します。

私がやろうとしていること:

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私が望む機能に適した機能ではないと思います。

ベストアンサー1

おすすめ記事