From 40cba6fd9be41e3298caa5d16c0a032757a0b934 Mon Sep 17 00:00:00 2001 From: Sleeyax Date: Sun, 19 May 2024 18:28:51 +0200 Subject: [PATCH] add vm host (closes #13) --- flake.nix | 5 +++++ hosts/vm/default.nix | 26 ++++++++++++++++++++++++ hosts/vm/hardware-configuration.nix | 31 +++++++++++++++++++++++++++++ install.sh | 6 ++++-- 4 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 hosts/vm/default.nix create mode 100644 hosts/vm/hardware-configuration.nix diff --git a/flake.nix b/flake.nix index 1fa040b..1e4fc90 100644 --- a/flake.nix +++ b/flake.nix @@ -60,6 +60,11 @@ modules = [ (import ./hosts/laptop) ]; specialArgs = { host="laptop"; inherit self inputs username ; }; }; + vm = nixpkgs.lib.nixosSystem { + inherit system; + modules = [ (import ./hosts/vm) ]; + specialArgs = { host="vm"; inherit self inputs username ; }; + }; }; }; } diff --git a/hosts/vm/default.nix b/hosts/vm/default.nix new file mode 100644 index 0000000..b7a1124 --- /dev/null +++ b/hosts/vm/default.nix @@ -0,0 +1,26 @@ +{ pkgs, config, lib, ... }: +{ + imports = [ + ./hardware-configuration.nix + ./../../modules/core + ]; + + # kvm/qemu doesn't use UEFI firmware mode by default. + # so we force-override the setting here + # and configure GRUB instead. + boot.loader.systemd-boot.enable = lib.mkForce false; + boot.loader.grub.enable = true; + boot.loader.grub.device = "/dev/vda"; + boot.loader.grub.useOSProber = false; + + # allow local remote access to make it easier to toy around with the system + services.openssh = { + enable = true; + ports = [22]; + settings = { + PasswordAuthentication = true; + AllowUsers = null; + PermitRootLogin = "yes"; + }; + }; +} diff --git a/hosts/vm/hardware-configuration.nix b/hosts/vm/hardware-configuration.nix new file mode 100644 index 0000000..7cd128a --- /dev/null +++ b/hosts/vm/hardware-configuration.nix @@ -0,0 +1,31 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/profiles/qemu-guest.nix") + ]; + + boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "sr_mod" "virtio_blk" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/631775ef-6851-4fe7-997f-189372f87437"; + fsType = "ext4"; + }; + + swapDevices = [ ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp1s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; +} diff --git a/install.sh b/install.sh index c2ce843..6340070 100755 --- a/install.sh +++ b/install.sh @@ -63,7 +63,7 @@ set_username() { } get_host() { - echo -en "Choose a ${GREEN}host${NORMAL}, either [${YELLOW}D${NORMAL}]esktop or [${YELLOW}L${NORMAL}]aptop: " + echo -en "Choose a ${GREEN}host${NORMAL} - [${YELLOW}D${NORMAL}]esktop, [${YELLOW}L${NORMAL}]aptop or [${YELLOW}V${NORMAL}]irtual machine: " read -n 1 -r echo @@ -71,8 +71,10 @@ get_host() { HOST='desktop' elif [[ $REPLY =~ ^[Ll]$ ]]; then HOST='laptop' + elif [[ $REPLY =~ ^[Vv]$ ]]; then + HOST='vm' else - echo "Invalid choice. Please select either 'D' for desktop or 'L' for laptop." + echo "Invalid choice. Please select 'D' for desktop, 'L' for laptop or 'V' for virtual machine." exit 1 fi