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:57:26 +02:00

55 lines
2.3 KiB
Markdown

# NixOS-UTM : Conveniently create UTM VM with NixOS
This repository provides a small wrapper around [nixos-anywhere](https://github.com/nix-community/nixos-anywhere)
to automate creation of NixOS VMs on MacOS hosts using [UTM](https://mac.getutm.app)
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/Mac address and other UTM configuration
```
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.
The command `utmConfiguration` alone provides usage for other UTM configuration related information
## 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