前置条件

读者需要先在宿主机上安装 gnome boxes,并在其中安装 NixOS,笔者使用的是 NixOS 25.05 的 gnome 桌面, 安装后在宿主机中的 gnome boxes 上配置好共享文件夹。

启用 NixOS 相关服务

编辑 /etc/nixos/configuration.nix 在 services 片段添加如下内容:

# enable nixos as a VM
services.spice-vdagentd.enable = true;
services.spice-webdavd.enable = true;

之后在终端执行 sudo nixos-rebuild switch 使得配置生效,但是需要注意,NixOS 的该命令并不会 修改服务的运行与停止状态,所以我们还需要手动重启使得服务启动,或者手动启动。

但在重启之前,请读者先执行以下步骤,在宿主机下添加用户服务,以确保在启动机器后自动挂载。

这里可以直接按照传统的方式设置服务,但是这不太符合 NixOS 的可复现理念,笔者这里介绍两种方法。

添加挂载宿主机文件夹服务

编辑 $HOME/.config/systemd/user/gvfs-mount-shared.service

[Unit]
Description=Mount GNOME Boxes Shared Folder via gvfs
After=graphical-session.target

[Service]
ExecStart=/run/current-system/sw/bin/gio mount dav://127.0.0.1:9843/
Restart=on-failure

[Install]
WantedBy=default.target

之后在终端执行 systemctl --user enable gvfs-mount-shared.service 并重启机器,打开 nautilus 即可看到宿主机的挂载文件夹。

修改 NixOS 配置文件

我们可以直接配置 /etc/nixos/configuration.nix 添加如下内容:

{ config, pkgs, ... }:

{
  systemd.user.services.gvfs-mount-shared = {
    description = "Mount GNOME Boxes Shared Folder via gvfs";
    after = [ "graphical-session.target" ];
    wantedBy = [ "default.target" ];

    serviceConfig = {
      ExecStart = "${pkgs.glib}/bin/gio mount dav://127.0.0.1:9843/";
      Restart = "on-failure";
    };
  };
}

如此即可配置 NixOS 开机将该服务作为用户服务启动。