Skip to content

VM profiles

Settings live in ~/.config/bluefin-vm/config.toml ($XDG_CONFIG_HOME is honoured if set). The file holds one profile per VM name, and each profile has three optional groups. Nothing is required: a group, or the whole file, may be missing. Paths may start with ~.

[vms.work.account]
user = "alice"
ssh_key = "~/.ssh/id_ed25519.pub"
sudo_password = true
ssh_password_auth = false

[vms.work.share]
directory = "~/work-share"
read_only = true

[vms.work.resources]
cpu = 8
memory_mib = 8192
refit = false
display = "2560x1600"
scale = 150

account

Who the VM creates at first boot.

Key Type Meaning
user string The account to create, in wheel.
ssh_key path, or "disabled" The public key to authorise; "disabled" installs none.
sudo_password boolean Whether sudo asks for the login password. Default true.
ssh_password_auth boolean Whether sshd accepts password login. Default true.

share

The host directory mounted into the guest as bluefin-share.

Key Type Meaning
directory path The host directory to mount.
read_only boolean Whether the guest is denied write access. Default false.

resources

The VM's hardware, plus the guest desktop scale.

Key Type Meaning
cpu integer Virtual cores.
memory_mib integer Memory in MiB, so the TUI's "Memory (GiB)" of 8 is 8192.
refit boolean Whether Tart resizes the guest to follow the window. Default true.
display string Guest resolution as WIDTHxHEIGHT. Needs refit = false.
scale integer Desktop scale as a percentage. Needs refit = false.

display and scale need refit off because with it on the guest follows the window, so no fixed resolution or scale can hold.

Precedence

A command-line flag wins for that run, then the profile, then the built-in default. Passing --share therefore mounts a different directory once without editing the file, while bluefin-vm tui changes it for every later run.

What writes the file

bluefin-vm tui writes the profile you edited when you save. So does bluefin-vm up when it provisions a fresh VM: it records the account it resolved, which is your macOS username and the ssh key it detected unless you said otherwise. up --no-provision writes nothing.

Both write only the keys documented above. Keys they do not recognise are ignored when the file is read and dropped when it is next written, so a misspelling neither fails nor survives — it silently does nothing.