nixos/pipewire: add config packages option

This commit is contained in:
Hans Christian Schmitz 2024-01-19 13:34:17 +01:00
parent 992582fdf8
commit 054bba560a
No known key found for this signature in database
GPG Key ID: 1D729DE4757DE669

View File

@ -5,7 +5,11 @@ with lib;
let
json = pkgs.formats.json {};
mapToFiles = location: config: concatMapAttrs (name: value: { "pipewire/${location}.conf.d/${name}.conf".source = json.generate "${name}" value;}) config;
mapToFiles = location: config: concatMapAttrs (name: value: { "share/pipewire/${location}.conf.d/${name}.conf" = json.generate "${name}" value; }) config;
extraConfigPkgFromFiles = locations: filesSet: pkgs.runCommand "pipewire-extra-config" { } ''
mkdir -p ${lib.concatMapStringsSep " " (l: "$out/share/pipewire/${l}.conf.d") locations}
${lib.concatMapStringsSep ";" ({name, value}: "ln -s ${value} $out/${name}") (lib.attrsToList filesSet)}
'';
cfg = config.services.pipewire;
enable32BitAlsaPlugins = cfg.alsa.support32Bit
&& pkgs.stdenv.isx86_64
@ -19,6 +23,24 @@ let
mkdir -p "$out/lib"
ln -s "${cfg.package.jack}/lib" "$out/lib/pipewire"
'';
configPackages = cfg.configPackages;
extraConfigPkg = extraConfigPkgFromFiles
[ "pipewire" "client" "client-rt" "jack" "pipewire-pulse" ]
(
mapToFiles "pipewire" cfg.extraConfig.pipewire
// mapToFiles "client" cfg.extraConfig.client
// mapToFiles "client-rt" cfg.extraConfig.client-rt
// mapToFiles "jack" cfg.extraConfig.jack
// mapToFiles "pipewire-pulse" cfg.extraConfig.pipewire-pulse
);
configs = pkgs.buildEnv {
name = "pipewire-configs";
paths = configPackages ++ [ extraConfigPkg ];
pathsToLink = [ "/share/pipewire" ];
};
in {
meta.maintainers = teams.freedesktop.members ++ [ lib.maintainers.k900 ];
@ -200,6 +222,15 @@ in {
'';
};
};
configPackages = lib.mkOption {
type = lib.types.listOf lib.types.package;
default = [];
description = lib.mdDoc ''
List of packages that provide PipeWire configuration, in the form of
`share/pipewire/*/*.conf` files.
'';
};
};
};
@ -283,12 +314,8 @@ in {
"alsa/conf.d/99-pipewire-default.conf" = mkIf cfg.alsa.enable {
source = "${cfg.package}/share/alsa/alsa.conf.d/99-pipewire-default.conf";
};
}
// mapToFiles "pipewire" cfg.extraConfig.pipewire
// mapToFiles "client" cfg.extraConfig.client
// mapToFiles "client-rt" cfg.extraConfig.client-rt
// mapToFiles "jack" cfg.extraConfig.jack
// mapToFiles "pipewire-pulse" cfg.extraConfig.pipewire-pulse;
pipewire.source = "${configs}/share/pipewire";
};
environment.sessionVariables.LD_LIBRARY_PATH =
lib.mkIf cfg.jack.enable [ "${cfg.package.jack}/lib" ];