From 4e5570be887e9601c962e752741eb9da6f7828c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20J=C3=A4ckel?= Date: Mon, 20 Sep 2021 22:26:37 +0200 Subject: [PATCH] Switch to pipewire --- hosts/pulsebert/default.nix | 23 +++----- hosts/pulsebert/generate.sh | 9 ++++ hosts/pulsebert/pipewire-pulse.conf.in.json | 20 +++++++ hosts/pulsebert/pipewire-pulse.conf.json | 58 +++++++++++++++++++++ 4 files changed, 95 insertions(+), 15 deletions(-) create mode 100755 hosts/pulsebert/generate.sh create mode 100644 hosts/pulsebert/pipewire-pulse.conf.in.json create mode 100644 hosts/pulsebert/pipewire-pulse.conf.json diff --git a/hosts/pulsebert/default.nix b/hosts/pulsebert/default.nix index 670c2aff..a37d3483 100644 --- a/hosts/pulsebert/default.nix +++ b/hosts/pulsebert/default.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, pkgs, ... }: +{ config, lib, pkgs, ... }: let octoprintPort = 8080; @@ -60,6 +60,7 @@ in { mpv ncmpcpp ncpamixer + pulseaudio # required for pactl vim wget ]; @@ -99,22 +100,14 @@ in { }; }; }; - hardware.pulseaudio = { + + services.pipewire = { enable = true; - systemWide = true; - tcp.enable = true; - tcp.anonymousClients.allowedIpRanges = [ - "127.0.0.0/8" - "::1/128" - "fd23:42:c3d2:500::/56" - "172.22.99.0/24" - "172.20.72.0/21" - "2a00:8180:2c00:200::/56" - ]; - zeroconf.publish.enable = true; - package = pkgs.pulseaudioFull; - extraModules = [ pkgs.pulseaudio-modules-bt ]; + alsa.enable = true; + config.pipewire-pulse = lib.importJSON ./pipewire-pulse.conf.json; + pulse.enable = true; }; + security.rtkit.enable = true; # tell Avahi to publish CUPS and PulseAudio services.avahi = { diff --git a/hosts/pulsebert/generate.sh b/hosts/pulsebert/generate.sh new file mode 100755 index 00000000..4407ee35 --- /dev/null +++ b/hosts/pulsebert/generate.sh @@ -0,0 +1,9 @@ +#! /usr/bin/env nix-shell +#! nix-shell -i bash -p jq + +# shellcheck shell=bash + +dir=$(dirname "$(readlink -f "$0")") +default_pipewire_pulse=$(nix-instantiate --eval -E '(import { }).pkgs.path')/nixos/modules/services/desktops/pipewire/pipewire-pulse.conf.json + +jq -s '.[0] * .[1] * .[2]' "$dir/pipewire-pulse.conf.in.json" "$default_pipewire_pulse" > "$dir/pipewire-pulse.conf.json" <(jq -cnS '{ "context.modules": [ inputs."context.modules" ] | add}' "$default_pipewire_pulse" "$dir/pipewire-pulse.conf.in.json") diff --git a/hosts/pulsebert/pipewire-pulse.conf.in.json b/hosts/pulsebert/pipewire-pulse.conf.in.json new file mode 100644 index 00000000..ec7072d1 --- /dev/null +++ b/hosts/pulsebert/pipewire-pulse.conf.in.json @@ -0,0 +1,20 @@ +{ + "context.modules": [ + { + "name": "libpipewire-module-zeroconf-publish" + }, + { + "name": "libpipewire-module-protocol-pulse", + "args": { + "server.address": [ + "tcp:127.0.0.0/8", + "tcp:::1/128", + "tcp:fd23:42:c3d2:500::/56", + "tcp:172.22.99.0/24", + "tcp:172.20.72.0/21", + "tcp:2a00:8180:2c00:200::/56" + ] + } + } + ] +} diff --git a/hosts/pulsebert/pipewire-pulse.conf.json b/hosts/pulsebert/pipewire-pulse.conf.json new file mode 100644 index 00000000..ba9c48bb --- /dev/null +++ b/hosts/pulsebert/pipewire-pulse.conf.json @@ -0,0 +1,58 @@ +{ + "context.modules": [ + { + "args": {}, + "flags": [ + "ifexists", + "nofail" + ], + "name": "libpipewire-module-rtkit" + }, + { + "name": "libpipewire-module-protocol-native" + }, + { + "name": "libpipewire-module-client-node" + }, + { + "name": "libpipewire-module-adapter" + }, + { + "name": "libpipewire-module-metadata" + }, + { + "args": { + "server.address": [ + "unix:native" + ], + "vm.overrides": { + "pulse.min.quantum": "1024/48000" + } + }, + "name": "libpipewire-module-protocol-pulse" + }, + { + "name": "libpipewire-module-zeroconf-publish" + }, + { + "args": { + "server.address": [ + "tcp:127.0.0.0/8", + "tcp:::1/128", + "tcp:fd23:42:c3d2:500::/56", + "tcp:172.22.99.0/24", + "tcp:172.20.72.0/21", + "tcp:2a00:8180:2c00:200::/56" + ] + }, + "name": "libpipewire-module-protocol-pulse" + } + ], + "context.properties": {}, + "context.spa-libs": { + "audio.convert.*": "audioconvert/libspa-audioconvert", + "support.*": "support/libspa-support" + }, + "context.exec": [], + "stream.properties": {} +}