Rebase to flake parts #6

This commit is contained in:
2026-05-08 19:05:10 -03:00
parent d51f41566c
commit 1015cf4577
18 changed files with 934 additions and 35 deletions
+98
View File
@@ -0,0 +1,98 @@
{ ... }: {
flake.nixosModules.systemAudio =
{ config, lib, ... }:
let
cfg = config.chiasson.system.audio;
in
{
options.chiasson.system.audio = {
enable = lib.mkEnableOption ''
PipeWire (ALSA + Pulse), RTKit, optional WirePlumber tweak to kill idle suspend pop on devices.
'';
rtkit.enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable `security.rtkit.enable` (recommended with PipeWire).";
};
pipewire = {
alsa = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = "PipeWire ALSA support.";
};
support32Bit = lib.mkOption {
type = lib.types.bool;
default = true;
description = "32-bit ALSA support on x86_64.";
};
};
pulse.enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = "PipeWire PulseAudio compatibility (`pulseaudio` clients).";
};
jack.enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = "PipeWire JACK support (e.g. pro-audio / low-latency apps).";
};
};
preventIdleSuspend = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
WirePlumber + clock hints so ALSA nodes do not sleep (~0.5s glitch on resume otherwise).
'';
};
};
config = lib.mkIf cfg.enable (lib.mkMerge [
{
services.pulseaudio.enable = false;
security.rtkit.enable = cfg.rtkit.enable;
services.pipewire = lib.mkMerge [
{
enable = true;
alsa.enable = cfg.pipewire.alsa.enable;
alsa.support32Bit = cfg.pipewire.alsa.support32Bit;
pulse.enable = cfg.pipewire.pulse.enable;
}
(lib.mkIf cfg.pipewire.jack.enable {
jack.enable = true;
})
(lib.mkIf cfg.preventIdleSuspend {
extraConfig.pipewire = {
"context.properties" = {
"default.clock.quantum" = 1024;
"default.clock.min-quantum" = 32;
"default.clock.max-quantum" = 8192;
};
};
})
];
}
(lib.mkIf cfg.preventIdleSuspend {
environment.etc."wireplumber/wireplumber.conf.d/99-prevent-suspend.conf".text = ''
monitor.alsa.rules = [
{
matches = [
{ node.name = "~alsa_output.*" }
{ node.name = "~alsa_input.*" }
]
actions = {
update-props = {
session.suspend-timeout-seconds = 0
}
}
}
]
'';
})
]);
};
}