nixos: add virtualization module

This commit is contained in:
ooks-io 2024-11-10 23:06:27 +11:00
parent e490c6be8e
commit 44d58268ac
6 changed files with 85 additions and 1 deletions

View file

@ -1,5 +1,6 @@
{
imports = [
./virtualization.nix
./bat.nix
./btop.nix
./git.nix

View file

@ -0,0 +1,19 @@
{
lib,
osConfig,
...
}: let
inherit (lib) elem mkIf;
inherit (osConfig.ooknet.workstation) profiles;
in {
config = mkIf (elem "virtualization" profiles) {
# setup connections for virt-manager
# see <https://nixos.wiki/wiki/Virt-manager>
dconf.settings = {
"org/virt-manager/virt-manager/connections" = {
autoconnect = ["qemu:///system"];
uris = ["qemu:///system"];
};
};
};
}

View file

@ -14,6 +14,7 @@ in {
./programs
./gaming
./environment
./virtualization
];
home-manager.users.${admin.name} = mkIf admin.homeManager {

View file

@ -8,7 +8,7 @@ in {
default = null;
};
profiles = mkOption {
type = listOf (enum ["gaming" "communication" "productivity" "creative" "media"]);
type = listOf (enum ["gaming" "communication" "productivity" "creative" "media" "virtualization"]);
default = [];
};
environment = mkOption {

View file

@ -0,0 +1,5 @@
{
imports = [
./virt-manager.nix
];
}

View file

@ -0,0 +1,58 @@
{
config,
lib,
pkgs,
...
}: let
inherit (builtins) attrValues;
inherit (lib) mkIf elem;
inherit (config.ooknet.workstation) profiles;
in {
config = mkIf (elem "virtualization" profiles) {
environment.systemPackages = attrValues {
inherit
(pkgs)
virt-viewer
qemu_kvm
qemu
spice
spice-protocol
# for windows virtualization
win-virtio
win-spice
;
# virt-manager needs this
inherit (pkgs.gnome) adwaita-icon-theme;
};
# sets up dconf settins for qemu and add virt-manager to systemPackages
programs.virt-manager = {
enable = true;
package = pkgs.virt-manager;
};
virtualisation = {
# allow unprivileged users to pass usb devices to vm
spiceUSBRedirection.enable = true;
# our virtualization daemon
libvirtd = {
enable = true;
qemu = {
# by default this uses pkgs.qemu but since i do not need to emulate aarch64 currently i use
# qemu_kvm which only supports the hosts system architecture.
package = pkgs.qemu_kvm;
# for emulating TPM
swtpm.enable = true;
# UEFI secure boot
ovmf = {
enable = true;
packages = [pkgs.OVMFFull.fd];
};
};
};
};
};
}