{ config, lib, pkgs, username, ... }: let cfg = config.os.core.audio; in { options.os.core.audio = { enable = lib.mkEnableOption "audio support"; disable-devices.enable = lib.mkEnableOption "disables some random devices cluttering up"; }; config = lib.mkMerge [ (lib.mkIf cfg.enable { services = { pipewire = { enable = true; audio.enable = true; pulse.enable = true; alsa.enable = true; alsa.support32Bit = true; jack.enable = true; wireplumber.enable = true; }; playerctld.enable = true; spotifyd.enable = true; }; users.users.${username}.linger = true; security.rtkit.enable = true; hardware.enableAllFirmware = true; environment.systemPackages = with pkgs; [ crosspipe alsa-utils ]; }) (lib.mkIf cfg.disable-devices.enable { services.pipewire.wireplumber.extraConfig = { "99-disable-useless-devices"."monitor.alsa.rules" = [ { matches = [ { "device.name" = "~alsa_card.pci-0000_03_00.1*"; } { "device.description" = "~USB Audio*"; } ]; actions.update-props = { "device.disabled" = true; }; } ]; }; }) ]; }