diff --git a/nixos/modules/services/desktops/pipewire/pipewire.nix b/nixos/modules/services/desktops/pipewire/pipewire.nix index 4a7daf170fb8..4449c273c7ec 100644 --- a/nixos/modules/services/desktops/pipewire/pipewire.nix +++ b/nixos/modules/services/desktops/pipewire/pipewire.nix @@ -11,10 +11,9 @@ let inherit (lib) maintainers teams; inherit (lib.attrsets) attrByPath + attrsToList concatMapAttrs filterAttrs - mapAttrs' - nameValuePair ; inherit (lib.lists) flatten optional optionals; inherit (lib.modules) mkIf mkRemovedOptionModule; @@ -24,7 +23,7 @@ let mkOption mkPackageOption ; - inherit (lib.strings) hasPrefix optionalString; + inherit (lib.strings) concatMapStringsSep hasPrefix optionalString; inherit (lib.types) attrsOf bool @@ -33,6 +32,17 @@ let ; json = pkgs.formats.json { }; + 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 ${concatMapStringsSep " " (l: "$out/share/pipewire/${l}.conf.d") locations} + ${concatMapStringsSep ";" ({ name, value }: "ln -s ${value} $out/${name}") (attrsToList filesSet)} + ''; cfg = config.services.pipewire; enable32BitAlsaPlugins = cfg.alsa.support32Bit && pkgs.stdenv.hostPlatform.isx86_64 && pkgs.pkgsi686Linux.pipewire != null; @@ -48,14 +58,11 @@ let configPackages = cfg.configPackages; - extraConfigPkg = pkgs.linkFarm "pipewire-extra-config" ( - concatMapAttrs ( - location: config: - mapAttrs' ( - name: value: - nameValuePair "share/pipewire/${location}.conf.d/${name}.conf" (json.generate name value) - ) config - ) cfg.extraConfig + extraConfigPkg = extraConfigPkgFromFiles [ "pipewire" "client" "jack" "pipewire-pulse" ] ( + mapToFiles "pipewire" cfg.extraConfig.pipewire + // mapToFiles "client" cfg.extraConfig.client + // mapToFiles "jack" cfg.extraConfig.jack + // mapToFiles "pipewire-pulse" cfg.extraConfig.pipewire-pulse ); configs = pkgs.buildEnv {