about summary refs log tree commit diff
path: root/nixos/modules
diff options
context:
space:
mode:
authorK900 <me@0upti.me>2022-03-22 11:10:47 +0300
committerK900 <me@0upti.me>2022-03-22 11:29:46 +0300
commit1dbc26d995026ed943f939800a36abe8e1c3140c (patch)
tree66187b982b1c55323f8843c41609a4324d5b6ec3 /nixos/modules
parent74c1fd0b5ee7d2a0bf9754dd2bc0f41a73ed32a7 (diff)
downloadnixlib-1dbc26d995026ed943f939800a36abe8e1c3140c.tar
nixlib-1dbc26d995026ed943f939800a36abe8e1c3140c.tar.gz
nixlib-1dbc26d995026ed943f939800a36abe8e1c3140c.tar.bz2
nixlib-1dbc26d995026ed943f939800a36abe8e1c3140c.tar.lz
nixlib-1dbc26d995026ed943f939800a36abe8e1c3140c.tar.xz
nixlib-1dbc26d995026ed943f939800a36abe8e1c3140c.tar.zst
nixlib-1dbc26d995026ed943f939800a36abe8e1c3140c.zip
nixos/pipewire: unbreak mixed Pulse/Pipewire setups
Fixes #163066
Diffstat (limited to 'nixos/modules')
-rw-r--r--nixos/modules/services/desktops/pipewire/pipewire.nix6
-rw-r--r--nixos/modules/services/desktops/pipewire/wireplumber.nix10
2 files changed, 13 insertions, 3 deletions
diff --git a/nixos/modules/services/desktops/pipewire/pipewire.nix b/nixos/modules/services/desktops/pipewire/pipewire.nix
index 59e9342a6ea1..e8b778b5fe77 100644
--- a/nixos/modules/services/desktops/pipewire/pipewire.nix
+++ b/nixos/modules/services/desktops/pipewire/pipewire.nix
@@ -39,6 +39,8 @@ let
     pipewire = recursiveUpdate (if useSessionManager then defaults.pipewire else defaults.minimal) cfg.config.pipewire;
     pipewire-pulse = recursiveUpdate defaults.pipewire-pulse cfg.config.pipewire-pulse;
   };
+
+  usedForAudio = cfg.pulse.enable || cfg.alsa.enable || cfg.jack.enable;
 in {
 
   meta = {
@@ -152,8 +154,8 @@ in {
   config = mkIf cfg.enable {
     assertions = [
       {
-        assertion = cfg.pulse.enable -> !config.hardware.pulseaudio.enable;
-        message = "PipeWire based PulseAudio server emulation replaces PulseAudio. This option requires `hardware.pulseaudio.enable` to be set to false";
+        assertion = usedForAudio -> !config.hardware.pulseaudio.enable;
+        message = "Using PipeWire as a sound server conflicts with PulseAudio. This option requires `hardware.pulseaudio.enable` to be set to false";
       }
       {
         assertion = cfg.jack.enable -> !config.services.jack.jackd.enable;
diff --git a/nixos/modules/services/desktops/pipewire/wireplumber.nix b/nixos/modules/services/desktops/pipewire/wireplumber.nix
index 52ec17b95db4..35f3c4737eae 100644
--- a/nixos/modules/services/desktops/pipewire/wireplumber.nix
+++ b/nixos/modules/services/desktops/pipewire/wireplumber.nix
@@ -1,7 +1,9 @@
 { config, lib, pkgs, ... }:
 
 let
-  cfg = config.services.pipewire.wireplumber;
+  pwCfg = config.services.pipewire;
+  cfg = pwCfg.wireplumber;
+  pwUsedForAudio = pwCfg.pulse.enable || pwCfg.alsa.enable || pwCfg.jack.enable;
 in
 {
   meta.maintainers = [ lib.maintainers.k900 ];
@@ -33,6 +35,12 @@ in
     ];
 
     environment.systemPackages = [ cfg.package ];
+
+    environment.etc.wireplumber."main.lua.d"."80-nixos.lua".text = if !pwUsedForAudio then ''
+      # Pipewire is not used for audio, so prevent it from grabbing audio devices
+      alsa_monitor.enable = function() end
+    '' else "";
+
     systemd.packages = [ cfg.package ];
 
     systemd.services.wireplumber.enable = config.services.pipewire.systemWide;