mirror of https://github.com/materusPL/Nixerus.git
106 lines
2.5 KiB
Nix
106 lines
2.5 KiB
Nix
{ config, pkgs, lib, inputs, materusFlake, ... }:
|
|
let
|
|
startHook = ''
|
|
# Debugging
|
|
# exec 19>/home/materus/startlogfile
|
|
# BASH_XTRACEFD=19
|
|
# set -x
|
|
|
|
# exec 3>&1 4>&2
|
|
# trap 'exec 2>&4 1>&3' 0 1 2 3
|
|
# exec 1>/home/materus/startlogfile.out 2>&1
|
|
|
|
|
|
systemctl stop mountWin10Share.service
|
|
sleep 1s
|
|
|
|
echo ''$VIRSH_GPU_VIDEO > "/sys/bus/pci/devices/''${VIRSH_GPU_VIDEO}/driver/unbind"
|
|
echo ''$VIRSH_GPU_AUDIO > "/sys/bus/pci/devices/''${VIRSH_GPU_AUDIO}/driver/unbind"
|
|
|
|
sleep 1s
|
|
|
|
echo "8" > "/sys/bus/pci/devices/''${VIRSH_GPU_VIDEO}/resource0_resize"
|
|
echo "1" > "/sys/bus/pci/devices/''${VIRSH_GPU_VIDEO}/resource2_resize"
|
|
|
|
|
|
'';
|
|
stopHook = ''
|
|
|
|
# Debugging
|
|
# exec 19>/home/materus/stoplogfile
|
|
# BASH_XTRACEFD=19
|
|
# set -x
|
|
|
|
# exec 3>&1 4>&2
|
|
# trap 'exec 2>&4 1>&3' 0 1 2 3
|
|
# exec 1>/home/materus/stoplogfile.out 2>&1
|
|
|
|
|
|
|
|
|
|
echo ''$VIRSH_GPU_VIDEO > "/sys/bus/pci/devices/''${VIRSH_GPU_VIDEO}/driver/unbind"
|
|
echo ''$VIRSH_GPU_AUDIO > "/sys/bus/pci/devices/''${VIRSH_GPU_AUDIO}/driver/unbind"
|
|
|
|
|
|
sleep 1s
|
|
|
|
echo "15" > "/sys/bus/pci/devices/''${VIRSH_GPU_VIDEO}/resource0_resize"
|
|
echo "8" > "/sys/bus/pci/devices/''${VIRSH_GPU_VIDEO}/resource2_resize"
|
|
|
|
echo ''$VIRSH_GPU_VIDEO > /sys/bus/pci/drivers/amdgpu/bind
|
|
echo ''$VIRSH_GPU_AUDIO > /sys/bus/pci/drivers/snd_hda_intel/bind
|
|
|
|
|
|
systemctl start mountWin10Share.service
|
|
|
|
'';
|
|
in
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtualisation.libvirtd.hooks.qemu = {
|
|
"win10" = pkgs.writeShellScript "win10.sh" ''
|
|
VIRSH_GPU_VIDEO="0000:03:00.0"
|
|
VIRSH_GPU_AUDIO="0000:03:00.1"
|
|
VIRSH_USB1="0000:10:00.0"
|
|
|
|
if [ ''$1 = "win10" ]; then
|
|
if [ ''$2 = "prepare" ] && [ ''$3 = "begin" ]; then
|
|
${startHook}
|
|
fi
|
|
|
|
if [ ''$2 = "release" ] && [ ''$3 = "end" ]; then
|
|
${stopHook}
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
'';
|
|
};
|
|
|
|
systemd.services.mountWin10Share = {
|
|
wantedBy = [ "multi-user.target" ];
|
|
path = [ config.virtualisation.libvirtd.qemu.package pkgs.util-linux pkgs.kmod pkgs.coreutils ];
|
|
serviceConfig.Type = "oneshot";
|
|
serviceConfig.RemainAfterExit = true;
|
|
script = ''
|
|
modprobe nbd max_part=16
|
|
sleep 1
|
|
qemu-nbd -c /dev/nbd0 /materus/data/VM/data.qcow2 --cache=unsafe --discard=unmap
|
|
sleep 1
|
|
mount /dev/nbd0p1 /materus/data/Windows -o uid=1000,gid=100
|
|
'';
|
|
preStop = ''
|
|
umount /materus/data/Windows
|
|
qemu-nbd -d /dev/nbd0
|
|
'';
|
|
};
|
|
}
|