nixos-config/modules/pipewire.nix

70 lines
2.3 KiB
Nix

{ config, lib, modulesPath, pkgs, ... }:
let
bluetoothSupport = config.sbruder.full;
in
lib.mkIf config.sbruder.gui.enable {
sound.enable = true;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
pulse.enable = true;
alsa = {
enable = true;
support32Bit = true;
};
};
environment.systemPackages = with pkgs; [
unstable.helvum # patch panel
pavucontrol
pulseaudio # pacmd and pactl
];
hardware.bluetooth.enable = lib.mkDefault bluetoothSupport;
services.blueman.enable = lib.mkDefault bluetoothSupport;
environment.etc."pipewire/pipewire.conf.d/10-behringer-umc202hd.conf".text = ''
# This is heavily based on the example from the PipeWire wiki:
# https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Virtual-Devices#behringer-umc404hd-microphoneguitar-virtual-sources
# It has the problem that the virtual source persists,
# even when the physical source is disconnected.
context.modules = [
{ name = libpipewire-module-loopback
args = {
node.description = "UMC202HD Left"
capture.props = {
node.name = "capture.UMC202HD_Left"
audio.position = [ FL ]
stream.dont-remix = true
target.object = "alsa_input.usb-BEHRINGER_UMC202HD_192k_12345678-00.analog-stereo"
node.passive = true
}
playback.props = {
node.name = "UMC202HD_Left"
media.class = "Audio/Source"
audio.position = [ MONO ]
}
}
}
{ name = libpipewire-module-loopback
args = {
node.description = "UMC202HD Right"
capture.props = {
node.name = "capture.UMC202HD_Right"
audio.position = [ FR ]
stream.dont-remix = true
target.object = "alsa_input.usb-BEHRINGER_UMC202HD_192k_12345678-00.analog-stereo"
node.passive = true
}
playback.props = {
node.name = "UMC202HD_Right"
media.class = "Audio/Source"
audio.position = [ MONO ]
}
}
}
]
'';
}