diff --git a/hosts/endurance/default.nix b/hosts/endurance/default.nix index 2dafd65..f76bd9e 100644 --- a/hosts/endurance/default.nix +++ b/hosts/endurance/default.nix @@ -198,6 +198,31 @@ # systemd.packages = [pkgs.lact]; # systemd.services.lactd.wantedBy = ["multi-user.target"]; + # Blue Yeti (046d:0ab7) initializes its audio endpoints in a broken state on cold boot + # because snd-usb-audio loads ~2s after the device enumerates. Toggling authorized + # forces a USB rebind on a clean device, mimicking unplug/replug. + systemd.services.blue-yeti-reset = { + description = "Reset Blue Yeti USB mic to fix cold-boot initialization"; + after = ["systemd-udev-settle.service"]; + wantedBy = ["multi-user.target"]; + serviceConfig = { + Type = "oneshot"; + ExecStart = pkgs.writeShellScript "blue-yeti-reset" '' + for dev in /sys/bus/usb/devices/*/; do + [ -f "$dev/idVendor" ] || continue + vendor=$(cat "$dev/idVendor" 2>/dev/null) + product=$(cat "$dev/idProduct" 2>/dev/null) + if [ "$vendor" = "046d" ] && [ "$product" = "0ab7" ]; then + echo 0 > "$dev/authorized" + sleep 0.5 + echo 1 > "$dev/authorized" + break + fi + done + ''; + }; + }; + hardware = { amdgpu = { opencl.enable = true;