From dff5e2cb5ea133840237e5cf6a4dbbb5fe17d114 Mon Sep 17 00:00:00 2001 From: Maaz Khokhar Date: Sun, 5 Jul 2026 21:50:21 -0500 Subject: [PATCH] qemu options --- modules/virtualization/default.nix | 2 +- modules/virtualization/options.nix | 29 ++++++++++++++++ modules/virtualization/qemu.nix | 55 ++++++++++++++++++------------ 3 files changed, 64 insertions(+), 22 deletions(-) diff --git a/modules/virtualization/default.nix b/modules/virtualization/default.nix index a29a57b..cdc829c 100644 --- a/modules/virtualization/default.nix +++ b/modules/virtualization/default.nix @@ -3,6 +3,6 @@ imports = [ ./podman.nix ./qemu.nix - ./lima.nix + ./options.nix ]; } diff --git a/modules/virtualization/options.nix b/modules/virtualization/options.nix index e6463fc..8b436e1 100644 --- a/modules/virtualization/options.nix +++ b/modules/virtualization/options.nix @@ -24,5 +24,34 @@ in default = false; }; }; + + # qemu + qemu = { + enable = lib.mkEnableOption "QEMU support"; + + containers = lib.mkEnableOption "Enable container support for QEMU" { + enable = true; + default = false; + }; + + spiceUSBRedirection = lib.mkEnableOption "Enable spice USB redirection support for QEMU" { + enable = true; + default = false; + }; + + virtManager = lib.mkEnableOption "Enable virt-manager support for QEMU" { + enable = true; + default = false; + }; + + bootModules = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ + "kvm-intel" + "kvm-amd" + ]; + description = "The kernel modules to load for QEMU support."; + }; + }; }; } diff --git a/modules/virtualization/qemu.nix b/modules/virtualization/qemu.nix index 6599409..17b755d 100644 --- a/modules/virtualization/qemu.nix +++ b/modules/virtualization/qemu.nix @@ -1,28 +1,41 @@ -{ pkgs, ... }: - { - virtualisation.spiceUSBRedirection.enable = true; - - virtualisation = { - containers.enable = true; - libvirtd = { - enable = true; - qemu = { - package = pkgs.qemu_kvm; - swtpm.enable = true; + config, + lib, + pkgs, + ... +}: +let + cfg = config.homelab.virtualization; +in +{ + config = lib.mkMerge [ + (lib.mkIf cfg.qemu.enable { + virtualisation = { + containers.enable = true; + libvirtd = { + enable = true; + qemu = { + package = pkgs.qemu_kvm; + swtpm.enable = true; + }; + }; }; - }; - }; + users.users.${cfg.user}.extraGroups = [ + "libvirtd" + "kvm" + ]; + }) - programs.virt-manager.enable = true; + (lib.mkIf cfg.qemu.spiceUSBRedirection { + virtualisation.spiceUSBRedirection.enable = true; + }) - users.users.river.extraGroups = [ - "libvirtd" - "kvm" - ]; + (lib.mkIf cfg.qemu.virtManager { + programs.virt-manager.enable = true; + }) - boot.kernelModules = [ - "kvm-intel" - "kvm-amd" + (lib.mkIf cfg.qemu.bootModules { + boot.kernelModules = cfg.qemu.bootModules; + }) ]; }