From 15013b305466fdd0a52222ed2a3ff87bf9e41af9 Mon Sep 17 00:00:00 2001 From: Winter Date: Mon, 2 Jan 2023 10:36:41 -0500 Subject: [PATCH] darwin.builder: prefer shutting down over halting VM (#208450) This is preferable because it prevents things like disk corruption (requiring the user to delete the disk image when starting up) that I consistently ran into. --- .../special/darwin-builder.section.md | 3 +- nixos/modules/profiles/macos-builder.nix | 30 +++++++++++++------ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/doc/builders/special/darwin-builder.section.md b/doc/builders/special/darwin-builder.section.md index 205db14347a..af9de5751b2 100644 --- a/doc/builders/special/darwin-builder.section.md +++ b/doc/builders/special/darwin-builder.section.md @@ -39,7 +39,8 @@ nixos login: ``` > Note: When you need to stop the VM, type `Ctrl`-`a` + `c` to open the `qemu` -> prompt and then type `quit` followed by `Enter` +> prompt and then type `system_powerdown` followed by `Enter`, or run `shutdown now` +> as the `builder` user (e.g. `ssh -i keys/builder_ed25519 builder@localhost shutdown now`) To delegate builds to the remote builder, add the following options to your `nix.conf` file: diff --git a/nixos/modules/profiles/macos-builder.nix b/nixos/modules/profiles/macos-builder.nix index a981814730a..fddf19ad125 100644 --- a/nixos/modules/profiles/macos-builder.nix +++ b/nixos/modules/profiles/macos-builder.nix @@ -9,7 +9,8 @@ let in -{ imports = [ +{ + imports = [ ../virtualisation/qemu-vm.nix # Avoid a dependency on stateVersion @@ -18,8 +19,7 @@ in ../virtualisation/nixos-containers.nix ../services/x11/desktop-managers/xterm.nix ]; - config = { - }; + config = { }; options.boot.isContainer = lib.mkOption { default = false; internal = true; }; } ]; @@ -98,11 +98,11 @@ in ''; in - script.overrideAttrs (old: { - meta = (old.meta or { }) // { - platforms = lib.platforms.darwin; - }; - }); + script.overrideAttrs (old: { + meta = (old.meta or { }) // { + platforms = lib.platforms.darwin; + }; + }); system = { # To prevent gratuitous rebuilds on each change to Nixpkgs @@ -118,10 +118,22 @@ in ''); }; - users.users."${user}"= { + users.users."${user}" = { isNormalUser = true; }; + security.polkit.enable = true; + + security.polkit.extraConfig = '' + polkit.addRule(function(action, subject) { + if (action.id === "org.freedesktop.login1.power-off" && subject.user === "${user}") { + return "yes"; + } else { + return "no"; + } + }) + ''; + virtualisation = { diskSize = 20 * 1024;