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