diff --git a/nixos/modules/services/desktops/pipewire/bluez-hardware.conf.json b/nixos/modules/services/desktops/pipewire/bluez-hardware.conf.json new file mode 100644 index 00000000000..7c527b29215 --- /dev/null +++ b/nixos/modules/services/desktops/pipewire/bluez-hardware.conf.json @@ -0,0 +1,197 @@ +{ + "bluez5.features.device": [ + { + "name": "Air 1 Plus", + "no-features": [ + "hw-volume-mic" + ] + }, + { + "name": "AirPods", + "no-features": [ + "msbc-alt1", + "msbc-alt1-rtl" + ] + }, + { + "name": "AirPods Pro", + "no-features": [ + "msbc-alt1", + "msbc-alt1-rtl" + ] + }, + { + "name": "AXLOIE Goin", + "no-features": [ + "msbc-alt1", + "msbc-alt1-rtl" + ] + }, + { + "name": "JBL Endurance RUN BT", + "no-features": [ + "msbc-alt1", + "msbc-alt1-rtl", + "sbc-xq" + ] + }, + { + "name": "JBL LIVE650BTNC" + }, + { + "name": "Soundcore Life P2-L", + "no-features": [ + "msbc-alt1", + "msbc-alt1-rtl" + ] + }, + { + "name": "Urbanista Stockholm Plus", + "no-features": [ + "msbc-alt1", + "msbc-alt1-rtl" + ] + }, + { + "address": "~^94:16:25:", + "no-features": [ + "hw-volume" + ] + }, + { + "address": "~^9c:64:8b:", + "no-features": [ + "hw-volume" + ] + }, + { + "address": "~^a0:e9:db:", + "no-features": [ + "hw-volume" + ] + }, + { + "address": "~^0c:a6:94:", + "no-features": [ + "hw-volume" + ] + }, + { + "address": "~^00:14:02:", + "no-features": [ + "hw-volume" + ] + }, + { + "address": "~^44:5e:f3:", + "no-features": [ + "hw-volume" + ] + }, + { + "address": "~^d4:9c:28:", + "no-features": [ + "hw-volume" + ] + }, + { + "address": "~^00:18:6b:", + "no-features": [ + "hw-volume" + ] + }, + { + "address": "~^b8:ad:3e:", + "no-features": [ + "hw-volume" + ] + }, + { + "address": "~^a0:e9:db:", + "no-features": [ + "hw-volume" + ] + }, + { + "address": "~^00:24:1c:", + "no-features": [ + "hw-volume" + ] + }, + { + "address": "~^00:11:b1:", + "no-features": [ + "hw-volume" + ] + }, + { + "address": "~^a4:15:66:", + "no-features": [ + "hw-volume" + ] + }, + { + "address": "~^00:14:f1:", + "no-features": [ + "hw-volume" + ] + }, + { + "address": "~^00:26:7e:", + "no-features": [ + "hw-volume" + ] + }, + { + "address": "~^90:03:b7:", + "no-features": [ + "hw-volume" + ] + } + ], + "bluez5.features.adapter": [ + { + "bus-type": "usb", + "vendor-id": "usb:0bda" + }, + { + "bus-type": "usb", + "no-features": [ + "msbc-alt1-rtl" + ] + }, + { + "no-features": [ + "msbc-alt1-rtl" + ] + } + ], + "bluez5.features.kernel": [ + { + "sysname": "Linux", + "release": "~^[0-4]\\.", + "no-features": [ + "msbc-alt1", + "msbc-alt1-rtl" + ] + }, + { + "sysname": "Linux", + "release": "~^5\\.[1-7]\\.", + "no-features": [ + "msbc-alt1", + "msbc-alt1-rtl" + ] + }, + { + "sysname": "Linux", + "release": "~^5\\.(8|9|10)\\.", + "no-features": [ + "msbc-alt1" + ] + }, + { + "no-features": [] + } + ] +} diff --git a/nixos/modules/services/desktops/pipewire/pipewire-media-session.nix b/nixos/modules/services/desktops/pipewire/pipewire-media-session.nix index 17a2d49bb1f..41ab995e329 100644 --- a/nixos/modules/services/desktops/pipewire/pipewire-media-session.nix +++ b/nixos/modules/services/desktops/pipewire/pipewire-media-session.nix @@ -15,6 +15,7 @@ let defaults = { alsa-monitor = (builtins.fromJSON (builtins.readFile ./alsa-monitor.conf.json)); bluez-monitor = (builtins.fromJSON (builtins.readFile ./bluez-monitor.conf.json)); + bluez-hardware = (builtins.fromJSON (builtins.readFile ./bluez-hardware.conf.json)); media-session = (builtins.fromJSON (builtins.readFile ./media-session.conf.json)); v4l2-monitor = (builtins.fromJSON (builtins.readFile ./v4l2-monitor.conf.json)); }; @@ -22,6 +23,7 @@ let configs = { alsa-monitor = recursiveUpdate defaults.alsa-monitor cfg.config.alsa-monitor; bluez-monitor = recursiveUpdate defaults.bluez-monitor cfg.config.bluez-monitor; + bluez-hardware = defaults.bluez-hardware; media-session = recursiveUpdate defaults.media-session cfg.config.media-session; v4l2-monitor = recursiveUpdate defaults.v4l2-monitor cfg.config.v4l2-monitor; }; @@ -120,6 +122,10 @@ in { mkIf config.services.pipewire.pulse.enable { source = json.generate "bluez-monitor.conf" configs.bluez-monitor; }; + environment.etc."pipewire/media-session.d/bluez-hardware.conf" = + mkIf config.services.pipewire.pulse.enable { + source = json.generate "bluez-hardware.conf" configs.bluez-hardware; + }; environment.etc."pipewire/media-session.d/with-jack" = mkIf config.services.pipewire.jack.enable { diff --git a/pkgs/development/libraries/pipewire/default.nix b/pkgs/development/libraries/pipewire/default.nix index 7e6b2983245..b2bf26ead30 100644 --- a/pkgs/development/libraries/pipewire/default.nix +++ b/pkgs/development/libraries/pipewire/default.nix @@ -192,6 +192,7 @@ let paths-out-media-session = [ "nix-support/etc/pipewire/media-session.d/alsa-monitor.conf.json" "nix-support/etc/pipewire/media-session.d/bluez-monitor.conf.json" + "nix-support/etc/pipewire/media-session.d/bluez-hardware.conf.json" "nix-support/etc/pipewire/media-session.d/media-session.conf.json" "nix-support/etc/pipewire/media-session.d/v4l2-monitor.conf.json" ];