diff --git a/modules/nixos/desktop/common/pipewire.nix b/modules/nixos/desktop/common/pipewire.nix index ca9988b..4c0af56 100644 --- a/modules/nixos/desktop/common/pipewire.nix +++ b/modules/nixos/desktop/common/pipewire.nix @@ -1,21 +1,59 @@ { - config, lib, + config, ... -}: { - security.rtkit.enable = lib.mkDefault config.services.pipewire.enable; - services = { - pulseaudio.enable = false; - pipewire = { +}: let + inherit (lib) mkEnableOption mkIf; + + cfg = config.sound.pipewire; +in { + options = { + sound.pipewire.enable = mkEnableOption "enable pipewire"; + }; + + config = mkIf cfg.enable { + security.rtkit.enable = true; + services.pulseaudio.enable = false; + services.pipewire = { enable = true; alsa.enable = true; pulse.enable = true; - extraConfig.pipewire."92-low-latency" = { - context.properties.default.clock = { - rate = 48000; - quantum = 32; - min-quantum = 32; - max-quantum = 32; + + extraConfig = { + pipewire = { + "92-low-latency" = { + "context.properties" = { + "default.clock.rate" = 48000; + "default.clock.allowed-rates" = [ + 44100 + 48000 + 88200 + 96000 + ]; + + "default.clock.min-quantum" = 512; + "default.clock.quantum" = 4096; + "default.clock.max-quantum" = 8192; + }; + }; + + "93-no-resampling" = { + "context.properties" = { + "default.clock.rate" = 48000; + "default.clock.allowed-rates" = [ + 44100 + 48000 + 96000 + 192000 + ]; + }; + }; + + "94-no-upmixing" = { + "stream.properties" = { + "channelmix.upmix" = false; + }; + }; }; }; }; diff --git a/modules/nixos/desktop/cosmic.nix b/modules/nixos/desktop/cosmic.nix index f4ba9d7..2f7e09e 100644 --- a/modules/nixos/desktop/cosmic.nix +++ b/modules/nixos/desktop/cosmic.nix @@ -8,7 +8,6 @@ cfg = config.desktop.cosmic; in { imports = with inputs; [ - ./common/pipewire.nix nixos-cosmic.nixosModules.default ]; options = { @@ -16,6 +15,7 @@ in { lib.mkEnableOption "enable cosmic desktop"; }; config = lib.mkIf cfg.enable { + sound.pipewire.enable = true; nix.settings = { substituters = ["https://cosmic.cachix.org/"]; trusted-public-keys = ["cosmic.cachix.org-1:Dya9IyXD4xdBehWjrkPv6rtxpmMdRel02smYzA85dPE="]; diff --git a/modules/nixos/desktop/default.nix b/modules/nixos/desktop/default.nix index 82461ef..29366e9 100644 --- a/modules/nixos/desktop/default.nix +++ b/modules/nixos/desktop/default.nix @@ -1,5 +1,6 @@ { imports = [ + ./common/pipewire.nix # ./cosmic.nix ./gnome.nix ./hyprland.nix diff --git a/modules/nixos/desktop/gnome.nix b/modules/nixos/desktop/gnome.nix index f237aba..7aec45b 100644 --- a/modules/nixos/desktop/gnome.nix +++ b/modules/nixos/desktop/gnome.nix @@ -1,18 +1,17 @@ { config, - pkgs, lib, ... }: with lib; let cfg = config.desktop.gnome; in { - imports = [./common/pipewire.nix]; options = { desktop.gnome.enable = mkEnableOption "enable gnome desktop"; }; config = mkIf cfg.enable { + sound.pipewire.enable = true; services.xserver = { enable = true; displayManager.gdm.enable = true; diff --git a/modules/nixos/desktop/hyprland.nix b/modules/nixos/desktop/hyprland.nix index 97220f6..8325dc9 100644 --- a/modules/nixos/desktop/hyprland.nix +++ b/modules/nixos/desktop/hyprland.nix @@ -8,12 +8,12 @@ with lib; let cfg = config.desktop.hyprland; in { - imports = [./common/pipewire.nix]; options = { desktop.hyprland.enable = mkEnableOption "enable hyprland desktop"; }; config = mkIf cfg.enable { + sound.pipewire.enable = true; programs.hyprland = { enable = true; package = perSystem.hyprland.hyprland; diff --git a/modules/nixos/desktop/niri.nix b/modules/nixos/desktop/niri.nix index ca96186..8dadabc 100644 --- a/modules/nixos/desktop/niri.nix +++ b/modules/nixos/desktop/niri.nix @@ -7,12 +7,12 @@ with lib; let cfg = config.desktop.niri; in { - imports = [./common/pipewire.nix]; options = { desktop.niri.enable = mkEnableOption "enable niri desktop"; }; config = mkIf cfg.enable { + sound.pipewire.enable = true; programs.niri.enable = true; environment.systemPackages = with pkgs; [ brightnessctl