167 lines
No EOL
4.4 KiB
Nix
167 lines
No EOL
4.4 KiB
Nix
{ config, pkgs, lib, ... }:
|
|
with lib;
|
|
{
|
|
options = {
|
|
cpu.cores = mkOption {
|
|
type = types.int;
|
|
default = 2;
|
|
description = "Number of CPU cores.";
|
|
};
|
|
cpu.model = mkOption {
|
|
type = types.str;
|
|
default = "host";
|
|
description = "CPU model.";
|
|
};
|
|
kvm = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
description = "Enable KVM.";
|
|
};
|
|
arch = mkOption {
|
|
type = types.str;
|
|
default = "x86_64";
|
|
description = "Architecture of the VM.";
|
|
};
|
|
pc.type = mkOption {
|
|
type = types.str;
|
|
default = "q35";
|
|
description = "PC type.";
|
|
};
|
|
bios.efi = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
description = "Enable EFI BIOS.";
|
|
};
|
|
bios.tpm = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = "Enable TPM BIOS.";
|
|
};
|
|
mem.size = mkOption {
|
|
type = types.int;
|
|
default = 1024;
|
|
description = "Memory size in MB.";
|
|
};
|
|
mem.balloon = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = "Enable memory ballooning.";
|
|
};
|
|
disks.os.file = mkOption {
|
|
type = types.path;
|
|
description = "Path to the OS disk image.";
|
|
};
|
|
disks.os.persist = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = "Persist OS disk changes.";
|
|
};
|
|
disks.iso.file = mkOption {
|
|
type = types.nullOr types.path;
|
|
description = "Path to the ISO file.";
|
|
default = null;
|
|
};
|
|
disks.add = mkOption {
|
|
default = {};
|
|
type = types.attrsOf (types.submodule {
|
|
options = {
|
|
file = mkOption {
|
|
type = types.path;
|
|
description = "Path to the additional disk.";
|
|
};
|
|
mounts = mkOption {
|
|
type = types.attrsOf types.str;
|
|
description = "Mount points for the additional disk.";
|
|
};
|
|
opts = mkOption {
|
|
type = types.str;
|
|
description = "additional options in QEMU args for this disk";
|
|
};
|
|
};
|
|
});
|
|
description = "Additional disks.";
|
|
};
|
|
shares = mkOption {
|
|
default = {};
|
|
type = types.attrsOf (types.submodule {
|
|
options = {
|
|
source = mkOption {
|
|
type = types.path;
|
|
description = "Source path for the shared directory.";
|
|
};
|
|
target = mkOption {
|
|
type = types.str;
|
|
description = "Target path inside the VM for the shared directory.";
|
|
};
|
|
};
|
|
});
|
|
description = "Shared directories.";
|
|
};
|
|
|
|
disks.bus = mkOption {
|
|
type = types.str;
|
|
default = "virtio";
|
|
description = "Bus type for the disks.";
|
|
};
|
|
boot.order = mkOption {
|
|
type = types.listOf types.str;
|
|
description = "Boot order.";
|
|
default = [ "os" "iso" ];
|
|
};
|
|
boot.menu = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = "Enable boot menu.";
|
|
};
|
|
|
|
network.user.enable = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = "enable qemu user networking";
|
|
};
|
|
|
|
network.vmix = mkOption {
|
|
default = {};
|
|
type = types.attrsOf (types.submodule {
|
|
options = {
|
|
lans = mkOption {
|
|
default = {};
|
|
type = types.attrsOf (types.submodule {
|
|
options = {
|
|
enable = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = "Enable the LAN interface.";
|
|
};
|
|
mac = mkOption {
|
|
type = types.str;
|
|
description = "MAC address for the LAN interface.";
|
|
};
|
|
};
|
|
});
|
|
description = "LAN interfaces.";
|
|
};
|
|
macvtaps = mkOption {
|
|
default = {};
|
|
type = types.attrsOf (types.submodule {
|
|
options = {
|
|
enable = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = "Enable the MACVTap interface.";
|
|
};
|
|
mac = mkOption {
|
|
type = types.nullOr types.str;
|
|
default = null;
|
|
description = "MAC address for the MACVTap interface.";
|
|
};
|
|
};
|
|
});
|
|
description = "MACVTap interfaces.";
|
|
};
|
|
};
|
|
});
|
|
description = "Network interfaces.";
|
|
};
|
|
};
|
|
} |