2017-04-07 10:40:17 +01:00
|
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
|
|
|
|
with lib;
|
|
|
|
|
|
|
|
let
|
|
|
|
cfg = config.virtualisation.hypervGuest;
|
|
|
|
|
|
|
|
in {
|
|
|
|
options = {
|
|
|
|
virtualisation.hypervGuest = {
|
|
|
|
enable = mkEnableOption "Hyper-V Guest Support";
|
2018-09-28 15:10:03 +01:00
|
|
|
|
|
|
|
videoMode = mkOption {
|
|
|
|
type = types.str;
|
|
|
|
default = "1152x864";
|
|
|
|
example = "1024x768";
|
|
|
|
description = ''
|
|
|
|
Resolution at which to initialize the video adapter.
|
|
|
|
|
|
|
|
Supports screen resolution up to Full HD 1920x1080 with 32 bit color
|
|
|
|
on Windows Server 2012, and 1600x1200 with 16 bit color on Windows
|
|
|
|
Server 2008 R2 or earlier.
|
|
|
|
'';
|
|
|
|
};
|
2017-04-07 10:40:17 +01:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
config = mkIf cfg.enable {
|
2018-09-28 15:10:03 +01:00
|
|
|
boot = {
|
|
|
|
initrd.kernelModules = [
|
|
|
|
"hv_balloon" "hv_netvsc" "hv_storvsc" "hv_utils" "hv_vmbus"
|
|
|
|
];
|
|
|
|
|
|
|
|
kernelParams = [
|
|
|
|
"video=hyperv_fb:${cfg.videoMode}"
|
|
|
|
];
|
|
|
|
};
|
|
|
|
|
2017-04-07 10:40:17 +01:00
|
|
|
environment.systemPackages = [ config.boot.kernelPackages.hyperv-daemons.bin ];
|
|
|
|
|
|
|
|
security.rngd.enable = false;
|
|
|
|
|
2018-09-28 15:27:52 +01:00
|
|
|
# enable hotadding cpu/memory
|
2017-04-07 10:40:17 +01:00
|
|
|
services.udev.packages = lib.singleton (pkgs.writeTextFile {
|
2018-09-28 15:27:52 +01:00
|
|
|
name = "hyperv-cpu-and-memory-hotadd-udev-rules";
|
|
|
|
destination = "/etc/udev/rules.d/99-hyperv-cpu-and-memory-hotadd.rules";
|
2017-04-07 10:40:17 +01:00
|
|
|
text = ''
|
2018-09-28 15:27:52 +01:00
|
|
|
# Memory hotadd
|
|
|
|
SUBSYSTEM=="memory", ACTION=="add", DEVPATH=="/devices/system/memory/memory[0-9]*", TEST=="state", ATTR{state}="online"
|
|
|
|
|
|
|
|
# CPU hotadd
|
|
|
|
SUBSYSTEM=="cpu", ACTION=="add", DEVPATH=="/devices/system/cpu/cpu[0-9]*", TEST=="online", ATTR{online}="1"
|
2017-04-07 10:40:17 +01:00
|
|
|
'';
|
|
|
|
});
|
|
|
|
|
|
|
|
systemd = {
|
|
|
|
packages = [ config.boot.kernelPackages.hyperv-daemons.lib ];
|
|
|
|
|
|
|
|
targets.hyperv-daemons = {
|
|
|
|
wantedBy = [ "multi-user.target" ];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|