# ALSA monitor config file for PipeWire version "0.3.28" #

# saivert on #pipewire made this 2021-05-23 around 15 Z
# based on pw-cli dump short node && pw-cli dump short device
# save as ~/.config/pipewire/media-session.d/alsa-monitor.conf
# then restart pipewire and pipewire-pulse like so: systemctl --user restart pipewire pipewire-pulse

properties = {
	# Create a JACK device. This is not enabled by default because
	# it requires that the PipeWire JACK replacement libraries are
	# not used by the session manager, in order to be able to
	# connect to the real JACK server.
	#alsa.jack-device = false

	# Reserve devices.
	#alsa.reserve = true
}

rules = [
	# An array of matches/actions to evaluate.
	{
		# Rules for matching a device or node. It is an array of
		# properties that all need to match the regexp. If any of the
		# matches work, the actions are executed for the object.
		matches = [
			{
				# This matches all cards. These are regular expressions
				# so "." matches one character and ".*" matches many.
				device.name = "~alsa_card.*"
			}
		]
		actions = {
			# Actions can update properties on the matched object.
			update-props = {
				# Use ALSA-Card-Profile devices. They use UCM or
				# the profile configuration to configure the device
				# and mixer settings.
				api.alsa.use-acp = true

				# Use UCM instead of profile when available. Can be
				# disabled to skip trying to use the UCM profile.
				#api.alsa.use-ucm = true

				# Don't use the hardware mixer for volume control. It
				# will only use software volume. The mixer is still used
				# to mute unused paths based on the selected port.
				#api.alsa.soft-mixer = false

				# Ignore decibel settings of the driver. Can be used to
				# work around buggy drivers that report wrong values.
				#api.alsa.ignore-dB = false

				# The profile set to use for the device. Usually this is
				# "default.conf" but can be changed with a udev rule
				# or here.
				#device.profile-set = "profileset-name.conf"

				# The default active profile. Is by default set to "Off".
				#device.profile = "default profile name"

				# Automatically select the best profile. This is the
				# highest priority available profile. This is disabled
				# here and instead implemented in the session manager
				# where it can save and load previous preferences.
				api.acp.auto-profile = false

				# Automatically switch to the highest priority available
				# port. This is disabled here and implemented in the
				# session manager instead.
				api.acp.auto-port = false

				# Other properties can be set here.
				#device.nick = "My Device"
			}
		}
	}

# Begin customized config section

	{
		matches = [
			{
				# This matches your USB headset
				device.name = "alsa_card.usb-Logitech_Logitech_USB_Headset-00"
			}
		]
		actions = {
			# Actions can update properties on the matched object.
			update-props = {
				api.alsa.soft-mixer = true
			}
		}
	}

#End customized config section

	{
		matches = [
			{
				# Matches all sources. These are regular expressions
				# so "." matches one character and ".*" matches many.
				node.name = "~alsa_input.*"
			}
			{
				# Matches all sinks.
				node.name = "~alsa_output.*"
			}
		]
		actions = {
			update-props = {
				#node.nick				= "My Node"
				#node.nick				= null
				#priority.driver		= 100
				#priority.session		= 100
				node.pause-on-idle		= false
				#resample.quality		= 4
				#channelmix.normalize	= false
				#channelmix.mix-lfe		= false
				#audio.channels			= 2
				#audio.format			= "S16LE"
				#audio.rate				= 44100
				#audio.position			= "FL,FR"
				#session.suspend-timeout-seconds = 5		# 0 disables suspend
				#monitor.channel-volumes = false

				#api.alsa.period-size	= 1024
				#api.alsa.headroom		= 0
				#api.alsa.start-delay	= 0
				#api.alsa.disable-mmap	= false
				#api.alsa.disable-batch = false
				#api.alsa.use-chmap		= false
			}
		}
	}
]