Newer
Older
{ config, lib, pkgs, ... }:
with lib;
let
pactl-bin = "${pkgs.pulseaudio}/bin/pactl";
in
{
sound.enable = true;
hardware.pulseaudio = {
enable = true;
systemWide = true;
daemon.config = {
"remixing-produce-lfe" = "yes";
"remixing-consume-lfe" = "yes";
};
tcp = mkIf config.queezle.qnet.enable {
enable = true;
# TODO get ip range from config
anonymousClients.allowedIpRanges = ["10.0.0.0/24" "fd42:2a03:0099:ec13::/64"];
users.users.pulse = {
extraGroups = [ "bluetooth" ];
};
users.groups.bluetooth = {};
# Bluetooth SIM access profile
# Gives external devices (e.g. car radio) access to a SIM card (if available)
hardware.bluetooth.disabledPlugins = [ "sap" ];
# Open PulseAudio port to qnet
networking.firewall.interfaces.qnet = mkIf config.queezle.qnet.enable {
allowedTCPPorts = [ 4713 ];
};
environment.systemPackages = with pkgs; [
pulsemixer
];
# workaround for https://github.com/NixOS/nixpkgs/issues/114399
system.activationScripts.fix-pulse-permissions = ''
chmod 755 /run/pulse
'';
# Focusrite Scarlett 2i4
# Sample rate switching (e.g. when starting mumble) results in weird glitches; stereo profile can't be applied.
# It has to be manually configured instead.
services.udev.extraRules = ''
ENV{ID_VENDOR_ID}=="1235", ENV{ID_MODEL_ID}=="8200", ENV{PULSE_IGNORE}="1"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1235", ATTRS{idProduct}=="8200", TAG+="systemd", ENV{SYSTEMD_WANTS}="scarlett-2i4.service"
# Remove if above works
# SUBSYSTEM=="usb", ACTION=="add", ENV{ID_VENDOR_ID}=="1235", ENV{ID_MODEL_ID}=="8200", RUN+="${scarlett-bin}"
systemd.services.scarlett-2i4 = {
restartIfChanged = false;
after = [ "pulseaudio.service" ];
script = ''
${pactl-bin} load-module module-alsa-card device_id=USB card_name=scarlett card_properties=device.description=Scarlett sink_name=scarlett-sink source_name=scarlett-source format=s32le rate=48000 use_ucm=true
${pactl-bin} load-module module-remap-sink sink_name=scarlett-sink-stereo sink_properties=device.description=Scarlett_Stereo master=scarlett-sink channels=2 master_channel_map=left,right remix=no
${pactl-bin} set-default-sink scarlett-sink-stereo
${pactl-bin} set-default-source scarlett-source
'';
unitConfig = {
Description = "Add Focusrite Scarlett 2i4 to PulseAudio";
};
serviceConfig = {
Type = "simple";
User = "pulse";
};
};