# Policy Configuration

## policy.lua.d/10-default-policy.lua

This file contains generic default policy properties that can be configured.

- default_policy.policy

  This is a Lua object that contains several properties that change the behavior of the default WirePlumber policy.

  Example:

      default_policy.policy = {
        ["move"] = true,
      }

  The above example will set the `move` policy property to `true`.

  The list of supported properties are:

      ["move"] = true

  Moves session items when metadata `target.node` changes.

      ["follow"] = true

  Moves session items to the default device when it has changed.

      ["audio.no-dsp"] = false

  Set to `true` to disable channel splitting & merging on nodes and enable passthrough of audio in the same format as the format of the device. Note that this breaks JACK support; it is generally not recommended.

      ["duck.level"] = 0.3

  How much to lower the volume of lower priority streams when ducking. Note that this is a linear volume modifier (not cubic as in PulseAudio).

## policy.lua.d/50-endpoints-config.lua

> Endpoints are objects that can group multiple clients into different groups or roles. This is useful if a user wants to apply specific actions when a client is connected to a particular role/endpoint. This configuration file allows users to configure those endpoints and their actions.

- default_policy.policy.roles

  This is a Lua array with objects defining the actions of each role.

  Example:

      default_policy.policy.roles = {
        ["Multimedia"] = {
          ["alias"] = { "Movie", "Music", "Game" },
          ["priority"] = 10,
          ["action.default"] = "mix",
        }
        ["Notification"] = {
          ["priority"] = 20,
          ["action.default"] = "duck",
          ["action.Notification"] = "mix",
        }
      }

  The above example defines actions for both `Multimedia` and `Notification` roles. Since the Notification role has more priority than the Multimedia role, when a client connects to the Notification endpoint, it will `duck` the volume of all Multimedia clients. If Multiple Notification clients want to play audio, only the Notifications audio will be mixed.

  Possible values of actions are: `mix` (Mixes audio), `duck` (Mixes and lowers the audio volume) or `cork` (Pauses audio).

- default_policy.policy.endpoints

  This is a Lua array with objects defining the endpoints that the user wants to create.

  Example:

      default_policy.endpoints = {
        ["endpoint.multimedia"] = {
          ["media.class"] = "Audio/Sink",
          ["role"] = "Multimedia",
        }
      },
      ["endpoint.notifications"] = {
        ["media.class"] = "Audio/Sink",
        ["role"] = "Notification",
      }

  This example creates 2 endpoints, with names `endpoint.multimedia` and `endpoint.notifications`; and assigned roles `Multimedia` and `Notification` respectively. Both endpoints have `Audio/Sink` media class, and so are only used for playback.