nixos-shell is a small shell script written by Jörg Thalheim for Nix and #NixOS. What it does is very simple: It takes a machine configuration from your file, builds a VM with it and runs the VM directly in your terminal with sensible defaults.
$ cat vm.nix
{}
$ nixos-shell vm.nix
/nix/store/6cxb591jsb9n8vwqk9zia1a7l3fji1x6-nixos-vm
Formatting '/home/user/nix/vms/nixos.qcow2', fmt=qcow2 size=536870912 cluster_size=65536 lazy_refcounts=off refcount_bits=16
SeaBIOS (version rel-1.11.2-0-gf9626ccb91-prebuilt.qemu-project.org)
iPXE (http://ipxe.org) 00:03.0 C980 PCI2.10 PnP PMM+1F3910F0+1F2F10F0 C980
Press Ctrl-B to configure iPXE (PCI 00:03.0)...
Booting from ROM...
Probing EDD (edd=off to disable)... k
<<< NixOS Stage 1 >>>
loading module virtio_balloon...
loading module virtio_console...
loading module virtio_rng...
loading module dm_mod...
running udev...
kbd_mode: KDSKBMODE: Inappropriate ioctl for device
starting device mapper and LVM...
mke2fs 1.44.4 (18-Aug-2018)
Creating filesystem with 131072 4k blocks and 32768 inodes
Filesystem UUID: a3b328ea-6db1-410e-bae1-88865281022d
Superblock backups stored on blocks:
32768, 98304
Allocating group tables: 0/4done
Writing inode tables: 0/4done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: 0/4done
checking /dev/vda...
fsck (busybox 1.29.3)
[fsck.ext4 (1) -- /mnt-root/] fsck.ext4 -a /dev/vda
/dev/vda: clean, 11/32768 files, 6353/131072 blocks
mounting /dev/vda on /...
mounting store on /nix/.ro-store...
mounting tmpfs on /nix/.rw-store...
mounting shared on /tmp/shared...
mounting xchg on /tmp/xchg...
mounting overlay filesystem on /nix/store...
/nix/store/a9i0a06gcs8w9fj9nghsl0b6vvqpzpi4-bash-4.4-p23/bin/bash: line 3: mounts: bad array subscript
mount: mounting /dev/vda on /mnt-root/ failed: Device or resource busy
<<< NixOS Stage 2 >>>
running activation script...
setting up /etc...
Initializing machine ID from random generator.
starting systemd...
Welcome to NixOS 18.09.2030.06808d4a140 (Jellyfish)!
[ OK ] Created slice system-getty.slice.
[ OK ] Reached target Remote File Systems.
[ OK ] Started Forward Password Requests to Wall Directory Watch.
[ OK ] Listening on udev Control Socket.
[ OK ] Created slice system-serial\x2dgetty.slice.
[ OK ] Created slice User and Session Slice.
[ OK ] Reached target Slices.
[ OK ] Listening on Journal Socket.
Mounting POSIX Message Queue File System...
Mounting Huge Pages File System...
Starting Remount Root and Kernel File Systems...
Mounting Kernel Debug File System...
Starting Create list of required st…ce nodes for the current kernel...
Starting Load Kernel Modules...
[ OK ] Listening on Journal Socket (/dev/log).
[ OK ] Started Dispatch Password Requests to Console Directory Watch.
[ OK ] Reached target Paths.
[ OK ] Reached target Swap.
[ OK ] Listening on udev Kernel Socket.
[ OK ] Listening on initctl Compatibility Named Pipe.
[ OK ] Reached target All Network Interfaces (deprecated).
Starting udev Coldplug all Devices...
[ OK ] Listening on Journal Audit Socket.
Starting Journal Service...
[ OK ] Mounted POSIX Message Queue File System.
[ OK ] Mounted Huge Pages File System.
[ OK ] Started Remount Root and Kernel File Systems.
[ OK ] Mounted Kernel Debug File System.
[ OK ] Started Create list of required sta…vice nodes for the current kernel.
[ OK ] Started Load Kernel Modules.
Starting Apply Kernel Variables...
Starting Create Static Device Nodes in /dev...
Starting Update UTMP about System Boot/Shutdown...
Starting Load/Save Random Seed...
[ OK ] Started Apply Kernel Variables.
[ OK ] Started Create Static Device Nodes in /dev.
[ OK ] Started Load/Save Random Seed.
Starting udev Kernel Device Manager...
[ OK ] Reached target Local File Systems (Pre).
[ OK ] Reached target Local File Systems.
Starting Rebuild Journal Catalog...
[ OK ] Started Update UTMP about System Boot/Shutdown.
[ OK ] Started Rebuild Journal Catalog.
Starting Update is Completed...
[ OK ] Started Update is Completed.
[ OK ] Started udev Kernel Device Manager.
Starting Networking Setup...
[ OK ] Started Journal Service.
Starting Flush Journal to Persistent Storage...
[ OK ] Started Flush Journal to Persistent Storage.
Starting Create Volatile Files and Directories...
[ OK ] Started udev Coldplug all Devices.
Starting udev Wait for Complete Device Initialization...
[ OK ] Started Create Volatile Files and Directories.
[ OK ] Started Networking Setup.
[ OK ] Started udev Wait for Complete Device Initialization.
[ OK ] Reached target System Initialization.
[ OK ] Listening on Nix Daemon Socket.
[ OK ] Started Daily Cleanup of Temporary Directories.
[ OK ] Reached target Timers.
[ OK ] Listening on D-Bus System Message Bus Socket.
[ OK ] Reached target Sockets.
[ OK ] Reached target Basic System.
Starting Name Service Cache Daemon...
Starting Extra networking commands....
[ OK ] Started serial-getty@ttyS0.service.
Starting Kernel Auditing...
Starting DHCP Client...
[ OK ] Started Extra networking commands..
[ OK ] Started Kernel Auditing.
[ OK ] Started D-Bus System Message Bus.
[ OK ] Listening on Load/Save RF Kill Switch Status /dev/rfkill Watch.
[ OK ] Started Name Service Cache Daemon.
[ OK ] Reached target Host and Network Name Lookups.
[ OK ] Reached target User and Group Name Lookups.
Starting Login Service...
[ OK ] Started Login Service.
Stopping Name Service Cache Daemon...
[ OK ] Stopped Name Service Cache Daemon.
Starting Name Service Cache Daemon...
[ OK ] Started Name Service Cache Daemon.
[ OK ] Started DHCP Client.
[ OK ] Reached target Network.
[ OK ] Reached target Network is Online.
Starting Permit User Sessions...
[ OK ] Started Permit User Sessions.
[ OK ] Started Getty on tty1.
[ OK ] Reached target Login Prompts.
[ OK ] Reached target Multi-User System.
<<< Welcome to NixOS 18.09.2030.06808d4a140 (x86_64) - ttyS0 >>>
Run `nixos-help` for the NixOS manual.
Log in as "root" with an empty password.
nixos login: root
[root@nixos:~/nix/vms]# ls -l
total 26124
-rw-r--r-- 1 root root 26804224 Jan 29 11:58 nixos.qcow2
-rw-r--r-- 1 root root 3 Jan 29 11:57 vm.nix
[root@nixos:~/nix/vms]#
QEMU: Terminated