All checks were successful
Check flake / build-amd64-linux (push) Successful in 2m53s
107 lines
2.9 KiB
Nix
107 lines
2.9 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
let
|
|
cfg = config.modules.hardware.presonus-studio;
|
|
snd-usb-audio-module = pkgs.callPackage ./snd-usb-audio.nix {
|
|
kernel = config.boot.kernelPackages.kernel;
|
|
};
|
|
patched = snd-usb-audio-module.overrideAttrs (prev: {
|
|
patches = [ ./0001-Update-device-ID-for-PreSonus-1824c.patch ];
|
|
});
|
|
upmixConfig = {
|
|
"stream.properties" = {
|
|
"channelmix.upmix" = true;
|
|
"channelmix.upmix-method" = "psd";
|
|
};
|
|
};
|
|
in
|
|
{
|
|
options.modules.hardware.presonus-studio = {
|
|
enable = lib.mkOption {
|
|
default = false;
|
|
example = true;
|
|
};
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
boot.kernelModules = [ "snd-usb-audio" ];
|
|
boot.extraModulePackages = [
|
|
(patched)
|
|
];
|
|
|
|
# Workaround for mainline module loading instead of patched module
|
|
systemd.services.reload-snd-usb-audio = {
|
|
description = "Reload snd_usb_audio kernel module";
|
|
wantedBy = [ "sound.target" ];
|
|
serviceConfig.Type = "oneshot";
|
|
path = with pkgs; [
|
|
kmod
|
|
];
|
|
script = ''
|
|
# Only reload if device hasn't been initialised
|
|
if ! cat /proc/asound/card*/usbmixer | grep -q "Mute Main Out Switch"; then
|
|
rmmod snd_usb_audio
|
|
insmod /run/booted-system/kernel-modules/lib/modules/$(uname -r)/extra/snd-usb-audio.ko.xz
|
|
fi
|
|
'';
|
|
};
|
|
|
|
services.pipewire.extraConfig = {
|
|
pipewire = {
|
|
"10-network" = {
|
|
"context.modules" = [
|
|
{
|
|
"name" = "libpipewire-module-rtp-session";
|
|
"args" = {
|
|
"stream.props" = {
|
|
"node.name" = "rtp-source";
|
|
};
|
|
};
|
|
}
|
|
];
|
|
};
|
|
"surround" = {
|
|
"context.modules" = [
|
|
{
|
|
"name" = "libpipewire-module-loopback";
|
|
"args" = {
|
|
"node.description" = "Genelec 4.1 Surround";
|
|
"capture.props" = {
|
|
"node.name" = "Genelec_Speakers";
|
|
"media.class" = "Audio/Sink";
|
|
"audio.position" = [
|
|
"FL"
|
|
"FR"
|
|
"SL"
|
|
"SR"
|
|
"LFE"
|
|
];
|
|
};
|
|
"playback.props" = {
|
|
"node.name" = "playback.Genelec_Speakers";
|
|
"audio.position" = [
|
|
"AUX0"
|
|
"AUX1"
|
|
"AUX3"
|
|
"AUX4"
|
|
"AUX5"
|
|
];
|
|
"target.object" = "alsa_output.usb-PreSonus_Studio_1824c_SC4E21110775-00.multichannel-output";
|
|
"stream.dont-remix" = true;
|
|
"node.passive" = true;
|
|
};
|
|
};
|
|
}
|
|
];
|
|
};
|
|
};
|
|
pipewire-pulse."40-upmix" = upmixConfig;
|
|
client-rt."40-upmix" = upmixConfig;
|
|
};
|
|
};
|
|
}
|