# MicroVM output options

Hypervisor runners are provided in the `config` generated by a
nixosSystem for you to use inside and outside your configuration.

| Option                   | Purpose                                                   |
| ------------------------ | --------------------------------------------------------- |
| `microvm.declaredRunner` | Runner package selected according to `microvm.hypervisor` |
| `microvm.runners`        | Attribute set of runner packages per known Hypervisor.    |

The `microvm.declaredRunner` selects the hypervisor according to the
configured `microvm.hypervisor`.

```bash
nix run .#nixosConfigurations.my-microvm.config.microvm.declaredRunner
```

The `microvm.runners` option provides a runner for each known
Hypervisor regardless of the `microvm.hypervisor` config setting. To
build _my-microvm_ for Firecracker for example:

```bash
nix run .#nixosConfigurations.my-microvm.config.microvm.runners.firecracker
```

## Configure `microvm.hypervisor`, use `microvm.declaredRunner`!

One of the `microvm.runners` is picked by `microvm.declaredRunner` by
evaluating `microvm.hypervisor`.

You may switch the Hypervisor quickly, but use `declaredRunner` in
production. Any other NixOS configuration that evaluates the
`microvm.hypervisor` option can be wrong when you pick from
`microvm.runners` directly. One example would be the defaults set by
`microvm.optimize`.
