From 4bbe4ecb4fe61275640513a03a4a4fa4746193fe Mon Sep 17 00:00:00 2001 From: Linnnus Date: Sat, 15 Feb 2025 10:37:08 +0100 Subject: muhammed/dev-vm: Add development VM --- hosts/muhammed/dev-vm/default.nix | 68 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 hosts/muhammed/dev-vm/default.nix (limited to 'hosts/muhammed/dev-vm/default.nix') diff --git a/hosts/muhammed/dev-vm/default.nix b/hosts/muhammed/dev-vm/default.nix new file mode 100644 index 0000000..e7fb05b --- /dev/null +++ b/hosts/muhammed/dev-vm/default.nix @@ -0,0 +1,68 @@ +# This module sets up a development VM which I use for developing Linux stuff +# on this Darwin host. +{ + lib, + pkgs, + flakeInputs, + flakeOutputs, + metadata, + ... +}: let + workingDirectory = "/var/lib/dev-vm"; + + # Port 22 on the guest is forwarded to this port on the host. + port = 31023; + + guest-system = import "${pkgs.path}/nixos" { + configuration = { + imports = [ + { + _module.args = { + hostPkgs = pkgs; + hostPort = port; + inherit workingDirectory flakeInputs flakeOutputs metadata; + }; + } + flakeInputs.home-manager.nixosModules.home-manager + flakeInputs.agenix.nixosModules.default + ./configuration/configuration.nix + ]; + }; + system = builtins.replaceStrings ["darwin"] ["linux"] pkgs.stdenv.hostPlatform.system; + }; +in { + system.activationScripts.preActivation.text = '' + mkdir -p ${lib.escapeShellArg workingDirectory} + ''; + + launchd.agents.dev-vm = { + script = '' + # create-builder uses TMPDIR to share files with the builder, notably certs. + # macOS will clean up files in /tmp automatically that haven't been accessed in 3+ days. + # If we let it use /tmp, leaving the computer asleep for 3 days makes the certs vanish. + # So we'll use /run/org.nixos.dev-vm instead and clean it up ourselves. + export TMPDIR=/run/org.nixos.dev-vm + export USE_TMPDIR=1 + + rm -rf "$TMPDIR" + mkdir -p "$TMPDIR" + trap 'rm -rf "$TMPDIR"' EXIT + + ${guest-system.config.system.build.macos-vm-installer}/bin/create-builder + ''; + + serviceConfig = { + KeepAlive = true; + RunAtLoad = true; + WorkingDirectory = workingDirectory; + }; + }; + + environment.etc."ssh/ssh_config.d/100-dev-vm.conf".text = '' + Host ${guest-system.config.networking.hostName} + User linus # Also hardcoded in `configuration.nix`. + Hostname localhost + Port ${toString port} + IdentityFile ${./keys/ssh_vmhost_ed25519_key} + ''; +} -- cgit v1.2.3