{ config, lib, pkgs, ... }: let cfg = config.c3d2.audioStreaming; release = lib.strings.fileContents "${pkgs.path}/.version"; in { options = { c3d2.audioStreaming = lib.mkEnableOption "enable all services requires to audio stream to dacbert, glotzert or pulsebert"; }; config = lib.mkIf cfg { environment.etc = lib.optionalAttrs (lib.versionAtLeast release "23.05") { "pipewire/pipewire.conf.d/zeroconf.conf".text = builtins.toJSON { "context.modules" = [ { "name" = "libpipewire-module-zeroconf-discover"; } ]; }; }; environment.systemPackages = lib.mkIf config.services.xserver.enable (with pkgs; [ paprefs pavucontrol ]); hardware.pulseaudio.zeroconf.discovery.enable = true; # required for paprefs to be able to save programs.dconf.enable = lib.mkIf config.services.xserver.enable true; security.rtkit.enable = true; services = { avahi = { enable = true; nssmdns = true; }; pipewire = lib.mkMerge [ (lib.optionalAttrs (lib.versionOlder release "23.05") { config.pipewire-pulse = let default-pipewire-pulse = lib.importJSON (pkgs.path + "/nixos/modules/services/desktops/pipewire/daemon/pipewire-pulse.conf.json"); in default-pipewire-pulse // { "context.modules" = default-pipewire-pulse."context.modules" ++ [ { "name" = "libpipewire-module-zeroconf-discover"; } ]; }; }) { pulse.enable = true; } ]; }; }; }