nixfiles/nixos/profiles/graphical/sound.nix

85 lines
2.4 KiB
Nix

{pkgs, ...}: let
bitrate_int = 48 * 1000;
bitrate = toString bitrate_int;
ll_quant_int = 512;
ll_quant = toString ll_quant_int;
ml_quant_int = 1024;
ml_quant = toString hl_quant_int;
hl_quant_int = 2048;
hl_quant = toString hl_quant_int;
minQuant = "${ll_quant}/${bitrate}";
midQuant = "${ml_quant}/${bitrate}";
maxQuant = "${hl_quant}/${bitrate}";
in {
environment.systemPackages = with pkgs; [pulsemixer pwvucontrol easyeffects];
services = {
pulseaudio.enable = false;
pipewire = {
enable = true;
pulse.enable = true;
alsa.support32Bit = true;
jack.enable = true;
alsa.enable = true;
extraConfig = {
pipewire."92-low-latency" = {
"context.properties" = {
"default.clock.rate" = bitrate_int;
"default.clock.quantum" = ml_quant_int;
"default.clock.min-quantum" = ll_quant_int;
"default.clock.max-quantum" = hl_quant_int;
};
"context.modules" = [
{
name = "libpipewire-module-rt";
flags = [
"ifexists"
"nofail"
];
args = {
"nice.level" = -15;
"rt.prio" = 88;
"rt.time.soft" = 200000;
"rt.time.hard" = 200000;
};
}
];
};
pipewire-pulse = {
"91-discord-latency" = {
pulse.rules = [
{
matches = [{"application.process.binary" = "Discord";}];
actions = {
update-props = {
"pulse.min.quantum" = midQuant;
};
};
}
];
};
"92-low-latency" = {
"context.properties" = [
{
name = "libpipewire-module-protocol-pulse";
args = {};
}
];
"pulse.properties" = {
"pulse.min.req" = minQuant;
"pulse.default.req" = midQuant;
"pulse.max.req" = maxQuant;
"pulse.min.quantum" = minQuant;
"pulse.max.quantum" = maxQuant;
};
"stream.properties" = {
"node.latency" = minQuant;
"resample.quality" = 1;
};
};
};
};
};
};
security.rtkit.enable = true;
}