# Register well-known SPA factories
add-spa-lib audio.convert* audioconvert/libspa-audioconvert
add-spa-lib api.alsa.* alsa/libspa-alsa
add-spa-lib api.v4l2.* v4l2/libspa-v4l2
add-spa-lib api.bluez5.* bluez5/libspa-bluez5
add-spa-lib api.vulkan.* vulkan/libspa-vulkan
add-spa-lib api.jack.* jack/libspa-jack

# Create the sessions
create-session audio
create-session video

# Load session item factories (building blocks for the session management graph)
# Do not comment these out unless you really know what you are doing
load-module C libwireplumber-module-si-standard-link
load-module C libwireplumber-module-si-adapter
load-module C libwireplumber-module-si-convert
load-module C libwireplumber-module-si-fake-stream
load-module C libwireplumber-module-si-simple-node-endpoint
load-module C libwireplumber-module-si-audio-softdsp-endpoint
load-module C libwireplumber-module-si-monitor-endpoint
load-module C libwireplumber-module-si-bluez5-endpoint

# Additional PipeWire modules can also be loaded in WirePlumber like this.
# libpipewire already loads all the modules that we normally need, though.
# spa-node-factory may be needed if you want to use a monitor with 'local-nodes'
# but without 'use-adapter' (adapter is loaded by default, but spa-node-factory isn't)
#load-pipewire-module libpipewire-module-spa-node-factory


#
# Load device monitors
#
# factory: the SPA factory name to load (must be registered above)
# flags:
#   use-adapter: Use 'adapter' instead of 'spa-node-factory' to create the nodes
#     (you normally want this for audio nodes)
#   local-nodes: Run the nodes in the WirePlumber process instead of the
#     PipeWire one (useful for high latency devices, to avoid stalling PipeWire)
#

load-module C libwireplumber-module-monitor {
  "alsa":   <{"factory": <"api.alsa.enum.udev">,   "flags": <["use-acp", "use-adapter"]>}>,
  "bluez5": <{"factory": <"api.bluez5.enum.dbus">, "flags": <["local-nodes", "use-adapter"]>}>,
  "v4l2":   <{"factory": <"api.v4l2.enum.udev">}>
}

#
# Load functionality plugins
#

# Grants dbus reservation functionality
load-module C libwireplumber-module-dbus-reservation

# Grants functionality to store and restaure default device profiles
load-module C libwireplumber-module-default-profile

# Grants access to security confined clients
load-module C libwireplumber-module-client-permissions

# Automatically sets device profiles to 'On'
load-module C libwireplumber-module-device-activation

# Automatically suspends idle nodes after 3 seconds
load-module C libwireplumber-module-node-suspension

# Grants functionality to store and restore default metadata such as default endpoints
load-module C libwireplumber-module-default-metadata

# Implements static objects creation based on TOML configuration files
load-module C libwireplumber-module-config-static-objects

# Implements creation of endpoints
load-module C libwireplumber-module-endpoint-creation

# Implements linking clients to devices based on TOML configuration files
load-module C libwireplumber-module-config-policy

# Implements storing metadata about objects in RAM
load-module C libwireplumber-module-metadata

# load-module C libwireplumber-module-lua-scripting {
#   "profile": <"desktop">
# }
