{ lib, config, pkgs, ... }: with lib; let cfg = config.roles.audio; in { options.roles.audio = { enable = mkEnableOption "Enable the audio role"; pulseAudio = mkOption { type = types.bool; default = false; description = "Use PulseAudio exclusively instead of Pipewire"; }; }; config = mkIf cfg.enable (mkMerge [ (mkIf cfg.pulseAudio { services.pipewire.enable = false; services.pulseaudio = { enable = true; package = pkgs.pulseaudioFull; systemWide = true; extraConfig = '' load-module module-combine-sink load-module module-switch-on-connect ''; }; nixpkgs.config.pulseaudio = true; }) (mkIf (!cfg.pulseAudio) { services.pipewire = { enable = true; systemWide = true; audio.enable = true; pulse.enable = true; alsa = { enable = true; support32Bit = true; }; jack.enable = true; }; }) { environment.systemPackages = with pkgs; [ paprefs pavucontrol pulsemixer ]; services.squeezelite = { #enable = true; pulseAudio = true; }; } ]); }