# Test nix-shell in vagrant VMs Set up a vagrant guest VM, and test the dev environment inside the guest. - Only tested on nixos host with _libvirt_ virtualization provider. - Assumes that the host has an SSH agent. The agent is used for SSH auth inside the guest. - Upon creation (`vagrant up`) a copy of this local repo is rsynced to the `/hyperplonk` directory in the guest. The tests are run against these files. To see changes made to the code on the host run `vagrant reload` to re-sync the source code from host to guest. ## Available vagrant boxes The following boxes are available: - `ubuntu`: `ubuntu20.04` + `nix` - `ubuntu_rustup`: `ubuntu20.04` + `nix` + `rustup` More OSes/VMs can be added in the `Vagrantfile`. Append name of box after vagrant command to apply to a single box only vagrant up ubuntu_rustup vagrant ssh ubuntu_rustup ## Usage Enable `libvrtd` on your host: [ubuntu](https://ubuntu.com/server/docs/virtualization-libvirt), [nixos](https://nixos.wiki/wiki/Libvirt). Make sure we are in the `libvirtd` group. Install `libvirt` vagrant plugin (not needed on nixos): vagrant plugin install vagrant-libvirt Activate nix-shell in this directory (or ensure vagrant is installed): nix-shell Start vm: vagrant up ubuntu There is a password prompt to add the insecure vagrant key to the agent. One can supply an empty password once or cancel the prompt each time one runs `vagrant ssh`. Run formatter, linter, tests inside a nix-shell environment inside the `ubuntu` guest: vagrant ssh ubuntu -- -t /vagrant/test-nix-shell-guest This runs the `test-nix-shell-guest` script in this directory inside the vagrant guest. Clean up with vagrant destroy ubuntu ## Notes - After editing the Vagrantfile, `vagrant reload` will apply the changes. - When making substantial changes or changing names of vagrant boxes I usually have more luck with running `vagrant destroy` with the previous `Vagrantfile` and then `vagrant up` again with the new `Vagrantfile`.