materusPC: update settings, keep older linux-firmware

This commit is contained in:
Mateusz Słodkowicz 2023-07-03 21:52:23 +02:00
parent 377806748f
commit 7bea59425a
Signed by: materus
GPG Key ID: 28D140BCA60B4FD1
3 changed files with 123 additions and 171 deletions

View File

@ -3,10 +3,9 @@
#Kernel #Kernel
boot.kernelPackages = pkgs.linuxPackages_zen; boot.kernelPackages = pkgs.linuxPackages_zen;
boot.kernelParams = [ "nvme_core.default_ps_max_latency_us=0" "nvme_core.io_timeout=255" "nvme_core.max_retries=10" "nvme_core.shutdown_timeout=10" "amd_iommu=on" "iommu=pt" "pcie_acs_override=downstream,multifunction" ]; boot.kernelParams = [ "nvme_core.default_ps_max_latency_us=0" "nvme_core.io_timeout=255" "nvme_core.max_retries=10" "nvme_core.shutdown_timeout=10" "amd_iommu=on" "iommu=pt" "pcie_acs_override=downstream,multifunction" ];
boot.kernelModules = [ "nbd" "i2c_dev" "kvm_amd" "vfio-pci" "v4l2loopback" "kvmfr" ]; boot.kernelModules = [ "i2c_dev" "kvm_amd" "vfio-pci" "v4l2loopback" "kvmfr" ];
boot.extraModprobeConfig = '' boot.extraModprobeConfig = ''
options kvm_amd nested=1 options kvm_amd nested=1
options nbd max_part=16
''; '';
boot.kernel.sysctl = {"vm.max_map_count" = 1000000;}; boot.kernel.sysctl = {"vm.max_map_count" = 1000000;};

View File

@ -1,4 +1,11 @@
{ config, pkgs, lib, inputs, materusFlake, materusPkgs, ... }: { config, pkgs, lib, inputs, materusFlake, materusPkgs, ... }:
let
pkg = import (builtins.fetchTarball {
name = "nixos-23.05";
url = "https://github.com/nixos/nixpkgs/archive/4ecab3273592f27479a583fb6d975d4aba3486fe.tar.gz";
sha256 = "sha256:10wn0l08j9lgqcw8177nh2ljrnxdrpri7bp0g7nvrsn9rkawvlbf";
}) {system = pkgs.system;};
in
{ {
imports = imports =
[ [
@ -9,7 +16,7 @@
hardware.firmware = with pkgs; [ hardware.firmware = with pkgs; [
materusPkgs.amdgpu-pro-libs.firmware.vcn materusPkgs.amdgpu-pro-libs.firmware.vcn
materusPkgs.amdgpu-pro-libs.firmware materusPkgs.amdgpu-pro-libs.firmware
linux-firmware pkg.linux-firmware
alsa-firmware alsa-firmware
sof-firmware sof-firmware
]; ];

View File

@ -101,20 +101,12 @@ in
}; };
virtualisation.libvirtd = {
enable = true;
onBoot = "ignore";
onShutdown = "shutdown";
qemu.ovmf.enable = true;
qemu.ovmf.packages = [ pkgs.OVMFFull.fd ];
qemu.runAsRoot = true;
qemu.swtpm.enable = true;
};
users.users.materus = { users.users.materus = {
isNormalUser = true; isNormalUser = true;
extraGroups = [ "pipewire" "wheel" "networkmanager" "input" "kvm" "libvirt-qemu" "libvirt" "libvirtd" "podman" "lxd" ]; # Enable sudo for the user. extraGroups = [ "audio" "video" "render" "pipewire" "wheel" "networkmanager" "input" "kvm" "libvirt-qemu" "libvirt" "libvirtd" "podman" "lxd" ]; # Enable sudo for the user.
shell = pkgs.bashInteractive; shell = pkgs.bashInteractive;
description = "Mateusz Słodkowicz"; description = "Mateusz Słodkowicz";
# packages = with pkgs; [ # packages = with pkgs; [
@ -290,7 +282,7 @@ in
bubblewrap bubblewrap
bindfs bindfs
@ -318,200 +310,154 @@ in
]; ];
/*
system.activationScripts.libvirt-hooks.text = system.activationScripts.libvirt-hooks.text =
'' ''
ln -Tfs /etc/libvirt/hooks /var/lib/libvirt/hooks ln -Tfs /etc/libvirt/hooks /var/lib/libvirt/hooks
''; '';
environment.etc = { environment.etc = {
"libvirt/hooks/qemu" = {
text =
''
#!/usr/bin/env bash
#
# Author: Sebastiaan Meijer (sebastiaan@passthroughpo.st)
#
# Copy this file to /etc/libvirt/hooks, make sure it's called "qemu".
# After this file is installed, restart libvirt.
# From now on, you can easily add per-guest qemu hooks.
# Add your hooks in /etc/libvirt/hooks/qemu.d/vm_name/hook_name/state_name.
# For a list of available hooks, please refer to https://www.libvirt.org/hooks.html
#
GUEST_NAME="$1"
HOOK_NAME="$2"
STATE_NAME="$3"
MISC="''${@:4}"
BASEDIR="$(dirname $0)"
HOOKPATH="$BASEDIR/qemu.d/$GUEST_NAME/$HOOK_NAME/$STATE_NAME"
set -e # If a script exits with an error, we should as well.
# check if it's a non-empty executable file
if [ -f "$HOOKPATH" ] && [ -s "$HOOKPATH"] && [ -x "$HOOKPATH" ]; then
eval \"$HOOKPATH\" "$@"
elif [ -d "$HOOKPATH" ]; then
while read file; do
# check for null string
if [ ! -z "$file" ]; then
eval \"$file\" "$@"
fi
done <<< "$(find -L "$HOOKPATH" -maxdepth 1 -type f -executable -print;)"
fi
'';
mode = "0755";
};
"libvirt/hooks/kvm.conf" = {
text =
''
VIRSH_GPU_VIDEO=pci_0000_01_00_0
VIRSH_GPU_AUDIO=pci_0000_01_00_1
VIRSH_GPU_USB=pci_0000_01_00_2
VIRSH_GPU_SERIAL_BUS=pci_0000_01_00_3
'';
mode = "0755";
};
"libvirt/hooks/qemu.d/win11/prepare/begin/start.sh" = { "libvirt/hooks/qemu.d/win11/prepare/begin/start.sh" = {
text = text =
'' ''
#!/usr/bin/env bash #!/usr/bin/env bash
# Debugging # Debugging
exec 19>/home/materus/startlogfile exec 19>/home/materus/startlogfile
BASH_XTRACEFD=19 BASH_XTRACEFD=19
set -x set -x
exec 3>&1 4>&2 exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3 trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>/home/materus/startlogfile.out 2>&1 exec 1>/home/materus/startlogfile.out 2>&1
# Stop display manager # Stop display manager
killall -u materus killall -u materus
systemctl stop display-manager.service systemctl stop display-manager.service
killall gdm-x-session killall gdm-x-session
#systemctl isolate multi-user.target #systemctl isolate multi-user.target
sleep 1 sleep 1
# Load variables we defined # Load variables we defined
source "/etc/libvirt/hooks/kvm.conf" source "/etc/libvirt/hooks/kvm.conf"
# Isolate host to core 0 # Isolate host to core 0
systemctl set-property --runtime -- user.slice AllowedCPUs=0 systemctl set-property --runtime -- user.slice AllowedCPUs=0
systemctl set-property --runtime -- system.slice AllowedCPUs=0 systemctl set-property --runtime -- system.slice AllowedCPUs=0
systemctl set-property --runtime -- init.scope AllowedCPUs=0 systemctl set-property --runtime -- init.scope AllowedCPUs=0
# Unbind VTconsoles # Unbind VTconsoles
for (( i = 0; i < 16; i++)) for (( i = 0; i < 16; i++))
do do
if test -x /sys/class/vtconsole/vtcon"''${i}"; then if test -x /sys/class/vtconsole/vtcon"''${i}"; then
if [ "$(grep -c "frame buffer" /sys/class/vtconsole/vtcon"''${i}"/name)" = 1 ]; then if [ "$(grep -c "frame buffer" /sys/class/vtconsole/vtcon"''${i}"/name)" = 1 ]; then
echo 0 > /sys/class/vtconsole/vtcon"''${i}"/bind echo 0 > /sys/class/vtconsole/vtcon"''${i}"/bind
echo "$DATE Unbinding Console ''${i}" echo "$DATE Unbinding Console ''${i}"
fi fi
fi fi
done done
# Unbind EFI Framebuffer # Unbind EFI Framebuffer
echo "efi-framebuffer.0" > /sys/bus/platform/drivers/efi-framebuffer/unbind echo "efi-framebuffer.0" > /sys/bus/platform/drivers/efi-framebuffer/unbind
# Avoid race condition # Avoid race condition
sleep 1 sleep 1
# Unload NVIDIA kernel modules # Unload NVIDIA kernel modules
modprobe -r nvidia_uvm modprobe -r nvidia_uvm
modprobe -r nvidia_drm modprobe -r nvidia_drm
modprobe -r nvidia_modeset modprobe -r nvidia_modeset
modprobe -r nvidia modprobe -r nvidia
modprobe -r i2c_nvidia_gpu modprobe -r i2c_nvidia_gpu
modprobe -r drm_kms_helper modprobe -r drm_kms_helper
modprobe -r drm modprobe -r drm
# Detach GPU devices from host # Detach GPU devices from host
#virsh nodedev-detach $VIRSH_GPU_VIDEO #virsh nodedev-detach $VIRSH_GPU_VIDEO
#virsh nodedev-detach $VIRSH_GPU_AUDIO #virsh nodedev-detach $VIRSH_GPU_AUDIO
#virsh nodedev-detach $VIRSH_GPU_USB #virsh nodedev-detach $VIRSH_GPU_USB
#virsh nodedev-detach $VIRSH_GPU_SERIAL_BUS #virsh nodedev-detach $VIRSH_GPU_SERIAL_BUS
# Load vfio module # Load vfio module
modprobe vfio modprobe vfio
modprobe vfio_pci modprobe vfio_pci
modprobe vfio_iommu_type1 modprobe vfio_iommu_type1
''; '';
mode = "0755"; mode = "0755";
}; };
"libvirt/hooks/qemu.d/win11/release/end/stop.sh" = { "libvirt/hooks/qemu.d/win11/release/end/stop.sh" = {
text = text =
'' ''
#!/usr/bin/env bash #!/usr/bin/env bash
# Debugging # Debugging
exec 19>/home/materus/stoplogfile exec 19>/home/materus/stoplogfile
BASH_XTRACEFD=19 BASH_XTRACEFD=19
set -x set -x
exec 3>&1 4>&2 exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3 trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>/home/materus/stoplogfile.out 2>&1 exec 1>/home/materus/stoplogfile.out 2>&1
# Load variables we defined # Load variables we defined
source "/etc/libvirt/hooks/kvm.conf" source "/etc/libvirt/hooks/kvm.conf"
# Unload vfio module # Unload vfio module
modprobe -r vfio-pci modprobe -r vfio-pci
modprobe -r vfio_iommu_type1 modprobe -r vfio_iommu_type1
modprobe -r vfio modprobe -r vfio
modprobe drm modprobe drm
modprobe drm_kms_helper modprobe drm_kms_helper
modprobe i2c_nvidia_gpu modprobe i2c_nvidia_gpu
modprobe nvidia modprobe nvidia
modprobe nvidia_modeset modprobe nvidia_modeset
modprobe nvidia_drm modprobe nvidia_drm
modprobe nvidia_uvm modprobe nvidia_uvm
# Attach GPU devices from host # Attach GPU devices from host
#virsh nodedev-reattach $VIRSH_GPU_VIDEO #virsh nodedev-reattach $VIRSH_GPU_VIDEO
#virsh nodedev-reattach $VIRSH_GPU_AUDIO #virsh nodedev-reattach $VIRSH_GPU_AUDIO
#virsh nodedev-reattach $VIRSH_GPU_USB #virsh nodedev-reattach $VIRSH_GPU_USB
#virsh nodedev-reattach $VIRSH_GPU_SERIAL_BUS #virsh nodedev-reattach $VIRSH_GPU_SERIAL_BUS
#echo "0000:01:00.0" > /sys/bus/pci/drivers/nvidia/bind #echo "0000:01:00.0" > /sys/bus/pci/drivers/nvidia/bind
# Bind EFI Framebuffer # Bind EFI Framebuffer
echo "efi-framebuffer.0" > /sys/bus/platform/drivers/efi-framebuffer/bind echo "efi-framebuffer.0" > /sys/bus/platform/drivers/efi-framebuffer/bind
# Bind VTconsoles # Bind VTconsoles
echo 1 > /sys/class/vtconsole/vtcon0/bind echo 1 > /sys/class/vtconsole/vtcon0/bind
#echo 1 > /sys/class/vtconsole/vtcon1/bind #echo 1 > /sys/class/vtconsole/vtcon1/bind
# Start display manager # Start display manager
sleep 1 sleep 1
systemctl start display-manager.service systemctl start display-manager.service
# Return host to all cores # Return host to all cores
systemctl set-property --runtime -- user.slice AllowedCPUs=0-3 systemctl set-property --runtime -- user.slice AllowedCPUs=0-3
systemctl set-property --runtime -- system.slice AllowedCPUs=0-3 systemctl set-property --runtime -- system.slice AllowedCPUs=0-3
systemctl set-property --runtime -- init.scope AllowedCPUs=0-3 systemctl set-property --runtime -- init.scope AllowedCPUs=0-3
''; '';
/*text = '' /*text = ''
#!/usr/bin/env bash #!/usr/bin/env bash
reboot reboot
'';*-/ '';*-/
mode = "0755"; mode = "0755";
};
"libvirt/vgabios/patched.rom".source = ./vbios.rom;
}; */
}; };
"libvirt/vgabios/patched.rom".source = ./vbios.rom; };
}; */
} }