From 5502f844b225147985f1fb200f2b187f4f14f969 Mon Sep 17 00:00:00 2001 From: wxlyyy <1556588440@qq.com> Date: Fri, 3 Jul 2026 23:12:56 +0800 Subject: [PATCH] Reapply "nixos/pipewire: minor refactor" Reapplies #537519, reverted in #537857 Fixed breakage --- .../services/desktops/pipewire/pipewire.nix | 46 +++++++++++-------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/nixos/modules/services/desktops/pipewire/pipewire.nix b/nixos/modules/services/desktops/pipewire/pipewire.nix index 4449c273c7ec..fb72bd695cec 100644 --- a/nixos/modules/services/desktops/pipewire/pipewire.nix +++ b/nixos/modules/services/desktops/pipewire/pipewire.nix @@ -11,11 +11,17 @@ let inherit (lib) maintainers teams; inherit (lib.attrsets) attrByPath - attrsToList concatMapAttrs filterAttrs + mapAttrs' + nameValuePair + ; + inherit (lib.lists) + elem + flatten + optional + optionals ; - inherit (lib.lists) flatten optional optionals; inherit (lib.modules) mkIf mkRemovedOptionModule; inherit (lib.options) literalExpression @@ -23,7 +29,7 @@ let mkOption mkPackageOption ; - inherit (lib.strings) concatMapStringsSep hasPrefix optionalString; + inherit (lib.strings) hasPrefix optionalString; inherit (lib.types) attrsOf bool @@ -32,17 +38,6 @@ 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; @@ -58,11 +53,24 @@ let configPackages = cfg.configPackages; - 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 + 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 contains deprecated options, i.e. client-rt + { + inherit (cfg.extraConfig) + pipewire + client + jack + pipewire-pulse + ; + } ); configs = pkgs.buildEnv {