{ config, lib, pkgs, modulesPath, ... }: let thunderboltDevices = '' THUNDERBOLT_DEVICES="$(${pkgs.pciutils}/bin/lspci -D | ${pkgs.gnugrep}/bin/grep -i thunderbolt | cut --delimiter=' ' --fields=1)" ''; forceThunderboltOnScript = pkgs.writeScriptBin "force-thunderbolt-power-on" '' #!${pkgs.stdenv.shell} ${thunderboltDevices} echo "Force PCI power on all thunderbolt devices" for DEVICE in $THUNDERBOLT_DEVICES; do echo 'on' > "/sys/bus/pci/devices/$DEVICE/power/control" done ''; thunderboltDockRestart = pkgs.writeScriptBin "thunderbolt-dock-restart" '' #!${pkgs.stdenv.shell} ${thunderboltDevices} echo "Force PCI remove on all thunderbolt devices" for DEVICE in $THUNDERBOLT_DEVICES; do echo 1 > /sys/bus/pci/devices/0000\:$DEVICE/remove echo "Dropped device $DEVICE" done echo 'Please re-plug the dock and press enter to continue [enter]' read echo 'Rescanning PCI devices...' echo 1 > /sys/bus/pci/rescan echo 'Done.' ''; in { imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; boot.initrd.availableKernelModules = [ "nvme" "usbhid" "usb_storage" "sd_mod" "xhci_pci" "ahci" "virtio-pci" "igb" ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-amd" "uhid" ]; boot.extraModulePackages = [ ]; boot.kernelParams = [ "acpi_enforce_resources=lax" ]; environment.systemPackages = [ thunderboltDockRestart ]; hardware.cpu.amd.updateMicrocode = true; nix.settings.max-jobs = lib.mkDefault 24; powerManagement.powerUpCommands = "${forceThunderboltOnScript}/bin/force-thunderbolt-power-on"; }