pipewire.nix (4596B)
1 { 2 lib, 3 ... 4 }: 5 { 6 services.pipewire.extraConfig.pipewire.default = { 7 "context.properties" = { 8 "default.clock.rate" = 44100; 9 "default.clock.allowed-rates" = [ 44100 ]; 10 }; 11 }; 12 13 services.pipewire.extraConfig.pipewire."60-loopbacks"."context.modules" = [ 14 { 15 name = "libpipewire-module-loopback"; 16 args = { 17 "audio.position" = [ 18 "FL" 19 "FR" 20 ]; 21 "capture.props" = { 22 "media.class" = "Audio/Sink"; 23 "node.name" = "capture.master"; 24 "node.description" = "Master"; 25 "node.latency" = "1024/44100"; 26 "audio.rate" = 44100; 27 "audio.channels" = 2; 28 "audio.position" = [ 29 "FL" 30 "FR" 31 ]; 32 "priority.session" = 6000; 33 "priority.driver" = 6000; 34 }; 35 "playback.props" = { 36 "node.name" = "playback.master"; 37 "node.description" = "Master"; 38 "node.latency" = "1024/44100"; 39 "audio.rate" = 44100; 40 "audio.channels" = 2; 41 "audio.position" = [ 42 "AUX0" 43 "AUX1" 44 ]; 45 "target.object" = "alsa_output.usb-DENON_DJ_DENON_DJ_MC7000_201603-00.pro-output-0"; 46 }; 47 }; 48 } 49 { 50 name = "libpipewire-module-loopback"; 51 args = { 52 "audio.position" = [ 53 "FL" 54 "FR" 55 ]; 56 "capture.props" = { 57 "media.class" = "Audio/Sink"; 58 "node.name" = "capture.headphones"; 59 "node.description" = "Headphones"; 60 "node.latency" = "1024/44100"; 61 "audio.rate" = 44100; 62 "audio.channels" = 2; 63 "audio.position" = [ 64 "FL" 65 "FR" 66 ]; 67 "priority.session" = 7000; 68 "priority.driver" = 7000; 69 }; 70 "playback.props" = { 71 "node.name" = "playback.headphones"; 72 "node.description" = "Headphones"; 73 "node.latency" = "1024/44100"; 74 "audio.rate" = 44100; 75 "audio.channels" = 2; 76 "audio.position" = [ 77 "AUX2" 78 "AUX3" 79 ]; 80 "target.object" = "alsa_output.usb-DENON_DJ_DENON_DJ_MC7000_201603-00.pro-output-0"; 81 }; 82 }; 83 } 84 ]; 85 86 services.pipewire.wireplumber.extraConfig = { 87 general = { 88 "wireplumber.settings" = { 89 "device.restore-profile" = false; 90 "device.restore-routes" = false; 91 "device.routes.default-sink-volume" = 1.0; 92 "device.routes.default-source-volume" = 1.0; 93 }; 94 95 "wireplumber.profiles".main = { 96 "hooks.device.profile.state" = "disabled"; 97 "hooks.device.routes.state" = "disabled"; 98 "hooks.default-nodes.state" = "disabled"; 99 "hooks.stream.state" = "disabled"; 100 }; 101 }; 102 103 devices."monitor.alsa.rules" = [ 104 { 105 matches = lib.singleton { 106 "device.description" = "DENON DJ MC7000"; 107 }; 108 actions.update-props = { 109 "device.profile" = "pro-audio"; 110 }; 111 } 112 { 113 matches = lib.singleton { 114 "alsa.card_name" = "Xonar STX"; 115 "media.class" = "Audio/Sink"; 116 }; 117 actions.update-props = { 118 "node.description" = "Desktop"; 119 "node.nick" = "Desktop"; 120 "priority.session" = 8000; 121 "priority.driver" = 8000; 122 }; 123 } 124 125 { 126 matches = lib.singleton { 127 "alsa.card_name" = "Xonar STX"; 128 "media.class" = "Audio/Source"; 129 }; 130 actions.update-props."node.disabled" = true; 131 } 132 { 133 matches = lib.singleton { 134 "alsa.card_name" = "RODE NT-USB"; 135 "media.class" = "Audio/Source"; 136 }; 137 actions.update-props = { 138 "node.description" = "Voice"; 139 "node.nick" = "Voice"; 140 "priority.session" = 9000; 141 "priority.driver" = 9000; 142 }; 143 } 144 { 145 matches = lib.singleton { 146 "alsa.card_name" = "RODE NT-USB"; 147 "media.class" = "Audio/Sink"; 148 }; 149 actions.update-props."node.disabled" = true; 150 } 151 { 152 matches = lib.singleton { 153 "alsa.card_name" = "HDA ATI HDMI"; 154 }; 155 actions.update-props."node.disabled" = true; 156 } 157 { 158 matches = lib.singleton { 159 "alsa.card_name" = "HD 720P webcam"; 160 }; 161 actions.update-props."node.disabled" = true; 162 } 163 { 164 matches = lib.singleton { 165 "alsa.card_name" = "HD-Audio Generic"; 166 }; 167 actions.update-props."node.disabled" = true; 168 } 169 ]; 170 }; 171 172 }