about summary refs log tree commit diff
path: root/nixos/modules
diff options
context:
space:
mode:
authorK900 <me@0upti.me>2022-03-22 14:15:16 +0300
committerK900 <me@0upti.me>2022-03-26 08:54:18 +0300
commit435a5b675be29cf1add3b07684ffc4dac39101f5 (patch)
tree4dc942befde62be87f81229e11aec37a64a7e65f /nixos/modules
parent1dbc26d995026ed943f939800a36abe8e1c3140c (diff)
downloadnixlib-435a5b675be29cf1add3b07684ffc4dac39101f5.tar
nixlib-435a5b675be29cf1add3b07684ffc4dac39101f5.tar.gz
nixlib-435a5b675be29cf1add3b07684ffc4dac39101f5.tar.bz2
nixlib-435a5b675be29cf1add3b07684ffc4dac39101f5.tar.lz
nixlib-435a5b675be29cf1add3b07684ffc4dac39101f5.tar.xz
nixlib-435a5b675be29cf1add3b07684ffc4dac39101f5.tar.zst
nixlib-435a5b675be29cf1add3b07684ffc4dac39101f5.zip
nixos/pipewire: introduce an explicit option to use Pipewire as audio server
Diffstat (limited to 'nixos/modules')
-rw-r--r--nixos/modules/services/desktops/pipewire/pipewire-media-session.nix5
-rw-r--r--nixos/modules/services/desktops/pipewire/pipewire.nix21
-rw-r--r--nixos/modules/services/desktops/pipewire/wireplumber.nix12
3 files changed, 29 insertions, 9 deletions
diff --git a/nixos/modules/services/desktops/pipewire/pipewire-media-session.nix b/nixos/modules/services/desktops/pipewire/pipewire-media-session.nix
index 109c91134b99..6027e4f3d4bf 100644
--- a/nixos/modules/services/desktops/pipewire/pipewire-media-session.nix
+++ b/nixos/modules/services/desktops/pipewire/pipewire-media-session.nix
@@ -110,6 +110,11 @@ in {
       source = json.generate "v4l2-monitor.conf" configs.v4l2-monitor;
     };
 
+    environment.etc."pipewire/media-session.d/with-audio" =
+      mkIf config.services.pipewire.audio.enable {
+        text = "";
+      };
+
     environment.etc."pipewire/media-session.d/with-alsa" =
       mkIf config.services.pipewire.alsa.enable {
         text = "";
diff --git a/nixos/modules/services/desktops/pipewire/pipewire.nix b/nixos/modules/services/desktops/pipewire/pipewire.nix
index e8b778b5fe77..1323336d866e 100644
--- a/nixos/modules/services/desktops/pipewire/pipewire.nix
+++ b/nixos/modules/services/desktops/pipewire/pipewire.nix
@@ -39,8 +39,6 @@ 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 = {
@@ -118,6 +116,16 @@ in {
         };
       };
 
+      audio = {
+        enable = lib.mkOption {
+          type = lib.types.bool;
+          # this is for backwards compatibility
+          default = cfg.alsa.enable || cfg.jack.enable || cfg.pulse.enable;
+          defaultText = lib.literalExpression "config.services.pipewire.alsa.enable || config.services.pipewire.jack.enable || config.services.pipewire.pulse.enable";
+          description = "Whether to use PipeWire as the primary sound server";
+        };
+      };
+
       alsa = {
         enable = mkEnableOption "ALSA support";
         support32Bit = mkEnableOption "32-bit ALSA support on 64-bit systems";
@@ -154,13 +162,18 @@ in {
   config = mkIf cfg.enable {
     assertions = [
       {
-        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.audio.enable -> !config.hardware.pulseaudio.enable;
+        message = "Using PipeWire as the 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;
         message = "PipeWire based JACK emulation doesn't use the JACK service. This option requires `services.jack.jackd.enable` to be set to false";
       }
+      {
+        # JACK intentionally not checked, as PW-on-JACK setups are a thing that some people may want
+        assertion = (cfg.alsa.enable || cfg.pulse.enable) -> cfg.audio.enable;
+        message = "Using PipeWire's ALSA/PulseAudio compatibility layers requires running PipeWire as the sound server. Set `services.pipewire.audio.enable` to true.";
+      }
     ];
 
     environment.systemPackages = [ cfg.package ]
diff --git a/nixos/modules/services/desktops/pipewire/wireplumber.nix b/nixos/modules/services/desktops/pipewire/wireplumber.nix
index 35f3c4737eae..32206ccb4e60 100644
--- a/nixos/modules/services/desktops/pipewire/wireplumber.nix
+++ b/nixos/modules/services/desktops/pipewire/wireplumber.nix
@@ -3,7 +3,7 @@
 let
   pwCfg = config.services.pipewire;
   cfg = pwCfg.wireplumber;
-  pwUsedForAudio = pwCfg.pulse.enable || pwCfg.alsa.enable || pwCfg.jack.enable;
+  pwUsedForAudio = pwCfg.audio.enable;
 in
 {
   meta.maintainers = [ lib.maintainers.k900 ];
@@ -36,10 +36,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 "";
+    environment.etc."wireplumber/main.lua.d/80-nixos.lua" = lib.mkIf (!pwUsedForAudio) {
+     text = ''
+        # Pipewire is not used for audio, so prevent it from grabbing audio devices
+        alsa_monitor.enable = function() end
+      '';
+    };
 
     systemd.packages = [ cfg.package ];