Compare commits

..
122 Commits
Author SHA1 Message Date
arabianq 3ca6ba8f48 deploy: 6eff8b2c6d 2026-09-09 10:23:21 +00:00
arabianq 3194b66143 deploy: 6eff8b2c6d 2026-09-09 10:18:40 +00:00
arabianq f992d57b88 deploy: dd13eee0df 2026-09-09 08:42:12 +00:00
arabianq 6cae1ef10c deploy: dd13eee0df 2026-09-09 08:40:03 +00:00
arabianq 0b1ec82b8d deploy: 3d1bc24c21 2026-09-09 08:36:19 +00:00
arabianq 5278cd5662 deploy: 3d1bc24c21 2026-09-09 08:33:56 +00:00
arabianq 0467c14f1f deploy: 53fabcee75 2026-09-01 18:13:35 +00:00
arabianq f19cef451e deploy: 53fabcee75 2026-09-01 18:09:10 +00:00
arabianq dc25fe9a2d deploy: 53fabcee75 2026-08-31 16:24:51 +00:00
arabianq 04c5b8d6be deploy: 53fabcee75 2026-08-31 16:19:24 +00:00
arabianq 089d0ce17e deploy: 17146d2ce6 2026-08-31 01:45:05 +00:00
arabianq 34ba3aff6b deploy: 17146d2ce6 2026-08-31 01:39:40 +00:00
arabianq 97a058bd23 deploy: 7ad69243cc 2026-08-30 21:11:08 +00:00
arabianq d9bc79733e deploy: 7ad69243cc 2026-08-30 21:09:24 +00:00
arabianq 74007651a6 deploy: a1184588a0 2026-08-29 10:50:17 +00:00
arabianq 7331da1cb1 deploy: a1184588a0 2026-08-29 10:48:38 +00:00
arabianq 25b0b1ef1e deploy: 9b65384cfd 2026-08-10 13:49:23 +00:00
arabianq 5a525ffe7d deploy: 9b65384cfd 2026-08-10 13:46:25 +00:00
arabianq 4c3c670d41 deploy: 59c7f25a38 2026-08-10 13:42:39 +00:00
arabianq 6444b3b1a9 deploy: 2b544d2e63 2026-08-10 13:41:01 +00:00
arabianq 9f1122842f deploy: b939709047 2026-08-05 12:07:33 +00:00
arabianq 0c106a2316 deploy: b939709047 2026-08-05 12:03:33 +00:00
arabianq a45c20d6a0 deploy: c75e073774 2026-07-30 18:10:16 +00:00
arabianq e393e71c34 deploy: c75e073774 2026-07-30 18:07:12 +00:00
arabianq 6fc85a3178 deploy: c75e073774 2026-07-30 08:31:09 +00:00
arabianq 8d8e2de0a5 deploy: 051e81d9f7 2026-07-30 08:28:24 +00:00
arabianq 738ce8f76d deploy: c75e073774 2026-07-30 08:25:16 +00:00
arabianq 3f53ee31cf deploy: 051e81d9f7 2026-07-30 08:20:35 +00:00
arabianq fb6ab8e751 deploy: 8854c401a9 2026-07-30 07:46:17 +00:00
arabianq ef7803c9eb deploy: 8854c401a9 2026-07-30 07:41:58 +00:00
arabianq 331b44231b deploy: c9f30e09d7 2026-07-30 07:40:38 +00:00
arabianq ea003ce24d deploy: c9f30e09d7 2026-07-30 07:33:48 +00:00
arabianq 3ed7f155c7 deploy: 0d0b5f9f29 2026-07-26 19:41:37 +00:00
arabianq ace9dafeec deploy: 0d0b5f9f29 2026-07-26 19:37:52 +00:00
arabianq f5e4b3a145 deploy: 0d0b5f9f29 2026-07-26 19:34:30 +00:00
arabianq 8a2175d0ea deploy: 0d0b5f9f29 2026-07-26 19:32:32 +00:00
arabianq 8166cd9d20 deploy: 425c1df61e 2026-07-26 19:25:08 +00:00
arabianq 5052bf787b deploy: 425c1df61e 2026-07-26 19:22:01 +00:00
arabianq e18cf9607e deploy: 425c1df61e 2026-07-26 19:00:36 +00:00
arabianq 90a7a5a2d5 deploy: 425c1df61e 2026-07-26 18:54:12 +00:00
arabianq 6f523b7a6b deploy: cfa31200d4 2026-07-26 18:45:38 +00:00
arabianq 34973cd4ad deploy: cfa31200d4 2026-07-26 18:39:19 +00:00
arabianq a5a605bfc8 deploy: 389640ee0a 2026-07-26 18:34:24 +00:00
arabianq a61dc9f8be deploy: 389640ee0a 2026-07-26 18:28:07 +00:00
arabianq 6e3554e403 deploy: 7b87dc02dd 2026-07-26 18:04:43 +00:00
arabianq bcb6f1f92a deploy: 7b87dc02dd 2026-07-26 17:58:41 +00:00
arabianq 69b1a5860b deploy: 785b835237 2026-07-26 17:45:04 +00:00
arabianq 929199b981 deploy: 785b835237 2026-07-26 17:39:17 +00:00
arabianq b781f03484 deploy: 1616d80ee9 2026-07-24 21:11:25 +00:00
arabianq d2e8de422a deploy: 1616d80ee9 2026-07-24 21:07:47 +00:00
arabianq 69e9a4b5b6 deploy: 1616d80ee9 2026-07-24 21:03:07 +00:00
arabianq d780985d15 deploy: 0c3d7cbd35 2026-07-24 20:58:33 +00:00
arabianq 992e5bf8d8 deploy: 0c3d7cbd35 2026-07-24 20:52:01 +00:00
arabianq 7c3cad6e6e deploy: 6d7abdbf53 2026-07-24 03:10:48 +00:00
arabianq 10fc6d84c9 deploy: 6d7abdbf53 2026-07-24 03:08:13 +00:00
arabianq 5d262ba412 deploy: 6d7abdbf53 2026-07-24 03:06:52 +00:00
arabianq 7ff3cd3a0e deploy: 6d7abdbf53 2026-07-24 03:01:29 +00:00
arabianq 6409e041ff deploy: 41bb035b2c 2026-07-24 03:00:13 +00:00
arabianq c3feb3fc06 deploy: 41bb035b2c 2026-07-24 02:56:41 +00:00
arabianq 8fa1d56fc4 deploy: 3873bf4270 2026-07-24 02:51:43 +00:00
arabianq 0611a22f83 deploy: 3873bf4270 2026-07-24 02:47:11 +00:00
arabianq b0640d7809 deploy: 2b60b47cce 2026-07-24 02:46:05 +00:00
arabianq 3d34ec6e98 deploy: 65ae8589db 2026-07-24 02:42:12 +00:00
arabianq 004ae0907d deploy: 65ae8589db 2026-07-24 02:36:17 +00:00
arabianq 7a19d79d08 deploy: a33d023950 2026-07-24 01:58:08 +00:00
arabianq a2aeab5a16 deploy: a33d023950 2026-07-24 01:52:04 +00:00
arabianq 5a87f06e16 deploy: 5c73bc1bea 2026-07-20 18:48:20 +00:00
arabianq b6d5cfcd0c deploy: 5c73bc1bea 2026-07-20 18:45:06 +00:00
arabianq 42e8723977 deploy: 5c73bc1bea 2026-07-20 18:34:07 +00:00
arabianq 26e5d8b02a deploy: 5c73bc1bea 2026-07-20 18:28:30 +00:00
arabianq af5a7851ed deploy: 42e305869a 2026-07-20 18:23:27 +00:00
arabianq 454ab9b3a6 deploy: 3a218283db 2026-07-20 18:07:57 +00:00
arabianq 4e92298873 deploy: 3a218283db 2026-07-20 18:04:54 +00:00
arabianq 437d7fdb4e deploy: 02fdfb6ca8 2026-07-20 16:43:14 +00:00
arabianq 39816a4dbe deploy: 02fdfb6ca8 2026-07-20 16:37:01 +00:00
arabianq 93f3460e2d deploy: a027838d0e 2026-07-20 16:33:24 +00:00
arabianq f1ac8b91d7 deploy: 1828d903a1 2026-07-20 16:30:49 +00:00
arabianq e1f12f5ce4 deploy: 83ca7a5e34 2026-07-20 16:27:02 +00:00
arabianq 6ca239ffc9 deploy: 1828d903a1 2026-07-20 16:24:35 +00:00
arabianq 0599e38625 deploy: 83ca7a5e34 2026-07-20 16:23:20 +00:00
arabianq ddaee8c1e9 deploy: f2aca5e34a 2026-07-20 16:22:07 +00:00
arabianq fcde9614e2 deploy: f2aca5e34a 2026-07-20 16:16:39 +00:00
arabianq b51f453ec3 deploy: 6130a99c4b 2026-07-20 16:12:28 +00:00
arabianq 758f685413 deploy: 6130a99c4b 2026-07-20 16:04:28 +00:00
arabianq 702acccb55 deploy: 322b93efa1 2026-07-19 14:32:27 +00:00
arabianq 9d4d5016fa deploy: 322b93efa1 2026-07-19 14:31:19 +00:00
arabianq 39b726f8c4 deploy: 683f4127a0 2026-07-15 13:30:06 +00:00
arabianq bb57bfb1a8 deploy: 683f4127a0 2026-07-15 13:24:13 +00:00
arabianq 183c961710 deploy: c873166e21 2026-07-14 13:53:40 +00:00
arabianq b985132ed7 deploy: c873166e21 2026-07-14 13:52:55 +00:00
arabianq f79614da75 deploy: ec4e873071 2026-07-07 18:35:37 +00:00
arabianq 12f986db1e deploy: ec4e873071 2026-07-07 18:31:45 +00:00
arabianq c826b7ae4d deploy: a91252d7fb 2026-07-07 17:45:16 +00:00
arabianq dc9fc64a16 deploy: a91252d7fb 2026-07-07 17:42:32 +00:00
arabianq c4776c43eb deploy: a91252d7fb 2026-07-07 16:37:31 +00:00
arabianq b091c65935 deploy: a91252d7fb 2026-07-07 16:35:19 +00:00
arabianq e08de17e64 deploy: 4f8f663f12 2026-07-07 16:34:40 +00:00
arabianq 868b6ce432 deploy: 4f8f663f12 2026-07-07 16:31:06 +00:00
arabianq 8b991d56a9 deploy: 6ccc55a1d0 2026-07-07 16:06:53 +00:00
arabianq e796a2248d deploy: d266a3f073 2026-07-07 16:04:53 +00:00
arabianq 406f9957f4 deploy: 6ccc55a1d0 2026-07-07 16:02:06 +00:00
arabianq 2d37280217 deploy: d266a3f073 2026-07-07 16:00:45 +00:00
arabianq 563aa1d90c deploy: d2993592be 2026-07-07 14:02:58 +00:00
arabianq 9a74eeb14b deploy: d2993592be 2026-07-07 13:58:23 +00:00
arabianq a672127081 deploy: 1a53ab62dc 2026-07-07 13:12:44 +00:00
arabianq 2b95b5040b deploy: 1a53ab62dc 2026-07-07 13:08:37 +00:00
arabianq 125dbd3f8f deploy: 51fcd94a61 2026-07-07 13:06:20 +00:00
arabianq dae190dd5f deploy: 51fcd94a61 2026-07-07 13:01:41 +00:00
arabianq 964205907a deploy: 7f6a122816 2026-07-07 12:57:44 +00:00
arabianq c1a7d050ab deploy: 7f6a122816 2026-07-07 12:51:58 +00:00
arabianq 8556b27f0d deploy: 7ca01ed8cb 2026-07-07 12:49:12 +00:00
arabianq 3c8722d1f6 deploy: 7ca01ed8cb 2026-07-07 12:43:21 +00:00
arabianq ebfb5d402c deploy: 07321afb60 2026-07-05 19:57:25 +00:00
arabianq 6d31f503b9 deploy: 07321afb60 2026-07-05 19:51:24 +00:00
arabianq bd0f1a941d deploy: 16ce233f79 2026-07-05 19:44:30 +00:00
arabianq 955a696cbc deploy: 16ce233f79 2026-07-05 19:38:16 +00:00
arabianq 1597cb67fd deploy: c2f4658871 2026-07-05 19:31:38 +00:00
arabianq 0cb31d6e89 deploy: c2f4658871 2026-07-05 19:24:48 +00:00
arabianq 8128036313 deploy: 701bdebc88 2026-07-05 18:57:09 +00:00
arabianq 0adf869d5c deploy: 701bdebc88 2026-07-05 18:53:41 +00:00
arabianq 1d1df22920 deploy: 701bdebc88 2026-07-05 18:25:59 +00:00
arabianq ed4bfa7d1b deploy: 701bdebc88 2026-07-05 18:20:44 +00:00
4092 changed files with 285 additions and 9946 deletions
-1
View File
@@ -1 +0,0 @@
custom: ['https://boosty.to/arabian']
-119
View File
@@ -1,119 +0,0 @@
name: Build
permissions:
contents: write
packages: write
on:
push:
branches: [main, master]
pull_request:
branches: [main, master]
workflow_dispatch:
jobs:
linux-build:
runs-on: ubuntu-latest
steps:
- name: Install apt deps (jq/zip + dev-libs)
run: |
sudo apt-get update
sudo apt-get install -y \
zip jq \
libpipewire-0.3-dev \
libclang-dev \
libasound2-dev
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: 1.94.1
- name: Extract all binary names
id: cargo-meta
run: |
set -euo pipefail
BIN_NAMES=$(cargo metadata --no-deps --format-version 1 \
| jq -r '.packages[0].targets[] | select(.kind[] | contains("bin")) | .name')
echo "bin_names<<EOF" >> $GITHUB_OUTPUT
echo "$BIN_NAMES" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Build all release binaries
run: cargo build --release --locked
- name: Package all binaries into one archive
shell: bash
run: |
set -euo pipefail
COMMIT_SHA="${{ github.sha }}"
ARCHIVE_NAME="pwsp-${COMMIT_SHA}-linux-x64.zip"
echo "Creating archive: $ARCHIVE_NAME"
FILES=()
while IFS= read -r BIN; do
[ -z "$BIN" ] && continue
FILES+=("target/release/$BIN")
done <<< "${{ steps.cargo-meta.outputs.bin_names }}"
if [ "${#FILES[@]}" -eq 0 ]; then
echo "Error: no binaries were discovered via cargo metadata." >&2
exit 1
fi
for f in "${FILES[@]}"; do
if [ ! -f "$f" ]; then
echo "Error: expected binary not found: $f" >&2
exit 1
fi
echo "Will add: $f"
done
zip -j "$ARCHIVE_NAME" "${FILES[@]}"
- name: Upload archive as artifact
uses: actions/upload-artifact@v4
with:
name: archive
path: pwsp-*.zip
retention-days: 7
- name: Install cargo-deb and create .deb
shell: bash
run: |
set -euo pipefail
cargo install --locked cargo-deb
export PATH="$HOME/.cargo/bin:$PATH"
cargo-deb
- name: Upload .deb(s) as artifacts
uses: actions/upload-artifact@v4
with:
name: deb-packages
path: target/debian/*.deb
retention-days: 7
flatpak-build:
runs-on: ubuntu-latest
container:
image: ghcr.io/flathub-infra/flatpak-github-actions:freedesktop-25.08
options: --privileged
steps:
- uses: actions/checkout@v4
- name: Build Flatpak
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
with:
bundle: ru.arabianq.pwsp.flatpak
manifest-path: packages/flatpak/ru.arabianq.pwsp.yaml
cache: true
branch: master
build-bundle: true
-183
View File
@@ -1,183 +0,0 @@
name: Release
permissions:
contents: write
packages: write
on:
release:
types: [created]
workflow_dispatch:
inputs:
tag:
description: "Tag to attach assets to (e.g. v1.0.0)"
required: false
jobs:
prepare:
runs-on: ubuntu-latest
outputs:
tag: ${{ steps.tag.outputs.tag }}
steps:
- name: Determine tag to use
id: tag
run: |
set -euo pipefail
INPUT_TAG="${{ github.event.inputs.tag || '' }}"
if [ -n "$INPUT_TAG" ]; then
echo "Using input tag: $INPUT_TAG"
echo "tag=$INPUT_TAG" >> $GITHUB_OUTPUT
exit 0
fi
EVENT_TAG="${{ github.event.release.tag_name || '' }}"
if [ -n "$EVENT_TAG" ]; then
echo "Using event tag: $EVENT_TAG"
echo "tag=$EVENT_TAG" >> $GITHUB_OUTPUT
exit 0
fi
if [[ "${GITHUB_REF:-}" =~ ^refs/tags/(.+)$ ]]; then
echo "Using GITHUB_REF tag: ${BASH_REMATCH[1]}"
echo "tag=${BASH_REMATCH[1]}" >> $GITHUB_OUTPUT
exit 0
fi
echo "No tag in input/event/GITHUB_REF — querying latest release via API..."
LATEST_JSON=$(curl -sSf -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -H "Accept: application/vnd.github+json" "https://api.github.com/repos/${{ github.repository }}/releases/latest" || true)
TAG_NAME=$(echo "$LATEST_JSON" | jq -r '.tag_name // empty')
if [ -n "$TAG_NAME" ]; then
echo "Found latest release tag: $TAG_NAME"
echo "tag=$TAG_NAME" >> $GITHUB_OUTPUT
exit 0
fi
echo "No tag found"
echo "tag=" >> $GITHUB_OUTPUT
- name: Fail if no tag determined
if: ${{ steps.tag.outputs.tag == '' }}
run: |
echo "ERROR: No tag determined. Provide a tag when running manually or ensure a release exists."
exit 1
linux-release:
needs: prepare
runs-on: ubuntu-latest
steps:
- name: Install apt deps (jq/zip + dev-libs)
run: |
sudo apt-get update
sudo apt-get install -y \
zip jq \
libpipewire-0.3-dev \
libclang-dev \
libasound2-dev
- name: Checkout code at tag
uses: actions/checkout@v4
with:
ref: ${{ needs.prepare.outputs.tag }}
fetch-depth: 0
- name: Setup Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: 1.94.1
- name: Extract all binary names
id: cargo-meta
run: |
set -euo pipefail
BIN_NAMES=$(cargo metadata --no-deps --format-version 1 \
| jq -r '.packages[0].targets[] | select(.kind[] | contains("bin")) | .name')
echo "bin_names<<EOF" >> $GITHUB_OUTPUT
echo "$BIN_NAMES" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Build all release binaries
run: cargo build --release --locked
- name: Package all binaries into one archive
shell: bash
run: |
set -euo pipefail
TAG="${{ needs.prepare.outputs.tag }}"
ARCHIVE_NAME="pwsp-${TAG}-linux-x64.zip"
echo "Creating archive: $ARCHIVE_NAME"
FILES=()
while IFS= read -r BIN; do
[ -z "$BIN" ] && continue
FILES+=("target/release/$BIN")
done <<< "${{ steps.cargo-meta.outputs.bin_names }}"
if [ "${#FILES[@]}" -eq 0 ]; then
echo "Error: no binaries were discovered via cargo metadata." >&2
exit 1
fi
for f in "${FILES[@]}"; do
if [ ! -f "$f" ]; then
echo "Error: expected binary not found: $f" >&2
exit 1
fi
echo "Will add: $f"
done
zip -j "$ARCHIVE_NAME" "${FILES[@]}"
- name: Upload release archive
uses: softprops/action-gh-release@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag_name: ${{ needs.prepare.outputs.tag }}
files: |
pwsp-*.zip
- name: Install cargo-deb and create .deb
shell: bash
run: |
set -euo pipefail
cargo install --locked cargo-deb
export PATH="$HOME/.cargo/bin:$PATH"
cargo-deb
- name: Upload .deb(s) to release
uses: softprops/action-gh-release@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag_name: ${{ needs.prepare.outputs.tag }}
files: |
target/debian/*.deb
flatpak-release:
needs: prepare
runs-on: ubuntu-latest
container:
image: ghcr.io/flathub-infra/flatpak-github-actions:freedesktop-25.08
options: --privileged
steps:
- uses: actions/checkout@v4
with:
ref: ${{ needs.prepare.outputs.tag }}
- name: Build Flatpak
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
with:
bundle: ru.arabianq.pwsp.flatpak
manifest-path: packages/flatpak/ru.arabianq.pwsp.yaml
cache: true
branch: master
build-bundle: true
- name: Upload Flatpak to release
uses: softprops/action-gh-release@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag_name: ${{ needs.prepare.outputs.tag }}
files: ru.arabianq.pwsp.flatpak
-4
View File
@@ -1,4 +0,0 @@
/target
.idea
packages/aur/bin/.git
packages/aur/standart/.git
View File
View File
Generated
-5185
View File
File diff suppressed because it is too large Load Diff
-106
View File
@@ -1,106 +0,0 @@
[package]
name = "pwsp"
version = "1.6.3"
edition = "2024"
authors = ["arabian"]
description = "PWSP lets you play audio files through your microphone. Has both CLI and GUI clients."
readme = "README.md"
homepage = "https://pwsp.arabianq.ru"
repository = "https://github.com/arabianq/pipewire-soundpad"
license = "MIT"
keywords = ["soundpad", "pipewire", "linux", "cli", "gui"]
[dependencies]
tokio = { version = "1.50.0", features = ["full"] }
async-trait = "0.1.89"
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.149"
clap = { version = "4.6.0", default-features = false, features = [
"std",
"suggestions",
"help",
"usage",
"error-context",
"derive",
] }
dirs = "6.0.0"
itertools = "0.14.0"
rodio = { version = "0.22.2", default-features = false, features = [
"symphonia-all",
"playback",
] }
pipewire = "0.9.2"
rfd = { version = "0.17.2", default-features = false, features = [
"xdg-portal",
] }
opener = { version = "0.8.4", features = ["reveal"] }
egui = { version = "0.34.1", default-features = false, features = [
"default_fonts",
"rayon",
] }
eframe = { version = "0.34.1", default-features = false, features = [
"default_fonts",
"glow",
"x11",
"wayland",
] }
egui_material_icons = "0.6.0"
egui_dnd = "0.15.0"
[[bin]]
name = "pwsp-daemon"
path = "src/bin/daemon.rs"
[[bin]]
name = "pwsp-cli"
path = "src/bin/cli.rs"
[[bin]]
name = "pwsp-gui"
path = "src/main.rs"
[profile.release]
strip = true
lto = true
codegen-units = 1
opt-level = "z"
panic = "abort"
[package.metadata.deb]
assets = [
[
"target/release/pwsp-daemon",
"usr/bin/",
"755",
],
[
"target/release/pwsp-cli",
"usr/bin/",
"755",
],
[
"target/release/pwsp-gui",
"usr/bin/",
"755",
],
[
"assets/pwsp-gui.desktop",
"usr/share/applications/pwsp.desktop",
"644",
],
[
"assets/icon.png",
"usr/share/icons/hicolor/256x256/apps/pwsp.png",
"644",
],
[
"assets/pwsp-daemon.service",
"usr/lib/systemd/user/pwsp-daemon.service",
"644",
],
]
-21
View File
@@ -1,21 +0,0 @@
MIT License
Copyright (c) 2025 Tarasov Alexander
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
-213
View File
@@ -1,213 +0,0 @@
# **🎵 Pipewire Soundpad (PWSP)**
**PipeWire Soundpad (PWSP)** is a simple yet powerful **soundboard application** written in **Rust**. It provides a
user-friendly graphical interface for **managing and playing audio files, directing their output directly to the virtual
microphone.** This makes it an ideal tool for gamers, streamers, and anyone looking to inject sound effects into voice
chats on platforms like **Discord, Zoom, or Teamspeak**.
![screenshot.png](assets/screenshot.png)
# **🌟 Key Features**
* **Multi-Format Support**: Play audio files in popular formats, including _**mp3**_, _**wav**_, _**ogg**_, _**flac**_,
_**mp4**_, and _**aac**_.
* **Virtual Microphone Output**: The application routes audio through a virtual device created by PipeWire, allowing
other users to hear the sounds as if you were speaking into your microphone.
* **Modern and Clean GUI**: The interface is built with the [egui](https://egui.rs) library, ensuring an intuitive and
responsive user experience.
* **Sound Collection Management**: Easily add and remove directories containing your audio files. The application scans
these folders and displays all supported files for quick access.
* **Quick Search**: Use the built-in search bar to instantly find any sound file within your library.
* **Detailed Playback Controls**:
* **Play/Pause button**.
* **Volume slider** for individual sound adjustment.
* **Position slider** to fast-forward or rewind the audio.
* **Persistent Configuration**: The list of added directories and your selected audio output device are saved
automatically, so you won't need to reconfigure them every time you launch the application.
* **Collapsible Audio Tracks**: You can collapse every audio track to save space.
* **Drag and Drop Directories**: Reorder your sound directories easily using drag and drop.
* **Automatic Device Detection**: PWSP automatically detects when an input device is connected or disconnected and handles linking/unlinking.
# **⚙️ How It Works**
PWSP is designed with a clear separation of concerns, operating through a client-server architecture. It consists of
three main components:
* **pwsp-daemon**: This is the core of the application. It runs silently in the background, managing all the
heavy-lifting tasks. The daemon is responsible for:
* Creating and managing virtual audio devices.
* Linking these devices within the PipeWire graph.
* Handling all audio playback.
* **pwsp-gui**: This is the graphical user interface. It acts as a client that communicates with pwsp-daemon via a
**UnixSocket**. This is how you interact with your sound collection, control playback, and configure settings.
* **pwsp-cli**: This is the command-line interface, also acting as a client. It provides a way to control the daemon
without a GUI, allowing for scripting or quick command-based actions.
# **🚀 Installation**
## **Pre-built Packages**
You can download pre-built binaries and .deb packages from
the [releases page](https://github.com/arabianq/pipewire-soundpad/releases).
## **Fedora Linux (and derivatives)**
If you're using Fedora, you can install PWSP from a dedicated repository using DNF.
Add the repository:
```bash
sudo dnf copr enable arabianq/pwsp
```
Update cache:
```bash
sudo dnf makecache
```
Install PWSP:
```bash
sudo dnf install pwsp
```
## **Arch Linux**
There is pwsp package in AUR.
You can install it using yay, paru or any other AUR helper.
```bash
paru pwsp-bin # or paru pwsp to build it locally
```
## **Installing using cargo**
```bash
cargo install pwsp
```
## **Building from source**
#### **Requirements**
* **Rust**: Install [Rust](https://www.rust-lang.org/tools/install) (using rustup is recommended).
* **PipeWire**: Ensure that [PipeWire](https://pipewire.org/) is installed and running on your system.
#### **Build Instructions**
Clone the repository:
```bash
git clone https://github.com/arabianq/pipewire-soundpad.git
cd pipewire-soundpad
```
Build the project:
```bash
cargo build --release
```
Now you have three binary files inside ./target/release/:
- **pwsp-gui**
- **pwsp-cli**
- **pwsp-daemon**
# **🎮 Usage**
Before using pwsp-gui or pwsp-cli, you **must** first run the pwsp-daemon in the background.
### **Running the Daemon**
You can start the daemon from the terminal or enable the systemd service for automatic startup.
* **Manual Start:**
```bash
/path/to/your/pwsp-daemon &
```
* **Using systemd (recommended):**
If you installed PWSP using prebuilt packages, the systemd service is added automatically.
1. **Start the service:**
```bash
systemctl --user start pwsp-daemon
```
2. **Enable autostart (starts on login):**
```bash
systemctl --user enable --now pwsp-daemon
```
### **Using the GUI**
1. **Add Sounds**: Click the **"+"** button and select a folder containing your audio files. The application
will automatically list all supported files.
2. **Select Microphone**: In the main application window, select your microphone. PWSP will automatically
create a virtual microphone and feed it sound from two sources: **your microphone** and the **audio files**.
3. **Playback**: Click on a file in the list to load it, then use the **"Play"** and **"Pause"** buttons to control
playback. You can also play single file once using **"Play File"** button.
### **Using the CLI**
The pwsp-cli tool allows you to control the daemon from the command line.
* **General Help**: To see a list of all available commands, run:
```bash
pwsp-cli --help
```
* **Example Commands**:
* **Play a file**:
```bash
pwsp-cli action play <file_path>
```
* **Get the current volume**:
```bash
pwsp-cli get volume
```
* **Set playback position to 20 seconds**:
```bash
pwsp-cli set position 20
```
### **Hotkeys & Controls**
#### **Keyboard Shortcuts**
| Key | Action |
| :----------------------- | :--------------------------------------------------- |
| **Space** | Pause / Resume audio |
| **Backspace** | Stop all audio tracks |
| **Enter** | Play selected file (stops all other tracks) |
| **Ctrl + Enter** | Add selected file to playback (plays simultaneously) |
| **Shift + Enter** | Replace the last added track with the selected one |
| **I** | Open / Close settings |
| **/** | Focus search field |
| **Ctrl + ↑ / ↓** | Navigate through files |
| **Ctrl + Shift + ↑ / ↓** | Navigate through directories |
#### **Mouse Controls**
* **Left Click**: Play track (stops all other tracks).
* **Ctrl + Left Click**: Add track (plays simultaneously with current tracks).
* **Shift + Left Click**: Replace the last added track with the selected one.
# **🤝 Contributing**
Contributions are welcome\! If you have ideas for improvements or find a bug, feel free to create
an [issue](https://github.com/arabianq/pipewire-soundpad/issues) or submit
a [pull request](https://github.com/arabianq/pipewire-soundpad/pulls).
# **📜 License**
This project is licensed under
the [MIT License](https://github.com/arabianq/pipewire-soundpad/blob/main/LICENSE).
# **🤖 AI Wiki**
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/arabianq/pipewire-soundpad)
+15
View File
@@ -0,0 +1,15 @@
Origin: arabianq
Label: PipeWire Soundpad
Codename: stable
Architectures: amd64 arm64
Components: main
Description: APT Repository for PWSP
SignWith: AAE3C56B1E2D3677108CF28083C9B0DB2C8F9D16
Origin: arabianq
Label: PipeWire Soundpad
Codename: nightly
Architectures: amd64 arm64
Components: main
Description: Nightly APT Repository for PWSP
SignWith: AAE3C56B1E2D3677108CF28083C9B0DB2C8F9D16
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+4
View File
@@ -0,0 +1,4 @@
5.3.1
3.3.0
bdb5.3.28
bdb5.3.0
+38
View File
@@ -0,0 +1,38 @@
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
Origin: arabianq
Label: PipeWire Soundpad
Codename: nightly
Date: Wed, 09 Sep 2026 08:41:16 UTC
Architectures: amd64 arm64
Components: main
Description: Nightly APT Repository for PWSP
MD5Sum:
aceabb23e6e94eb36ba5cc0a7e44b40e 650 main/binary-amd64/Packages
5f169fece0201f009648645877756a93 453 main/binary-amd64/Packages.gz
facbb80485897bc6e0d67e37e5dd38e8 123 main/binary-amd64/Release
c81041d0d917be60c02eac047ebd4f39 677 main/binary-arm64/Packages
eb0f33462f77e02457cb13dee1d94f4a 461 main/binary-arm64/Packages.gz
7418f9ee7493009aeaa4417f5d11ee62 123 main/binary-arm64/Release
SHA1:
6205409d12f13aceb4a8da9bd6f82d40fe50831d 650 main/binary-amd64/Packages
f187727403fd3aad0214e60670d32cb39bbe7052 453 main/binary-amd64/Packages.gz
66d8024fbaf66bb3aa03e04c8784ffc2d45d5e92 123 main/binary-amd64/Release
5858a2d36739da6d77a8b6b5d3e70ee3338336bb 677 main/binary-arm64/Packages
a968c640c849e8b90e1e3d8a8b7d600c3ca7a169 461 main/binary-arm64/Packages.gz
f7984ac62248818b3d8a2c59250042d426414d8c 123 main/binary-arm64/Release
SHA256:
e4c30f136a2644fb47fd679ee9b0d73ec443e1551d6d651c4f7500552c2798c4 650 main/binary-amd64/Packages
18e35d66b427184a1b249e86bc9f4bf04bcfeae9433d6ac3f6eca4d796cf2448 453 main/binary-amd64/Packages.gz
b5a22f248703739051a84b584c2b0ea20a9b69b28e823c5a8b0aca5f33f90bba 123 main/binary-amd64/Release
caec6bb3187042c9a56c9df5291f0cdd03371862b5fd97296d577db2c985500d 677 main/binary-arm64/Packages
b5d4146612736ce92a80ba2652588b872acacbb680d5d0863dc4cc8b663aacc1 461 main/binary-arm64/Packages.gz
a5e6d2298cf4bded7fd380a4bb06d97be39e9ea1a0b42acd5190a44aad619c92 123 main/binary-arm64/Release
-----BEGIN PGP SIGNATURE-----
iHUEARYKAB0WIQSq48VrHi02dxCM8oCDybDbLI+dFgUCaqEbrQAKCRCDybDbLI+d
FqbCAQD5kFf8o8rW/Df6pcb2SFKNtkZYA8rH/ZymlePBIGG//wEArRIhXsrGf7OU
BCSv4iBGH0yPItVFvGy7LsZiTjezrg4=
=dW48
-----END PGP SIGNATURE-----
+28
View File
@@ -0,0 +1,28 @@
Origin: arabianq
Label: PipeWire Soundpad
Codename: nightly
Date: Wed, 09 Sep 2026 08:41:16 UTC
Architectures: amd64 arm64
Components: main
Description: Nightly APT Repository for PWSP
MD5Sum:
aceabb23e6e94eb36ba5cc0a7e44b40e 650 main/binary-amd64/Packages
5f169fece0201f009648645877756a93 453 main/binary-amd64/Packages.gz
facbb80485897bc6e0d67e37e5dd38e8 123 main/binary-amd64/Release
c81041d0d917be60c02eac047ebd4f39 677 main/binary-arm64/Packages
eb0f33462f77e02457cb13dee1d94f4a 461 main/binary-arm64/Packages.gz
7418f9ee7493009aeaa4417f5d11ee62 123 main/binary-arm64/Release
SHA1:
6205409d12f13aceb4a8da9bd6f82d40fe50831d 650 main/binary-amd64/Packages
f187727403fd3aad0214e60670d32cb39bbe7052 453 main/binary-amd64/Packages.gz
66d8024fbaf66bb3aa03e04c8784ffc2d45d5e92 123 main/binary-amd64/Release
5858a2d36739da6d77a8b6b5d3e70ee3338336bb 677 main/binary-arm64/Packages
a968c640c849e8b90e1e3d8a8b7d600c3ca7a169 461 main/binary-arm64/Packages.gz
f7984ac62248818b3d8a2c59250042d426414d8c 123 main/binary-arm64/Release
SHA256:
e4c30f136a2644fb47fd679ee9b0d73ec443e1551d6d651c4f7500552c2798c4 650 main/binary-amd64/Packages
18e35d66b427184a1b249e86bc9f4bf04bcfeae9433d6ac3f6eca4d796cf2448 453 main/binary-amd64/Packages.gz
b5a22f248703739051a84b584c2b0ea20a9b69b28e823c5a8b0aca5f33f90bba 123 main/binary-amd64/Release
caec6bb3187042c9a56c9df5291f0cdd03371862b5fd97296d577db2c985500d 677 main/binary-arm64/Packages
b5d4146612736ce92a80ba2652588b872acacbb680d5d0863dc4cc8b663aacc1 461 main/binary-arm64/Packages.gz
a5e6d2298cf4bded7fd380a4bb06d97be39e9ea1a0b42acd5190a44aad619c92 123 main/binary-arm64/Release
+7
View File
@@ -0,0 +1,7 @@
-----BEGIN PGP SIGNATURE-----
iHUEABYKAB0WIQSq48VrHi02dxCM8oCDybDbLI+dFgUCaqEbrAAKCRCDybDbLI+d
Fjl1AP9Zd1sB7jY0uvaoFfrFL1gmh5aNrtpL0QY1uTgz8lxbgQEArbqzFUBqfMty
HeUiUYBdOFeXp6GLQ8XGG5VXZi3GOQw=
=G3QT
-----END PGP SIGNATURE-----
@@ -0,0 +1,17 @@
Package: pwsp
Version: 1.16.1+git20260909.dd13eee
Architecture: amd64
Homepage: https://pwsp.arabianq.ru
Maintainer: arabian
Installed-Size: 40203
Depends: libasound2t64 (>= 1.1.0), libc6 (>= 2.34), libc6 (>= 2.39), libpipewire-0.3-0t64 (>= 0.3.1), libssl3t64 (>= 3.0.0)
Priority: optional
Section: sound
Filename: pool/main/p/pwsp/pwsp_1.16.1+git20260909.dd13eee_amd64.deb
Size: 8888868
SHA256: a55d4dc9bc9ea3a6afb8d39b27ecbdd967e469967273c55847d3e3f9db0ab9e9
SHA1: 6e8fc1b9066988bffd3180ad6c6ea5c986a52ec8
MD5sum: fc58f09ffacb127b7f37e1609a98d157
Description: PWSP lets you play audio files through your microphone. Has both CLI and GUI
clients.
Binary file not shown.
@@ -0,0 +1,5 @@
Component: main
Origin: arabianq
Label: PipeWire Soundpad
Architecture: amd64
Description: Nightly APT Repository for PWSP
@@ -0,0 +1,17 @@
Package: pwsp
Version: 1.16.1+git20260909.dd13eee
Architecture: arm64
Homepage: https://pwsp.arabianq.ru
Maintainer: arabian
Installed-Size: 37772
Depends: libasound2t64 (>= 1.0.16), libasound2t64 (>= 1.1.0), libc6 (>= 2.34), libc6 (>= 2.39), libpipewire-0.3-0t64 (>= 0.3.1), libssl3t64 (>= 3.0.0)
Priority: optional
Section: sound
Filename: pool/main/p/pwsp/pwsp_1.16.1+git20260909.dd13eee_arm64.deb
Size: 7853780
SHA256: 6ee76683f20fb398672409e6f0afb4b9e3646e19b349cd74851f8e84d7cc0a46
SHA1: 90e928e63269a2ea95fd542950e8d9287eb0bffd
MD5sum: c6f1b92e97df2eaaa18cfd371401cd5b
Description: PWSP lets you play audio files through your microphone. Has both CLI and GUI
clients.
Binary file not shown.
@@ -0,0 +1,5 @@
Component: main
Origin: arabianq
Label: PipeWire Soundpad
Architecture: arm64
Description: Nightly APT Repository for PWSP
+38
View File
@@ -0,0 +1,38 @@
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
Origin: arabianq
Label: PipeWire Soundpad
Codename: stable
Date: Tue, 01 Sep 2026 18:08:06 UTC
Architectures: amd64 arm64
Components: main
Description: APT Repository for PWSP
MD5Sum:
b3d0ba8d43b727d38ebd422d6d4aa48b 614 main/binary-amd64/Packages
ffa5f214d1a862a3d39adc22a8e8ee68 439 main/binary-amd64/Packages.gz
f82d685802fbb32fec3c9ba8e11e55b9 115 main/binary-amd64/Release
b5c16177a59292c311a7957654efc05a 614 main/binary-arm64/Packages
932956c987dcaf9789a4c9717e0c09ea 435 main/binary-arm64/Packages.gz
113dd4f621500874592b2a2f1eeb45ae 115 main/binary-arm64/Release
SHA1:
59c745cc1f7d92df3d6184fff1d5f07e0c02a13a 614 main/binary-amd64/Packages
7e0dab9b669453381e374f7d1dedb06c04a270ce 439 main/binary-amd64/Packages.gz
1ff55a261c49c41f38e6da56f1f5d7136d38b08f 115 main/binary-amd64/Release
f0fc3d57e98028b8b9df15ac5148ad2e021a15aa 614 main/binary-arm64/Packages
235259b556d8b5b198cc3d828de83d2065ec252c 435 main/binary-arm64/Packages.gz
be63fa980d70857efdc424c837cd54ab986a40cd 115 main/binary-arm64/Release
SHA256:
fc71c496468573b8879153db5124164fae6b0232cc8ffecac0578c780a246900 614 main/binary-amd64/Packages
d986c76c6aa4916ac160f11a70fe4d24a156bb2122e04709b4fa16baeb8dcd76 439 main/binary-amd64/Packages.gz
c670ad086ec5b85d17211cb15e8e4ac1fb49a6398d0c9672992c26a009229d8c 115 main/binary-amd64/Release
6250ab0484b8b5306048a4c3716b853a7d0191e874fdbedd8d2c70997a04a669 614 main/binary-arm64/Packages
cab25cf41ba3d628928f98109a3c7bfd27a2aefd53bc54c38c72fe9c5b787b3c 435 main/binary-arm64/Packages.gz
4a90ce2395fbe57635b23de83540564c0917b2f419cd69ab2630fc1520bb5c11 115 main/binary-arm64/Release
-----BEGIN PGP SIGNATURE-----
iHUEARYKAB0WIQSq48VrHi02dxCM8oCDybDbLI+dFgUCapcUhgAKCRCDybDbLI+d
FjPoAQCb1dn4XciWCc6C5ZgKj2HSs5QNW4aCrBNxdKq43O83fgD7B7nSp0uqlOPM
Fnpq7wsYd8z5A9YzdSN2M7lGJIBK6wc=
=yXG+
-----END PGP SIGNATURE-----
+28
View File
@@ -0,0 +1,28 @@
Origin: arabianq
Label: PipeWire Soundpad
Codename: stable
Date: Tue, 01 Sep 2026 18:08:06 UTC
Architectures: amd64 arm64
Components: main
Description: APT Repository for PWSP
MD5Sum:
b3d0ba8d43b727d38ebd422d6d4aa48b 614 main/binary-amd64/Packages
ffa5f214d1a862a3d39adc22a8e8ee68 439 main/binary-amd64/Packages.gz
f82d685802fbb32fec3c9ba8e11e55b9 115 main/binary-amd64/Release
b5c16177a59292c311a7957654efc05a 614 main/binary-arm64/Packages
932956c987dcaf9789a4c9717e0c09ea 435 main/binary-arm64/Packages.gz
113dd4f621500874592b2a2f1eeb45ae 115 main/binary-arm64/Release
SHA1:
59c745cc1f7d92df3d6184fff1d5f07e0c02a13a 614 main/binary-amd64/Packages
7e0dab9b669453381e374f7d1dedb06c04a270ce 439 main/binary-amd64/Packages.gz
1ff55a261c49c41f38e6da56f1f5d7136d38b08f 115 main/binary-amd64/Release
f0fc3d57e98028b8b9df15ac5148ad2e021a15aa 614 main/binary-arm64/Packages
235259b556d8b5b198cc3d828de83d2065ec252c 435 main/binary-arm64/Packages.gz
be63fa980d70857efdc424c837cd54ab986a40cd 115 main/binary-arm64/Release
SHA256:
fc71c496468573b8879153db5124164fae6b0232cc8ffecac0578c780a246900 614 main/binary-amd64/Packages
d986c76c6aa4916ac160f11a70fe4d24a156bb2122e04709b4fa16baeb8dcd76 439 main/binary-amd64/Packages.gz
c670ad086ec5b85d17211cb15e8e4ac1fb49a6398d0c9672992c26a009229d8c 115 main/binary-amd64/Release
6250ab0484b8b5306048a4c3716b853a7d0191e874fdbedd8d2c70997a04a669 614 main/binary-arm64/Packages
cab25cf41ba3d628928f98109a3c7bfd27a2aefd53bc54c38c72fe9c5b787b3c 435 main/binary-arm64/Packages.gz
4a90ce2395fbe57635b23de83540564c0917b2f419cd69ab2630fc1520bb5c11 115 main/binary-arm64/Release
+7
View File
@@ -0,0 +1,7 @@
-----BEGIN PGP SIGNATURE-----
iHUEABYKAB0WIQSq48VrHi02dxCM8oCDybDbLI+dFgUCapcUhgAKCRCDybDbLI+d
FttwAQDoPJP+J5IsmFDxf3Xa4aanVmOs2kWmYquOh+odZnfRjAEA6ARP+uAWSWB9
Ob4MLmTkB32mo5M1dLI0WIIKeIErfwM=
=YErr
-----END PGP SIGNATURE-----
@@ -0,0 +1,17 @@
Package: pwsp
Version: 1.16.1-1
Architecture: amd64
Homepage: https://pwsp.arabianq.ru
Maintainer: arabian
Installed-Size: 14308
Depends: libasound2t64 (>= 1.1.0), libc6 (>= 2.34), libc6 (>= 2.39), libpipewire-0.3-0t64 (>= 0.3.1), libssl3t64 (>= 3.0.0)
Priority: optional
Section: sound
Filename: pool/main/p/pwsp/pwsp_1.16.1-1_amd64.deb
Size: 4561948
SHA256: 3dd5a5834d8d60d4b0c25c38a664b3bdcd9d06fa34579d0dd5adc89ac290c680
SHA1: 1d209ca3cc2bc74dc4eb29e6ff1cf73846f22564
MD5sum: ba7d70f9a30540f21713cb8006e5d0eb
Description: PWSP lets you play audio files through your microphone. Has both CLI and GUI
clients.
Binary file not shown.
@@ -0,0 +1,5 @@
Component: main
Origin: arabianq
Label: PipeWire Soundpad
Architecture: amd64
Description: APT Repository for PWSP
@@ -0,0 +1,17 @@
Package: pwsp
Version: 1.16.1-1
Architecture: arm64
Homepage: https://pwsp.arabianq.ru
Maintainer: arabian
Installed-Size: 11646
Depends: libasound2t64 (>= 1.1.0), libc6 (>= 2.34), libc6 (>= 2.39), libpipewire-0.3-0t64 (>= 0.3.1), libssl3t64 (>= 3.0.0)
Priority: optional
Section: sound
Filename: pool/main/p/pwsp/pwsp_1.16.1-1_arm64.deb
Size: 4037540
SHA256: 63d90e6cab8afa9ed1ba19f2ad5d22dde4efb96022c363e736d65d7b47f2afa6
SHA1: 5d1026f3c49d55aa22938a8710aa85a61aa4a3cd
MD5sum: f64449a3ed05eabb8d553c15335ea360
Description: PWSP lets you play audio files through your microphone. Has both CLI and GUI
clients.
Binary file not shown.
@@ -0,0 +1,5 @@
Component: main
Origin: arabianq
Label: PipeWire Soundpad
Architecture: arm64
Description: APT Repository for PWSP
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More