diff --git a/packages.yaml b/packages.yaml index f3f86c6..7866f80 100644 --- a/packages.yaml +++ b/packages.yaml @@ -10,6 +10,7 @@ packages: - antergos-welcome - antergos-grub-theme - antergos-live + - pipewire - calamares - calamares-branding-antergos-next - calamares-branding-antergos-next-minimal diff --git a/packages/calamares-branding-antergos-next-minimal/show.qml b/packages/calamares-branding-antergos-next-minimal/show.qml index 883b3a9..667e358 100644 --- a/packages/calamares-branding-antergos-next-minimal/show.qml +++ b/packages/calamares-branding-antergos-next-minimal/show.qml @@ -89,18 +89,18 @@ Item { anchors.fill: parent slides: [ Dia { - title: qsTr("Welcome to Antergos NeXT") - body: qsTr("A modern Arch Linux experience built on Artix Linux. Rolling release, OpenRC init, and the latest software.") + title: qsTr("Welcome to Antergos NeXT Minimal") + body: qsTr("Arch Linux powered by Artix. Rolling release, dinit init, Xfce desktop, and the latest software.") footer: qsTr("Choose your preferred desktop environment during setup") }, Dia { title: qsTr("Desktop Environments") - body: qsTr("Select from KDE Plasma, GNOME, Xfce, Budgie, Cinnamon, MATE, LXQt, i3, Sway, or Hyprland.") + body: qsTr("Select from KDE Plasma, Xfce, Cinnamon, MATE, LXQt, i3, Sway, or Hyprland.") footer: qsTr("A curated selection of the best Linux desktops") }, Dia { title: qsTr("Antergos Tools") - body: qsTr("Welcome app for system configuration, Calamares installer with offline and online modes, and full access to Arch Linux repositories and the AUR.") + body: qsTr("Welcome app for system configuration, Calamares installer with offline and online modes, and full access to the AUR.") footer: qsTr("Everything you need to get started") }, Dia { diff --git a/packages/calamares-branding-antergos-next/show.qml b/packages/calamares-branding-antergos-next/show.qml index 883b3a9..898d57d 100644 --- a/packages/calamares-branding-antergos-next/show.qml +++ b/packages/calamares-branding-antergos-next/show.qml @@ -90,17 +90,17 @@ Item { slides: [ Dia { title: qsTr("Welcome to Antergos NeXT") - body: qsTr("A modern Arch Linux experience built on Artix Linux. Rolling release, OpenRC init, and the latest software.") + body: qsTr("Arch Linux powered by Artix. Rolling release, dinit init, and the latest software.") footer: qsTr("Choose your preferred desktop environment during setup") }, Dia { title: qsTr("Desktop Environments") - body: qsTr("Select from KDE Plasma, GNOME, Xfce, Budgie, Cinnamon, MATE, LXQt, i3, Sway, or Hyprland.") + body: qsTr("Select from KDE Plasma, Xfce, Cinnamon, MATE, LXQt, i3, Sway, or Hyprland.") footer: qsTr("A curated selection of the best Linux desktops") }, Dia { title: qsTr("Antergos Tools") - body: qsTr("Welcome app for system configuration, Calamares installer with offline and online modes, and full access to Arch Linux repositories and the AUR.") + body: qsTr("Welcome app for system configuration, Calamares installer with offline and online modes, and full access to the AUR.") footer: qsTr("Everything you need to get started") }, Dia { diff --git a/packages/pipewire/PKGBUILD b/packages/pipewire/PKGBUILD new file mode 100644 index 0000000..c5f424d --- /dev/null +++ b/packages/pipewire/PKGBUILD @@ -0,0 +1,583 @@ +# Maintainer: David Runge +# Maintainer: Jan Alexander Steffens (heftig) +# Contributor: Jan de Groot +# Antergos NeXT: patched artix-pipewire-launcher to support dinit + +pkgbase=pipewire +pkgname=( + pipewire + libpipewire + alsa-card-profiles + pipewire-docs + pipewire-libcamera + pipewire-audio + pipewire-alsa + pipewire-ffado + pipewire-jack-client + pipewire-jack + pipewire-pulse + pipewire-roc + gst-plugin-pipewire + pipewire-zeroconf + pipewire-v4l2 + pipewire-x11-bell + pipewire-session-manager + pulse-native-provider +) +pkgver=1.6.7 +pkgrel=1 +epoch=1 +pkgdesc="Low-latency audio/video router and processor (Antergos NeXT: dinit support in artix-pipewire-launcher)" +url="https://pipewire.org" +arch=(x86_64) +license=(MIT) +makedepends=( + alsa-lib + avahi + bluez-libs + dbus + doxygen + fftw + git + glib2 + glib2-devel + graphviz + gst-plugins-base + jack2 + libcamera + libcanberra + libebur128 + libfdk-aac + libffado + libfreeaptx + libgcc + liblc3 + libldac + libmysofa + libpulse + libsndfile + libstdc++ + libusb + libx11 + libxfixes + lilv + meson + ncurses + opus + python-docutils + python-packaging + readline + roc-toolkit + rtkit + sbc + sdl2 + spandsp + valgrind + webrtc-audio-processing-1 +) +checkdepends=( + desktop-file-utils + openal +) +source=( + "git+https://gitlab.freedesktop.org/pipewire/pipewire.git#tag=$pkgver" + systemd.patch + artix-pipewire-launcher +) +b2sums=('SKIP' + 'SKIP' + 'SKIP') + +prepare() { + cd pipewire + patch -Np1 -i ../systemd.patch +} + +build() { + local meson_options=( + -D bluez5-codec-lc3plus=disabled + -D bluez5-codec-ldac-dec=disabled + -D docs=enabled + -D jack-devel=true + -D libjack-path=/usr/lib + -D man=enabled + -D rlimits-install=false + -D selinux=disabled + -D session-managers=[] + -D snap=disabled + -D udevrulesdir=/usr/lib/udev/rules.d + -D rlimits-install=false + -D logind-provider=libelogind + ) + + artix-meson pipewire build "${meson_options[@]}" + meson compile -C build +} + +check() { + meson test -C build --print-errorlogs +} + +_pick() { + local p="$1" f d; shift + for f; do + d="$srcdir/$p/${f#$pkgdir/}" + mkdir -p "$(dirname "$d")" + mv "$f" "$d" + rmdir -p --ignore-fail-on-non-empty "$(dirname "$f")" + done +} + +_pwname=pipewire-0.3 +_spaname=spa-0.2 + +package_pipewire() { + license+=( + # libspa-alsa + LGPL-2.1-or-later + ) + depends=( + "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so + dbus libdbus-1.so + glib2 libglib-2.0.so + glibc + libgcc + ncurses libncursesw.so + readline libreadline.so + ) + optdepends=( + 'gst-plugin-pipewire: GStreamer plugin' + 'pipewire-alsa: ALSA configuration' + 'pipewire-audio: Audio support' + 'pipewire-docs: Documentation' + 'pipewire-ffado: FireWire support' + 'pipewire-jack-client: PipeWire as JACK client' + 'pipewire-jack: JACK replacement' + 'pipewire-libcamera: Libcamera support' + 'pipewire-pulse: PulseAudio replacement' + 'pipewire-roc: ROC streaming' + 'pipewire-session-manager: Session manager' + 'pipewire-v4l2: V4L2 interceptor' + 'pipewire-x11-bell: X11 bell' + 'pipewire-zeroconf: Zeroconf support' + 'realtime-privileges: realtime privileges with rt module' + 'rtkit: realtime privileges with rtkit module' + ) + + meson install -C build --destdir "$pkgdir" + + ( + cd "$pkgdir" + + # Replace copies with symlinks + for _f in pipewire-{aes67,avb,pulse}; do + cmp usr/bin/pipewire usr/bin/$_f + ln -sf pipewire usr/bin/$_f + done + + _pick lib usr/include/{$_pwname,$_spaname} + _pick lib usr/lib/$_spaname/libspa.so* + _pick lib usr/lib/lib$_pwname.so* + _pick lib usr/lib/pkgconfig/lib{$_pwname,$_spaname}.pc + + _pick acp usr/lib/udev + _pick acp usr/share/alsa-card-profile + + _pick docs usr/share/doc + + _pick libcamera usr/lib/$_spaname/libcamera + + + _pick audio usr/bin/pipewire-{aes67,avb} + _pick audio usr/bin/pw-{cat,loopback,mididump,midi2play,midi2record,sysex} + _pick audio usr/bin/pw-{dsd,enc,midi,}play + _pick audio usr/bin/pw-{midi,}record + _pick audio usr/bin/spa-{acp-tool,resample} + _pick audio usr/lib/alsa-lib + _pick audio usr/lib/$_pwname/libpipewire-module-avb.so + _pick audio usr/lib/$_pwname/libpipewire-module-echo-cancel.so + _pick audio usr/lib/$_pwname/libpipewire-module-fallback-sink.so + _pick audio usr/lib/$_pwname/libpipewire-module-filter-chain*.so + _pick audio usr/lib/$_pwname/libpipewire-module-loopback.so + _pick audio usr/lib/$_pwname/libpipewire-module-netjack2*.so + _pick audio usr/lib/$_pwname/libpipewire-module-parametric-equalizer.so + _pick audio usr/lib/$_pwname/libpipewire-module-pipe-tunnel.so + _pick audio usr/lib/$_pwname/libpipewire-module-protocol-simple.so + _pick audio usr/lib/$_pwname/libpipewire-module-rtp-{sap,sink,source}.so + _pick audio usr/lib/$_pwname/libpipewire-module-vban*.so + _pick audio usr/lib/$_spaname/{aec,alsa,audio*,avb,bluez5,filter-graph} + _pick audio usr/share/alsa + _pick audio usr/share/man/man1/pw-{cat,loopback,mididump}.1 + _pick audio usr/share/man/man1/spa-{acp-tool,resample}.1 + _pick audio usr/share/man/man5/pipewire-filter-chain.conf.5 + _pick audio usr/share/man/man7/libpipewire-module-avb.7 + _pick audio usr/share/man/man7/libpipewire-module-echo-cancel.7 + _pick audio usr/share/man/man7/libpipewire-module-fallback-sink.7 + _pick audio usr/share/man/man7/libpipewire-module-filter-chain*.7 + _pick audio usr/share/man/man7/libpipewire-module-loopback.7 + _pick audio usr/share/man/man7/libpipewire-module-netjack2*.7 + _pick audio usr/share/man/man7/libpipewire-module-parametric-equalizer.7 + _pick audio usr/share/man/man7/libpipewire-module-pipe-tunnel.7 + _pick audio usr/share/man/man7/libpipewire-module-protocol-simple.7 + _pick audio usr/share/man/man7/libpipewire-module-rtp-{sap,sink,source}.7 + _pick audio usr/share/man/man7/libpipewire-module-vban*.7 + _pick audio usr/share/pipewire/filter-chain* + _pick audio usr/share/pipewire/pipewire-{aes67,avb}.conf + _pick audio usr/share/$_spaname/bluez5 + + _pick ffado usr/lib/$_pwname/libpipewire-module-ffado*.so + _pick ffado usr/share/man/man7/libpipewire-module-ffado-driver.7 + + _pick jack-client usr/lib/$_pwname/libpipewire-module-jack{-tunnel,dbus-detect}.so + _pick jack-client usr/lib/$_spaname/jack + _pick jack-client usr/share/man/man7/libpipewire-module-jack{-tunnel,dbus-detect}.7 + + _pick jack usr/bin/pw-jack + _pick jack usr/include/jack + _pick jack usr/lib/libjack* + _pick jack usr/lib/pkgconfig/jack*.pc + _pick jack usr/share/man/man1/pw-jack.1 + _pick jack usr/share/man/man5/pipewire-jack.conf.5 + _pick jack usr/share/pipewire/jack.conf + + _pick pulse usr/bin/pipewire-pulse + _pick pulse usr/lib/$_pwname/libpipewire-module-protocol-pulse.so + _pick pulse usr/lib/$_pwname/libpipewire-module-pulse-tunnel.so + _pick pulse usr/share/glib-2.0/schemas/org.freedesktop.pulseaudio.gschema.xml + _pick pulse usr/share/man/man1/pipewire-pulse.1 + _pick pulse usr/share/man/man5/pipewire-pulse.conf.5 + _pick pulse usr/share/man/man7/libpipewire-module-{protocol-pulse,pulse-tunnel}.7 + _pick pulse usr/share/man/man7/pipewire-pulse*.7 + _pick pulse usr/share/pipewire/pipewire-pulse.conf + + _pick roc usr/lib/$_pwname/libpipewire-module-roc*.so + _pick roc usr/share/man/man7/libpipewire-module-roc-{sink,source}.7 + + _pick gst usr/lib/gstreamer-1.0 + + _pick zeroconf usr/lib/$_pwname/libpipewire-module-{raop,zeroconf}-*.so + _pick zeroconf usr/lib/$_pwname/libpipewire-module-rtp-session.so + _pick zeroconf usr/lib/$_pwname/libpipewire-module-snapcast-discover.so + _pick zeroconf usr/share/man/man7/libpipewire-module-{raop,zeroconf}-*.7 + _pick zeroconf usr/share/man/man7/libpipewire-module-rtp-session.7 + _pick zeroconf usr/share/man/man7/libpipewire-module-snapcast-discover.7 + + _pick v4l2 usr/bin/pw-v4l2 usr/lib/$_pwname/v4l2 + _pick v4l2 usr/share/man/man1/pw-v4l2.1 + + _pick x11-bell usr/lib/$_pwname/libpipewire-module-x11-bell.so + _pick x11-bell usr/share/man/man7/libpipewire-module-x11-bell.7 + + # directories for overrides + mkdir -p etc/pipewire/{client-rt,client,minimal,pipewire}.conf.d + ) + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING + install -Dm755 $srcdir/artix-pipewire-launcher $pkgdir/usr/bin +} + +package_libpipewire() { + pkgdesc+=" - client library" + depends=( + glibc + libgcc + ) + provides=(lib$_pwname.so) + + mv lib/* "$pkgdir" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_alsa-card-profiles() { + pkgdesc+=" - ALSA card profiles" + license=(LGPL-2.1-or-later) + + mv acp/* "$pkgdir" +} + +package_pipewire-docs() { + pkgdesc+=" - documentation" + + mv docs/* "$pkgdir" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_pipewire-libcamera() { + pkgdesc+=" - Libcamera support" + depends=( + glibc + libcamera libcamera-base.so libcamera.so + libgcc + libstdc++ + pipewire + ) + + mv libcamera/* "$pkgdir" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_pipewire-audio() { + pkgdesc+=" - Audio support" + depends=( + "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so + "pipewire=$epoch:$pkgver-$pkgrel" + alsa-card-profiles + alsa-lib libasound.so + bluez-libs libbluetooth.so + dbus libdbus-1.so + fftw libfftw3f.so + glib2 libg{lib,object,io}-2.0.so + glibc + libebur128 + libfdk-aac libfdk-aac.so + libfreeaptx libfreeaptx.so + libgcc + liblc3 liblc3.so + libldac libldacBT_enc.so + libmysofa libmysofa.so + libsndfile libsndfile.so + libstdc++ + libusb libusb-1.0.so + lilv liblilv-0.so + opus libopus.so + sbc libsbc.so + spandsp libspandsp.so + webrtc-audio-processing-1 libwebrtc-audio-processing-1.so + ) + provides=( + ladspa-host + lv2-host + ) + + mv audio/* "$pkgdir" + + mkdir -p "$pkgdir/etc/alsa/conf.d" + ln -st "$pkgdir/etc/alsa/conf.d" \ + /usr/share/alsa/alsa.conf.d/50-pipewire.conf + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_pipewire-alsa() { + pkgdesc+=" - ALSA configuration" + depends=( + "pipewire-audio=$epoch:$pkgver-$pkgrel" + "pipewire=$epoch:$pkgver-$pkgrel" + pipewire-session-manager + ) + + mkdir -p "$pkgdir/etc/alsa/conf.d" + ln -st "$pkgdir/etc/alsa/conf.d" \ + /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf + + install -Dm644 /dev/null \ + "$pkgdir/usr/share/pipewire/media-session.d/with-alsa" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_pipewire-ffado() { + pkgdesc+=" - FireWire support" + depends=( + "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so + "pipewire-audio=$epoch:$pkgver-$pkgrel" + "pipewire=$epoch:$pkgver-$pkgrel" + glibc + libffado libffado.so + ) + + mv ffado/* "$pkgdir" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_pipewire-jack-client() { + pkgdesc+=" - PipeWire as JACK client" + depends=( + "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so + "pipewire-audio=$epoch:$pkgver-$pkgrel" + "pipewire=$epoch:$pkgver-$pkgrel" + dbus libdbus-1.so + glibc + jack libjack.so + libgcc + ) + conflicts=(pipewire-jack) + + mv jack-client/* "$pkgdir" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_pipewire-jack() { + pkgdesc+=" - JACK replacement" + license+=( + # libjackserver + GPL-2.0-only + LGPL-2.1-or-later + ) + depends=( + "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so + "pipewire-audio=$epoch:$pkgver-$pkgrel" + "pipewire=$epoch:$pkgver-$pkgrel" + glibc + pipewire-session-manager + sh + ) + optdepends=( + 'jack-example-tools: for official JACK example-clients and tools' + ) + conflicts=( + jack + jack2 + pipewire-jack-client + ) + provides=( + jack + libjack.so + libjacknet.so + libjackserver.so + ) + + mv jack/* "$pkgdir" + + install -Dm644 /dev/null \ + "$pkgdir/usr/share/pipewire/media-session.d/with-jack" + + # directories for overrides + mkdir -p "$pkgdir/etc/pipewire/jack.conf.d" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + + +package_pipewire-pulse() { + pkgdesc+=" - PulseAudio replacement" + depends=( + "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so + "pipewire-audio=$epoch:$pkgver-$pkgrel" + "pipewire=$epoch:$pkgver-$pkgrel" + avahi libavahi-{client,common}.so + dbus libdbus-1.so + dconf + glib2 libg{lib,object,io}-2.0.so + glibc + libgcc + libpulse libpulse.so + pipewire-session-manager + ) + provides=(pulse-native-provider) + conflicts=(pulseaudio) + + mv pulse/* "$pkgdir" + + # directory for overrides + mkdir -p "$pkgdir/etc/pipewire/pipewire-pulse.conf.d" + + install -Dm644 /dev/null \ + "$pkgdir/usr/share/pipewire/media-session.d/with-pulseaudio" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_pipewire-roc() { + pkgdesc+=" - ROC streaming support" + depends=( + "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so + "pipewire-audio=$epoch:$pkgver-$pkgrel" + "pipewire=$epoch:$pkgver-$pkgrel" + glibc + libgcc + roc-toolkit libroc.so + ) + + mv roc/* "$pkgdir" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_gst-plugin-pipewire() { + pkgdesc="Multimedia graph framework - pipewire plugin" + depends=( + "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so + "pipewire-audio=$epoch:$pkgver-$pkgrel" + "pipewire=$epoch:$pkgver-$pkgrel" + glib2 libg{lib,object}-2.0.so + glibc + gst-plugins-base-libs + gstreamer + libgcc + pipewire-session-manager + ) + + mv gst/* "$pkgdir" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_pipewire-zeroconf() { + pkgdesc+=" - Zeroconf support" + depends=( + "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so + "pipewire-audio=$epoch:$pkgver-$pkgrel" + "pipewire=$epoch:$pkgver-$pkgrel" + avahi libavahi-{client,common}.so + glibc + libgcc + openssl libcrypto.so + opus libopus.so + ) + + mv zeroconf/* "$pkgdir" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_pipewire-v4l2() { + pkgdesc+=" - V4L2 interceptor" + depends=( + "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so + "pipewire=$epoch:$pkgver-$pkgrel" + glibc + pipewire-session-manager + sh + ) + + mv v4l2/* "$pkgdir" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_pipewire-x11-bell() { + pkgdesc+=" - X11 bell" + depends=( + "libpipewire=$epoch:$pkgver-$pkgrel" lib$_pwname.so + "pipewire-audio=$epoch:$pkgver-$pkgrel" + "pipewire=$epoch:$pkgver-$pkgrel" + glibc + libcanberra libcanberra.so + libx11 + libxfixes + ) + + mv x11-bell/* "$pkgdir" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_pipewire-session-manager() { + pkgdesc="Session manager for PipeWire (default provider)" + license=(CC0-1.0) + depends=(wireplumber) +} + +package_pulse-native-provider() { + pkgdesc="PulseAudio sound server (default provider)" + license=(CC0-1.0) + depends=(pipewire-pulse) +} + +# vim:set sw=2 sts=-1 et: diff --git a/packages/pipewire/artix-pipewire-launcher b/packages/pipewire/artix-pipewire-launcher new file mode 100644 index 0000000..939b2d9 --- /dev/null +++ b/packages/pipewire/artix-pipewire-launcher @@ -0,0 +1,83 @@ +#!/bin/sh + +# WARNING: This script assumes being run inside XDG compliant session, +# which means D-Bus session instance is expected to be correctly set up +# prior to this script starting. If that is not true, things may break! + +DATE_FORMAT='+%Y-%m-%dT%H:%M:%S%Z' + +for init in dinit openrc runit s6; do + [[ -f /sbin/$init-init ]] && case $init in + openrc) SUPPORT='' ;; + dinit|runit|s6) SUPPORT='YES' ;; + esac && break +done + +[ $SUPPORT ] || { echo "Unsupported method; use the service manager (rc-service/dinitctl) to control PipeWire."; exit 1; } + +startpw() { + # The core daemon which by itself does probably nothing. + echo "[$(date "${DATE_FORMAT}")] Starting PipeWire." 1>>"${ARTIX_PIPEWIRE_LOG}" + echo -n "Starting PipeWire... " + /usr/bin/pipewire 1>>"${ARTIX_PIPEWIRE_LOG}" 2>&1 & + + # The so called pipewire-pulse daemon used for PulseAudio compatibility. + # Commenting this out will stop the PA proxying daemon from starting, + # however ALSA (with pipewire-alsa), JACK (with jack-sdk) and PW API using + # clients will still have access to audio and may end up clashing with + # non-PW apps over HW control (most notably, /usr/bin/pulseaudio daemon). + echo "[$(date "${DATE_FORMAT}")] Starting PipeWire-Pulse." 1>>"${ARTIX_PIPEWIRE_PULSE_LOG}" + echo -n "PipeWire-Pulse... " + /usr/bin/pipewire -c pipewire-pulse.conf 1>>"${ARTIX_PIPEWIRE_PULSE_LOG}" 2>&1 & + + # Hack for bug #822498 + sleep 1 + + # Finally a session manager is required for PipeWire to do anything + echo "[$(date "${DATE_FORMAT}")] Starting WirePlumber." 1>>"${ARTIX_WIREPLUMBER_LOG}" + echo -n "WirePlumber... " + /usr/bin/wireplumber 1>>"${ARTIX_WIREPLUMBER_LOG}" 2>&1 & + echo "done!" +} + +restart() { + echo -n "Terminating PipeWire processes... " + pkill -9 -u "${USER}" -x "pipewire|wireplumber" 1>/dev/null 2>&1 + pidwait -u "${USER}" -x "pipewire|wireplumber" 2>/dev/null || sleep 1 + echo "terminated." + startpw +} + +CONF="${XDG_CONFIG_HOME}/artix-pipewire-launcher.conf" +if [ -f "${CONF}" ]; then + . "${CONF}" +else + ARTIX_PIPEWIRE_LOG='/dev/null' + ARTIX_PIPEWIRE_PULSE_LOG='/dev/null' + ARTIX_WIREPLUMBER_LOG='/dev/null' +fi + +for L in \ + "${ARTIX_PIPEWIRE_LOG}" \ + "${ARTIX_PIPEWIRE_PULSE_LOG}" \ + "${ARTIX_WIREPLUMBER_LOG}"; do + if [ ! -e "${L}" ]; then + touch "${L}" + fi +done + +pwpid=$(pgrep -u "${USER}" -x "pipewire") +wppid=$(pgrep -u "${USER}" -x "wireplumber") +[[ ! -z "$pwpid$wppid" && "${1}" != "restart" ]] && { echo "PipeWire/WirePlumber already running."; exit 0; } + +[ -z "${1}" ] && startpw + +if [ "${#}" -gt 0 ]; then + if [ "${1}" = 'restart' ]; then + restart + else + echo "Unrecognised argument." >&2 + echo "Usage: artix-pipewire-launcher [restart]" >&2 + exit 1 + fi +fi diff --git a/packages/pipewire/systemd.patch b/packages/pipewire/systemd.patch new file mode 100644 index 0000000..f9bfdcd --- /dev/null +++ b/packages/pipewire/systemd.patch @@ -0,0 +1,28 @@ +diff --git a/meson_options.txt b/meson_options.txt +index 206d68659..14994734e 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -33,7 +33,7 @@ option('gstreamer-device-provider', + option('libsystemd', + description: 'Enable code that depends on libsystemd', + type: 'feature', +- value: 'auto') ++ value: 'disabled') + option('logind', + description: 'Enable logind integration', + type: 'feature', +@@ -50,7 +50,7 @@ option('systemd-system-service', + option('systemd-user-service', + description: 'Install systemd user service file', + type: 'feature', +- value: 'auto') ++ value: 'disabled') + option('selinux', + description: 'Enable SELinux integration', + type: 'feature', +@@ -394,4 +394,4 @@ option('fftw', + option('onnxruntime', + description: 'Enable code that depends on onnxruntime', + type: 'feature', +- value: 'auto') ++ value: 'disabled')