65 lines
1.8 KiB
Nix
65 lines
1.8 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
flakeArgs,
|
|
...
|
|
}: let
|
|
inherit (flakeArgs) inputs;
|
|
inherit (lib) optionals mkEnableOption mkIf mkDefault;
|
|
cfg = config.nixfiles.hardware.sound;
|
|
in {
|
|
# Enable sound.
|
|
# sound.enable = true;
|
|
# hardware.pulseaudio.enable = true;
|
|
|
|
options.nixfiles.hardware.sound = {
|
|
enable = mkEnableOption "sound configuration";
|
|
useUnstableUcmConf = lib.mkOption {
|
|
description = "Whether to enable unstable alsa-ucm-conf. This seems to cause a mass rebuild and requires a lot of packages to be built from source, so it should only be used if necessary.";
|
|
default = false;
|
|
example = true;
|
|
type = lib.types.bool;
|
|
};
|
|
};
|
|
|
|
config = lib.mkMerge [
|
|
(mkIf cfg.enable {
|
|
security.rtkit.enable = mkDefault true;
|
|
services.pipewire = {
|
|
enable = true;
|
|
alsa.enable = mkDefault true;
|
|
alsa.support32Bit = mkDefault config.services.pipewire.alsa.enable;
|
|
pulse.enable = mkDefault true;
|
|
jack.enable = mkDefault true;
|
|
extraConfig.pipewire = {
|
|
# this should fix the extreme audio crackling in WINE
|
|
# note: this increases audio latency to 960/48000 (20ms)
|
|
"10-clock-config" = {
|
|
"context.properties" = {
|
|
"default.clock.min-quantum" = 960;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
environment.systemPackages = with pkgs;
|
|
[
|
|
qpwgraph
|
|
easyeffects
|
|
]
|
|
++ optionals config.services.pipewire.pulse.enable [
|
|
pavucontrol
|
|
ncpamixer
|
|
pulsemixer
|
|
];
|
|
})
|
|
{
|
|
# use alsa-ucm-conf from unstable (fixes Scarlett Solo channels)
|
|
nixpkgs.overlays = lib.optional cfg.useUnstableUcmConf (final: prev: {
|
|
inherit (inputs.nixpkgs-unstable.legacyPackages.${pkgs.system}) alsa-ucm-conf;
|
|
});
|
|
}
|
|
];
|
|
}
|