From 2073876eaf8b15c15a84265f0a8152c710100079 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20M=C3=BChl?= Date: Wed, 18 Feb 2026 01:50:47 +0100 Subject: [PATCH] Add Blue Yeti USB reset service for cold-boot fix The Blue Yeti mic initializes audio endpoints in a broken state on cold boot because snd-usb-audio loads after device enumeration. This systemd service toggles USB authorization to force a clean rebind. Co-Authored-By: Claude Opus 4.6 --- hosts/endurance/default.nix | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) 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;