mirror of
https://github.com/ciderale/nixos-utm.git
synced 2024-12-14 11:37:37 +00:00
55 lines
2.3 KiB
Markdown
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
|