dot

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

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 }