diff --git a/roles/pipewire/files/10-wireplumber.conf b/roles/pipewire/files/10-wireplumber.conf new file mode 100644 index 0000000..50c64d3 --- /dev/null +++ b/roles/pipewire/files/10-wireplumber.conf @@ -0,0 +1 @@ +context.exec = [ { path = "/usr/bin/wireplumber" args = "" } ] diff --git a/roles/pipewire/files/20-pipewire-pulse.conf b/roles/pipewire/files/20-pipewire-pulse.conf new file mode 100644 index 0000000..4e650f7 --- /dev/null +++ b/roles/pipewire/files/20-pipewire-pulse.conf @@ -0,0 +1 @@ +context.exec = [ { path = "/usr/bin/pipewire" args = "-c pipewire-pulse.conf" } ] diff --git a/roles/pipewire/files/pipewire.conf b/roles/pipewire/files/pipewire.conf deleted file mode 100644 index db0cd69..0000000 --- a/roles/pipewire/files/pipewire.conf +++ /dev/null @@ -1,247 +0,0 @@ -# Daemon config file for PipeWire version "0.3.42" # -# -# Copy and edit this file in /etc/pipewire for system-wide changes -# or in ~/.config/pipewire for local changes. - -context.properties = { - ## Configure properties in the system. - #library.name.system = support/libspa-support - #context.data-loop.library.name.system = support/libspa-support - #support.dbus = true - #link.max-buffers = 64 - link.max-buffers = 16 # version < 3 clients can't handle more - #mem.warn-mlock = false - #mem.allow-mlock = true - #mem.mlock-all = false - #clock.power-of-two-quantum = true - #log.level = 2 - #cpu.zero.denormals = true - - core.daemon = true # listening for socket connections - core.name = pipewire-0 # core name and socket name - - ## Properties for the DSP configuration. - #default.clock.rate = 48000 - #default.clock.allowed-rates = [ 48000 ] - #default.clock.quantum = 1024 - #default.clock.min-quantum = 32 - #default.clock.max-quantum = 8192 - #default.video.width = 640 - #default.video.height = 480 - #default.video.rate.num = 25 - #default.video.rate.denom = 1 - # - # These overrides are only applied when running in a vm. - vm.overrides = { - default.clock.min-quantum = 1024 - } -} - -context.spa-libs = { - # = - # - # Used to find spa factory names. It maps an spa factory name - # regular expression to a library name that should contain - # that factory. - # - audio.convert.* = audioconvert/libspa-audioconvert - api.alsa.* = alsa/libspa-alsa - api.v4l2.* = v4l2/libspa-v4l2 - api.libcamera.* = libcamera/libspa-libcamera - api.bluez5.* = bluez5/libspa-bluez5 - api.vulkan.* = vulkan/libspa-vulkan - api.jack.* = jack/libspa-jack - support.* = support/libspa-support - #videotestsrc = videotestsrc/libspa-videotestsrc - #audiotestsrc = audiotestsrc/libspa-audiotestsrc -} - -context.modules = [ - #{ name = - # [ args = { = ... } ] - # [ flags = [ [ ifexists ] [ nofail ] ] - #} - # - # Loads a module with the given parameters. - # If ifexists is given, the module is ignored when it is not found. - # If nofail is given, module initialization failures are ignored. - # - - # Uses RTKit to boost the data thread priority. - { name = libpipewire-module-rtkit - args = { - #nice.level = -11 - #rt.prio = 88 - #rt.time.soft = 2000000 - #rt.time.hard = 2000000 - } - flags = [ ifexists nofail ] - } - - # Set thread priorities without using RTKit. - #{ name = libpipewire-module-rt - # args = { - # nice.level = -11 - # rt.prio = 88 - # rt.time.soft = 2000000 - # rt.time.hard = 2000000 - # } - # flags = [ ifexists nofail ] - #} - - # The native communication protocol. - { name = libpipewire-module-protocol-native } - - # The profile module. Allows application to access profiler - # and performance data. It provides an interface that is used - # by pw-top and pw-profiler. - { name = libpipewire-module-profiler } - - # Allows applications to create metadata objects. It creates - # a factory for Metadata objects. - { name = libpipewire-module-metadata } - - # Creates a factory for making devices that run in the - # context of the PipeWire server. - { name = libpipewire-module-spa-device-factory } - - # Creates a factory for making nodes that run in the - # context of the PipeWire server. - { name = libpipewire-module-spa-node-factory } - - # Allows creating nodes that run in the context of the - # client. Is used by all clients that want to provide - # data to PipeWire. - { name = libpipewire-module-client-node } - - # Allows creating devices that run in the context of the - # client. Is used by the session manager. - { name = libpipewire-module-client-device } - - # The portal module monitors the PID of the portal process - # and tags connections with the same PID as portal - # connections. - { name = libpipewire-module-portal - flags = [ ifexists nofail ] - } - - # The access module can perform access checks and block - # new clients. - { name = libpipewire-module-access - args = { - # access.allowed to list an array of paths of allowed - # apps. - #access.allowed = [ - # /usr/bin/pipewire-media-session - #] - - # An array of rejected paths. - #access.rejected = [ ] - - # An array of paths with restricted access. - #access.restricted = [ ] - - # Anything not in the above lists gets assigned the - # access.force permission. - #access.force = flatpak - } - } - - # Makes a factory for wrapping nodes in an adapter with a - # converter and resampler. - { name = libpipewire-module-adapter } - - # Makes a factory for creating links between ports. - { name = libpipewire-module-link-factory } - - # Provides factories to make session manager objects. - { name = libpipewire-module-session-manager } -] - -context.objects = [ - #{ factory = - # [ args = { = ... } ] - # [ flags = [ [ nofail ] ] - #} - # - # Creates an object from a PipeWire factory with the given parameters. - # If nofail is given, errors are ignored (and no object is created). - # - #{ factory = spa-node-factory args = { factory.name = videotestsrc node.name = videotestsrc Spa:Pod:Object:Param:Props:patternType = 1 } } - #{ factory = spa-device-factory args = { factory.name = api.jack.device foo=bar } flags = [ nofail ] } - #{ factory = spa-device-factory args = { factory.name = api.alsa.enum.udev } } - #{ factory = spa-node-factory args = { factory.name = api.alsa.seq.bridge node.name = Internal-MIDI-Bridge } } - #{ factory = adapter args = { factory.name = audiotestsrc node.name = my-test } } - #{ factory = spa-node-factory args = { factory.name = api.vulkan.compute.source node.name = my-compute-source } } - - # A default dummy driver. This handles nodes marked with the "node.always-driver" - # property when no other driver is currently active. JACK clients need this. - { factory = spa-node-factory - args = { - factory.name = support.node.driver - node.name = Dummy-Driver - node.group = pipewire.dummy - priority.driver = 20000 - } - } - { factory = spa-node-factory - args = { - factory.name = support.node.driver - node.name = Freewheel-Driver - priority.driver = 19000 - node.group = pipewire.freewheel - node.freewheel = true - } - } - # This creates a new Source node. It will have input ports - # that you can link, to provide audio for this source. - #{ factory = adapter - # args = { - # factory.name = support.null-audio-sink - # node.name = "my-mic" - # node.description = "Microphone" - # media.class = "Audio/Source/Virtual" - # audio.position = "FL,FR" - # } - #} - - # This creates a single PCM source device for the given - # alsa device path hw:0. You can change source to sink - # to make a sink in the same way. - #{ factory = adapter - # args = { - # factory.name = api.alsa.pcm.source - # node.name = "alsa-source" - # node.description = "PCM Source" - # media.class = "Audio/Source" - # api.alsa.path = "hw:0" - # api.alsa.period-size = 1024 - # api.alsa.headroom = 0 - # api.alsa.disable-mmap = false - # api.alsa.disable-batch = false - # audio.format = "S16LE" - # audio.rate = 48000 - # audio.channels = 2 - # audio.position = "FL,FR" - # } - #} -] - -context.exec = [ - #{ path = [ args = "" ] } - # - # Execute the given program with arguments. - # - # You can optionally start the session manager here, - # but it is better to start it as a systemd service. - # Run the session manager with -h for options. - # - { path = "/bin/wireplumber" args = "" } - # - # You can optionally start the pulseaudio-server here as well - # but it is better to start it as a systemd service. - # It can be interesting to start another daemon here that listens - # on another address with the -a option (eg. -a tcp:4713). - # - #{ path = "/usr/bin/pipewire" args = "-c pipewire-pulse.conf" } -] diff --git a/roles/pipewire/tasks/main.yml b/roles/pipewire/tasks/main.yml index 8f3be8b..5555c1d 100644 --- a/roles/pipewire/tasks/main.yml +++ b/roles/pipewire/tasks/main.yml @@ -1,12 +1,18 @@ --- - name: create pipewire directory file: - path: ~/.config/pipewire/ + path: '{{ item }}' state: directory + loop: + - ~/.config/pipewire/ + - ~/.config/pipewire/pipewire.conf.d when: ansible_distribution == 'Void' - name: configure pipewire copy: - src: pipewire.conf - dest: ~/.config/pipewire/pipewire.conf + src: '{{ item }}' + dest: ~/.config/pipewire/pipewire.conf.d/ + loop: + - 10-wireplumber.conf + - 20-pipewire-pulse.conf when: ansible_distribution == 'Void' diff --git a/roles/sway/templates/by_host/osz/config.j2 b/roles/sway/templates/by_host/osz/config.j2 index acbf5c1..f79dd00 100644 --- a/roles/sway/templates/by_host/osz/config.j2 +++ b/roles/sway/templates/by_host/osz/config.j2 @@ -53,5 +53,4 @@ bindsym XF86MonBrightnessDown exec brightnessctl set 10%- && \ exec_always bash -c "pgrep -x syncthing || syncthing" # pipewire exec_always bash -c "pgrep -x pipewire || pipewire" -exec_always bash -c "pgrep -x pipewire-pulse || pipewire-pulse" #INCLUDE####################################################