diff options
author | Linnnus <[email protected]> | 2025-02-15 10:37:08 +0100 |
---|---|---|
committer | Linnnus <[email protected]> | 2025-02-15 10:50:02 +0100 |
commit | 4bbe4ecb4fe61275640513a03a4a4fa4746193fe (patch) | |
tree | 5be14fbb60ea754cf9af94289e3d68295d3854bb /hosts/muhammed/dev-vm/default.nix | |
parent | f39c3be2f03e810fddaae3b3c263d350013cea28 (diff) |
muhammed/dev-vm: Add development VM
Diffstat (limited to 'hosts/muhammed/dev-vm/default.nix')
-rw-r--r-- | hosts/muhammed/dev-vm/default.nix | 68 |
1 files changed, 68 insertions, 0 deletions
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} + ''; +} |