nixos: add virtualization module
This commit is contained in:
parent
e490c6be8e
commit
44d58268ac
6 changed files with 85 additions and 1 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
|
./virtualization.nix
|
||||||
./bat.nix
|
./bat.nix
|
||||||
./btop.nix
|
./btop.nix
|
||||||
./git.nix
|
./git.nix
|
||||||
|
|
|
||||||
19
modules/home/console/tools/virtualization.nix
Normal file
19
modules/home/console/tools/virtualization.nix
Normal 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"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -14,6 +14,7 @@ in {
|
||||||
./programs
|
./programs
|
||||||
./gaming
|
./gaming
|
||||||
./environment
|
./environment
|
||||||
|
./virtualization
|
||||||
];
|
];
|
||||||
|
|
||||||
home-manager.users.${admin.name} = mkIf admin.homeManager {
|
home-manager.users.${admin.name} = mkIf admin.homeManager {
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ in {
|
||||||
default = null;
|
default = null;
|
||||||
};
|
};
|
||||||
profiles = mkOption {
|
profiles = mkOption {
|
||||||
type = listOf (enum ["gaming" "communication" "productivity" "creative" "media"]);
|
type = listOf (enum ["gaming" "communication" "productivity" "creative" "media" "virtualization"]);
|
||||||
default = [];
|
default = [];
|
||||||
};
|
};
|
||||||
environment = mkOption {
|
environment = mkOption {
|
||||||
|
|
|
||||||
5
modules/nixos/workstation/virtualization/default.nix
Normal file
5
modules/nixos/workstation/virtualization/default.nix
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./virt-manager.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
58
modules/nixos/workstation/virtualization/virt-manager.nix
Normal file
58
modules/nixos/workstation/virtualization/virt-manager.nix
Normal 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];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue