Skip to content

Commit

Permalink
Merge pull request #216 from Jovian-Experiments/wireplumbing
Browse files Browse the repository at this point in the history
  • Loading branch information
zhaofengli authored Nov 25, 2023
2 parents 650ec6e + f26f66a commit ab1bdc6
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 39 deletions.
67 changes: 28 additions & 39 deletions modules/steamdeck/sound.nix
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ let
# remove more specific upstream symlink so Valve acp5x config is picked
rm $out/share/alsa/ucm2/conf.d/acp5x/Valve-Jupiter-1.conf
'';

mkDspEtc = path: {
name = path;
value.source = "${pkgs.steamdeck-dsp}/share/${path}";
};
in
{
options = {
Expand All @@ -27,47 +32,31 @@ in
};
};

config = lib.mkIf (cfg.enableSoundSupport) (lib.mkMerge [
{
hardware.pulseaudio.enable = lib.mkDefault false;
config = let
systemWide = config.services.pipewire.systemWide;

services.pipewire = {
enable = lib.mkDefault true;
pulse.enable = lib.mkDefault true;
alsa.enable = lib.mkDefault true;
};
extraEnv = {
ALSA_CONFIG_UCM2 = "${alsa-ucm-conf'}/share/alsa/ucm2";
LV2_PATH = "${pkgs.steamdeck-dsp}/lib/lv2";
};
in lib.mkIf cfg.enableSoundSupport {
hardware.pulseaudio.enable = false;

services.pipewire = {
enable = true;
pulse.enable = true;
alsa.enable = true;
wireplumber.package = pkgs.wireplumber-jovian;
};

environment.variables.ALSA_CONFIG_UCM2 = "${alsa-ucm-conf'}/share/alsa/ucm2";
}
environment.etc = builtins.listToAttrs (map mkDspEtc pkgs.steamdeck-dsp.passthru.filesInstalledToEtc);

# Pulseaudio
(lib.mkIf (config.hardware.pulseaudio.enable) (let
systemWide = config.hardware.pulseaudio.systemWide;
in {
systemd.services.pulseaudio = lib.mkIf systemWide {
environment.ALSA_CONFIG_UCM2 = config.environment.variables.ALSA_CONFIG_UCM2;
};
systemd.user.services.pulseaudio = lib.mkIf (!systemWide) {
environment.ALSA_CONFIG_UCM2 = config.environment.variables.ALSA_CONFIG_UCM2;
};
}))
environment.variables = extraEnv;

systemd.services.pipewire.environment = lib.mkIf systemWide extraEnv;
systemd.user.services.pipewire.environment = lib.mkIf (!systemWide) extraEnv;

# Pipewire
(lib.mkIf (config.services.pipewire.enable) (let
systemWide = config.services.pipewire.systemWide;
in {
systemd.services.pipewire = lib.mkIf systemWide {
environment.ALSA_CONFIG_UCM2 = config.environment.variables.ALSA_CONFIG_UCM2;
};
systemd.user.services.pipewire = lib.mkIf (!systemWide) {
environment.ALSA_CONFIG_UCM2 = config.environment.variables.ALSA_CONFIG_UCM2;
};
systemd.services.wireplumber = lib.mkIf systemWide {
environment.ALSA_CONFIG_UCM2 = config.environment.variables.ALSA_CONFIG_UCM2;
};
systemd.user.services.wireplumber = lib.mkIf (!systemWide) {
environment.ALSA_CONFIG_UCM2 = config.environment.variables.ALSA_CONFIG_UCM2;
};
}))
]);
systemd.services.wireplumber.environment = lib.mkIf systemWide extraEnv;
systemd.user.services.wireplumber.environment = lib.mkIf (!systemWide) extraEnv;
};
}
4 changes: 4 additions & 0 deletions overlay.nix
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ rec {
};
});

wireplumber-jovian = final.callPackage ./pkgs/wireplumber {
wireplumber' = super.wireplumber;
};

sdgyrodsu = final.callPackage ./pkgs/sdgyrodsu { };

decky-loader = final.callPackage ./pkgs/decky-loader { };
Expand Down
27 changes: 27 additions & 0 deletions pkgs/steamdeck-dsp/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,39 @@ stdenv.mkDerivation(finalAttrs: {
postInstall = ''
mv -vt $out $out/usr/*
rmdir -v $out/usr
>&2 echo "Checking configuration files"
echo -e "${builtins.concatStringsSep "\n" finalAttrs.passthru.filesInstalledToEtc}" \
| sort >etc.expected.txt
for dir in wireplumber pipewire; do
find $out/share/$dir -type f -printf "$dir/%P\n"
done | sort >etc.actual.txt
if ! cmp --silent etc.{expected,actual}.txt; then
>&2 echo "!! passthru.filesInstalledToEtc needs to be updated. The actual list of config files:"
cat etc.actual.txt
false
fi
'';

# ¯\_(ツ)_/¯
# Leaky wrappers I guess.
dontWrapQtApps = true;

passthru.filesInstalledToEtc = [
"pipewire/pipewire.conf.d/filter-chain-sink.conf"
"pipewire/pipewire.conf.d/filter-chain.conf"
"pipewire/pipewire.conf.d/virtual-sink.conf"
"pipewire/pipewire.conf.d/virtual-source.conf"
"wireplumber/bluetooth.lua.d/60-bluez-jupiter.lua"
"wireplumber/main.lua.d/60-alsa-acp5x-config.lua"
"wireplumber/main.lua.d/60-alsa-card0-config.lua"
"wireplumber/main.lua.d/60-alsa-ps-controller-config.lua"
"wireplumber/scripts/open-alsa-acp-dsm-node.lua"
];

meta = {
description = "Steamdeck Audio Processing";
# Actual license of all parts unclear.
Expand Down
11 changes: 11 additions & 0 deletions pkgs/wireplumber/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{ wireplumber', fetchFromGitHub }:
wireplumber'.overrideAttrs(_: rec {
version = "0.4.14-dev23";

src = fetchFromGitHub {
owner = "Jovian-Experiments";
repo = "wireplumber";
rev = "refs/tags/${version}";
hash = "sha256-+z7BQlRu8XYxE5vEFCfentdrQNuCP0RnQHiPx8/Yfl8=";
};
})

0 comments on commit ab1bdc6

Please sign in to comment.