From 4d091d5aa6926fd44c258ed8f1cc931def9afad6 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 26 May 2021 00:33:15 +0200 Subject: [PATCH] services: add pipewire service --- services/default.nix | 1 + services/pipewire.nix | 68 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 services/pipewire.nix diff --git a/services/default.nix b/services/default.nix index 93fe1fe..bfe8f02 100644 --- a/services/default.nix +++ b/services/default.nix @@ -14,6 +14,7 @@ ./monitoring.nix ./nextcloud.nix ./nginx.nix + ./pipewire.nix ./postgresql-backup.nix ./postgresql.nix ./tgv.nix diff --git a/services/pipewire.nix b/services/pipewire.nix new file mode 100644 index 0000000..c681cf4 --- /dev/null +++ b/services/pipewire.nix @@ -0,0 +1,68 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.my.services.pipewire; + my = config.my; +in +{ + options.my.services.pipewire = { + enable = lib.mkEnableOption "Pipewire sound backend"; + }; + + config = mkIf cfg.enable { + # from NixOS wiki, causes conflicts with pipewire + sound.enable = false; + # recommended for pipewire as well + security.rtkit.enable = true; + services.pipewire = { + enable = true; + + alsa = { + enable = true; + support32Bit = true; + }; + pulse.enable = true; + jack.enable = true; + + media-session = { + enable = true; + config.bluez-monitor.rules = [ + { + # Matches all cards + matches = [{ "device.name" = "~bluez_card.*"; }]; + actions = { + "update-props" = { + "bluez5.reconnect-profiles" = [ + "a2dp_sink" + "hfp_hf" + "hsp_hs" + ]; + # mSBC provides better audio + microphone + "bluez5.msbc-support" = true; + # SBC XQ provides better audio + "bluez5.sbc-xq-support" = true; + }; + }; + } + { + matches = [ + # Matches all sources + { + "node.name" = "~bluez_input.*"; + } + # Matches all outputs + { + "node.name" = "~bluez_output.*"; + } + ]; + actions = { + "node.pause-on-idle" = false; + }; + } + ]; + }; + }; + }; +}