|
| 1 | +{ lib, config, pkgs, ... }: |
| 2 | +# ./run-vm.sh -I nixos-config=./test-vm.nix |
| 3 | +let |
| 4 | + home = builtins.getEnv "HOME"; |
| 5 | + user = builtins.getEnv "USER"; |
| 6 | + pwd = builtins.getEnv "PWD"; |
| 7 | + shell = builtins.getEnv "QEMU_SHELL"; |
| 8 | + path = builtins.getEnv "QEMU_PATH"; |
| 9 | + nixos_config = builtins.getEnv "QEMU_NIXOS_CONFIG"; |
| 10 | + term = builtins.getEnv "TERM"; |
| 11 | +in { |
| 12 | + users.extraUsers.root = { |
| 13 | + # Allow the user to login as root without password. |
| 14 | + initialHashedPassword = ""; |
| 15 | + shell = pkgs.${shell} or pkgs.bashInteractive; |
| 16 | + home = lib.mkVMOverride (if home != "" then home else "/root"); |
| 17 | + }; |
| 18 | + services.mingetty.helpLine = '' |
| 19 | + Log in as "root" with an empty password. |
| 20 | + ''; |
| 21 | + |
| 22 | + # build-vm overrides our filesystem settings in nixos-config |
| 23 | + # cache=loose -> bad idea? Well, at least it is fast!1!! |
| 24 | + boot.initrd.postMountCommands = '' |
| 25 | + mkdir -p $targetRoot/home |
| 26 | + mount -t 9p home $targetRoot/home -o trans=virtio,version=9p2000.L,cache=loose |
| 27 | + ${lib.optionalString (user != "") '' |
| 28 | + mkdir -p $targetRoot/nix/var/nix/profiles/per-user/${user}/profile/ |
| 29 | + mount -t 9p nixprofile $targetRoot/nix/var/nix/profiles/per-user/${user}/profile/ -o trans=virtio,version=9p2000.L,cache=loose |
| 30 | + ''} |
| 31 | + ''; |
| 32 | + environment.loginShellInit = '' |
| 33 | + # fix terminal size |
| 34 | + eval "$(${pkgs.xterm}/bin/resize)" |
| 35 | +
|
| 36 | + ${lib.optionalString (pwd != "") "cd '${pwd}' 2>/dev/null"} |
| 37 | + ${lib.optionalString (term != "") "export TERM='${term}'"} |
| 38 | + ${lib.optionalString (path != "") "export PATH=${path}:$PATH"} |
| 39 | + ''; |
| 40 | + |
| 41 | + systemd.services."serial-getty@ttyS0".enable = true; |
| 42 | + networking.firewall.enable = false; |
| 43 | + |
| 44 | + imports = lib.optional (nixos_config != "") nixos_config; |
| 45 | +} |
0 commit comments