dot

NixOS dotfiles
git clone https://git.echoz.io/dot.git
Log | Files | Refs

pipewire.nix (4213B)


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