1
0
Fork 0
mirror of https://github.com/ciderale/nixos-utm.git synced 2024-12-14 11:37:37 +00:00
nixos-utm/README.md
2024-10-11 01:38:31 +02:00

2.2 KiB

NixOS-UTM : Conveniently create UTM VM with NixOS

This repository provides a small wrapper around nixos-anywhere to automate creation of NixOS VMs on MacOS hosts using UTM with the Apple virtualization backend (supporting Rosetta2).

Using the apple virtualsation (insted of qemu) provides access to Rosetta2 and thus efficient x86_64 support within the VM. Unfortunately, the utmctl does not yet provide full functionality (e.g. ip-address) for the appble backend. That complicates automatic vm creation and this repo provides utilities to automate as much as possible for a simple automation setup.

How to create a VM

  • create a nix flake with a nixosConfiguration defined
    • the ./example folder provides a flake with minimal example config
    • use it with nix flake new -t github:ciderale/nixos-utm my-utm-vm
    • adjust ./configuration.nix (atleast set your ssh public key)
  • define an environment variable VM_NAME to name the UTM VM
    • maybe configure this env var within your project/system setup
  • (optionally) define an environment variable UTM_CONFIG to set UTM VM parameters
    • fallback to UTM_CONFIG=./utm.config.nix (which is merged using plutil)
  • kickoff the installation process with the following command
    • assuming your flake is the current directory . with config utm
export VM_NAME=myVM
nix run github:ciderale/nixos-utm#nixosCreate .#utm

Retrieve the VMs IP address

VM_NAME=myVM nix run github:ciderale/nixos-utm#utmConfiguration ip

This command uses the arp cache to lookup the ip address based on the mac address that is found in the VMs configuration folder.

How to rebuild the configuration for an existing configuration

VM_NAME=myVM nix run github:ciderale/nixos-utm#nixosDeploy .#utm

Some aspects that can be improved

  • Make VM configuration configurable (currently hardcoded in nixosCreate)
  • Improve example configuration for simpler onboarding
  • Provide utility to deploy an updated configuration
  • Directory sharing between VM and host system.
    • it's a UTM system configuration, not a VM configuration
    • uses some binary coded "bookmark" format