在 "add shared folder in virtualbox guest NixOS" 中组合两个 nix 表达式

Combine two nix expressions in "add shared folder in virtualbox guest NixOS"

我已经在我的 virtualbox 中安装了 NixOS。 我想在我的 NixOS 中添加一个共享文件夹。 我已经在我的 virtualbox 端的 Device->SharedFolder->Setting 中设置了一个名为 Code 的共享文件夹。 我试图插入 Guest Addition 图像。它说:

Could not mount the media/drive 'C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso' (VERR_PDM_MEDIA_LOCKED).

我强制挂载到Device->CDRom

ls -l /dev/cdrommount -t iso9660 -o ro /dev/cdrom /cdrom。 Guest Additions 的文件可以在 /cdrom

中看到

virtualization.virtualbox.guest.enable = true in /etc/nixos/configuration.nix(我在某个地方读到过这一行足以在 nixos 中安装 Guest Addition。)

然后我将配置设置为:

...
fileSystems = [
  {
    mountPoint = "/";
    label = "nixos";
  }
];
...

fileSystems."/virtualboxshare" = {
  fsType = "vboxsf";
  device = "Code";
  option = [ "rw" ];
};

nixos-rebuild switch,上面写着:

error: attribute fileSystems."/virtualboxshare" at ... already defined at ... (fileSystems = ...)

那么如何将这两个表达式组合在一起并使我的分片文件夹在 nixOS 中可见?

您在构成您的 nixos 配置或模块的 attrset 中定义了两次 fileSystems。在第一个定义中,它是一个列表,而在第二个定义中,您通过使用嵌套属性集 shorthand 表示法将 fileSystems 定义为一个属性集。所以实际上,这个错误是由 Nix 语言而不是 NixOS 模块系统产生的。

可以通过使用与 /virtualboxshare.

相同的符号定义所有文件系统来解决此错误

为了更好地了解嵌套属性集,尝试一下 nix repl:

可能会有用
$ nix repl
Welcome to Nix version 2.0. Type :? for help.

nix-repl> :p { a = {c = 2; }; a.b = 1; }
{ a = { b = 1; c = 2; }; }

(注意使用 :p 来评估所有内容,而不仅仅是最外层的属性集)