nix-conf/modules/hardware/audio/default.nix
2023-03-11 11:07:20 +01:00

75 lines
2.3 KiB
Nix

{ options, config, pkgs, lib, ... }:
with lib;
#with lib.internal;
let cfg = config.custom.hardware.audio;
in
{
options.custom.hardware.audio = with types; {
enable = mkBoolOpt false "Whether or not to enable audio support.";
alsa-monitor = mkOpt attrs { } "Alsa configuration.";
nodes = mkOpt (listOf attrs) [ ]
"Audio nodes to pass to Pipewire as `context.objects`.";
modules = mkOpt (listOf attrs) [ ]
"Audio modules to pass to Pipewire as `context.modules`.";
extra-packages = mkOpt (listOf package) [
pkgs.qjackctl
pkgs.easyeffects
] "Additional packages to install.";
};
config = mkIf cfg.enable {
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa = {
enable = true;
support32Bit = true;
};
pulse.enable = true;
jack.enable = true;
wireplumber.enable = true;
#media-session.enable = true;
#media-session.config.alsa-monitor = mkAliasDefinitions options.custom.hardware.audio.alsa-monitor;
#config.pipewire = {
# "context.objects" = cfg.nodes ++ [ ];
# "context.modules" = [
# {
# name = "libpipewire-module-rtkit";
# args = { };
# flags = [ "ifexists" "nofail" ];
# }
# { name = "libpipewire-module-protocol-native"; }
# { name = "libpipewire-module-profiler"; }
# { name = "libpipewire-module-metadata"; }
# { name = "libpipewire-module-spa-device-factory"; }
# { name = "libpipewire-module-spa-node-factory"; }
# { name = "libpipewire-module-client-node"; }
# { name = "libpipewire-module-client-device"; }
# {
# name = "libpipewire-module-portal";
# flags = [ "ifexists" "nofail" ];
# }
# {
# name = "libpipewire-module-access";
# args = { };
# }
# { name = "libpipewire-module-adapter"; }
# { name = "libpipewire-module-link-factory"; }
# { name = "libpipewire-module-session-manager"; }
# ] ++ cfg.modules;
# };
};
hardware.pulseaudio.enable = mkForce false;
environment.systemPackages = with pkgs; [
pulsemixer
pavucontrol
] ++ cfg.extra-packages;
};
}