Compare commits

..
69 Commits
Author SHA1 Message Date
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
2159 changed files with 285 additions and 18769 deletions
-1
View File
@@ -1 +0,0 @@
custom: ['https://boosty.to/arabian']
-6
View File
@@ -1,6 +0,0 @@
version: 2
updates:
- package-ecosystem: "cargo"
directory: "/"
schedule:
interval: "weekly"
-121
View File
@@ -1,121 +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 \
libdbus-1-dev \
pkg-config
- 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
-88
View File
@@ -1,88 +0,0 @@
name: Flatter
on:
push:
branches: [ main, master ]
release:
types: [ published ]
workflow_dispatch:
inputs:
tag_name:
description: "TAG (empty to build from current branch)"
required: false
type: string
build_branch:
description: "Flatpak branch to build (stable/nightly)"
required: true
type: choice
options:
- stable
- nightly
default: "stable"
jobs:
flatter:
name: Flatter
runs-on: ubuntu-latest
permissions:
contents: read
container:
image: ghcr.io/andyholmes/flatter/freedesktop:25.08
options: --privileged
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ inputs.tag_name || github.ref }}
- name: Setup GPG
id: gpg
uses: crazy-max/ghaction-import-gpg@v6
with:
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.GPG_PASSPHRASE }}
- name: Set Default Branch
id: set_branch
run: |
if [ "${{ github.event_name }}" == "release" ]; then
echo "branch=stable" >> $GITHUB_OUTPUT
elif [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
echo "branch=${{ inputs.build_branch }}" >> $GITHUB_OUTPUT
else
echo "branch=nightly" >> $GITHUB_OUTPUT
fi
- name: Modify Manifest
run: |
echo "branch: ${{ steps.set_branch.outputs.branch }}" >> packages/flatpak/ru.arabianq.pwsp.yaml
echo "default-branch: ${{ steps.set_branch.outputs.branch }}" >> packages/flatpak/ru.arabianq.pwsp.yaml
- name: Install SDK Extensions
run: flatpak install -y flathub org.freedesktop.Sdk.Extension.rust-stable//25.08
org.freedesktop.Sdk.Extension.llvm20//25.08
- name: Build Flatpak
uses: andyholmes/flatter@main
with:
files: packages/flatpak/ru.arabianq.pwsp.yaml
gpg-sign: ${{ steps.gpg.outputs.fingerprint }}
upload-bundles: false
upload-pages-artifact: true
deploy:
name: Deploy to GitHub Pages
runs-on: ubuntu-latest
needs: flatter
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
-178
View File
@@ -1,178 +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 \
libdbus-1-dev \
pkg-config
- 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
-4
View File
@@ -1,4 +0,0 @@
/target
.idea
packages/aur/bin/.git
packages/aur/standart/.git
View File
View File
Generated
-5514
View File
File diff suppressed because it is too large Load Diff
-110
View File
@@ -1,110 +0,0 @@
[package]
name = "pwsp"
version = "1.8.1"
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.52.1", features = ["full"] }
async-trait = "0.1.89"
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.149"
clap = { version = "4.6.1", default-features = false, features = [
"std",
"suggestions",
"help",
"usage",
"error-context",
"derive",
] }
dirs = "6.0.0"
itertools = "0.14.0"
rodio = { git = "https://github.com/arabianq/rodio.git", rev = "1a08f281c352622bd82b87b8731585245802d9cf", default-features = false, features = [
"symphonia-all",
"symphonia-libopus",
"playback",
] }
pipewire = "0.9.2"
evdev = { version = "0.13.2", features = ["tokio"] }
rfd = { version = "0.17.2", default-features = false, features = [
"xdg-portal",
] }
opener = { version = "0.8.4", features = ["reveal"] }
system-fonts = "0.1.0"
egui = { version = "0.34.2", default-features = false, features = [
"default_fonts",
"rayon",
] }
eframe = { version = "0.34.2", default-features = false, features = [
"default_fonts",
"glow",
"x11",
"wayland",
] }
egui_extras = "0.34.1"
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.
-120
View File
@@ -1,120 +0,0 @@
<div align="center">
<h1>🎵 PipeWire Soundpad (PWSP)</h1>
<p><b>A simple, modern, and powerful soundboard for Linux, written in Rust.</b></p>
<img src="assets/screenshot.png" alt="PWSP Screenshot" width="700"/>
</div>
## 🌟 Overview
**PipeWire Soundpad (PWSP)** is a graphical soundboard application that routes audio directly to your virtual microphone using **PipeWire**. It provides an intuitive interface for managing your audio collection, making it an ideal tool for gamers, streamers, and anyone looking to inject sound effects into voice chats on platforms like Discord, Zoom, or TeamSpeak.
## ✨ Key Features
* **🎙️ Virtual Microphone Output:** Seamlessly mixes your microphone input with sound effects by automatically managing PipeWire virtual devices.
* **🎵 Multi-Format Support:** Plays popular audio formats including `mp3`, `wav`, `ogg`, `flac`, `mp4`, and `aac`.
* **⚡ Global Hotkeys:** Trigger sounds instantly from anywhere, even when the app is running in the background.
* **📂 Smart Collection Management:** Drag-and-drop folders, quick search, and collapsible tracks to keep your library organized.
* **🎛️ Advanced Playback Controls:** Individual volume sliders, play/pause, position scrubbing, and concurrent multi-track playback.
* **🔌 Plug & Play:** Automatically detects when an input device is connected or disconnected and handles linking/unlinking on the fly.
* **🖥️ Modern GUI:** Clean, responsive, and lightweight interface powered by [egui](https://egui.rs/).
## ⚙️ Architecture
PWSP is built with a client-server model to ensure stability and separation of concerns:
* **`pwsp-daemon`**: The background engine. It runs silently, managing PipeWire virtual devices, audio routing, and playback.
* **`pwsp-gui`**: The graphical interface. Communicates with the daemon via a Unix socket to control playback and settings.
* **`pwsp-cli`**: The command-line tool. Perfect for scripting, hotkey binding, or quick terminal-based control.
---
## 🚀 Installation
### 📦 Flatpak (Recommended)
Install PWSP via Flatpak from our custom repository:
```bash
flatpak remote-add --user --if-not-exists pwsp-repo https://arabianq.github.io/pipewire-soundpad/index.flatpakrepo
# Install stable version
flatpak install --user arabianq-repo ru.arabianq.pwsp//stable
# Or install the nightly version (latest commit)
flatpak install --user arabianq-repo ru.arabianq.pwsp//nightly
```
### 🐧 Linux Packages
**Fedora (and derivatives):**
```bash
sudo dnf copr enable arabianq/pwsp
sudo dnf install pwsp
```
**Arch Linux (AUR):**
```bash
paru -S pwsp-bin # or 'pwsp' to build from source
```
**Debian / Ubuntu:**
Download pre-built `.deb` packages or standalone binaries from the [Releases page](https://github.com/arabianq/pipewire-soundpad/releases).
### 🦀 Cargo / Source Build
```bash
cargo install pwsp
# OR clone and build manually:
git clone https://github.com/arabianq/pipewire-soundpad.git
cd pipewire-soundpad
cargo build --release
```
*(Note: Requires Rust toolchain and PipeWire running on your system).*
---
## 🎮 Usage
### 1. Start the Daemon
Before using the GUI or CLI, the daemon must be running in the background.
```bash
# Recommended: Start and enable via systemd (starts on login)
systemctl --user enable --now pwsp-daemon
# Manual start (if not using systemd):
pwsp-daemon &
```
### 2. Using the GUI
1. **Add Sounds:** Click the **"+"** button to add a directory containing your audio files.
2. **Select Mic:** Choose your physical microphone from the dropdown. PWSP will instantly create a virtual microphone combining your voice and the soundboard.
3. **Play:** Click any sound to play it, adjust its volume, or assign a hotkey for quick access.
### 3. Using the CLI
Control the daemon directly from your terminal:
```bash
pwsp-cli action play /path/to/sound.mp3
pwsp-cli get volume
pwsp-cli set position 20
pwsp-cli --help # View all commands
```
---
## ⌨️ Shortcuts & Controls
| Action | Keyboard | Mouse |
| :----------------------------------- | :--------------------- | :------------------- |
| **Play Track** (Stops others) | `Enter` | `Left Click` |
| **Add Track** (Plays simultaneously) | `Ctrl + Enter` | `Ctrl + Left Click` |
| **Replace Last Track** | `Shift + Enter` | `Shift + Left Click` |
| **Pause / Resume** | `Space` | |
| **Stop All Tracks** | `Backspace` | |
| **Open / Close Settings** | `I` | |
| **Search** | `/` | |
| **Navigate Files** | `Ctrl + ↑ / ↓` | |
| **Navigate Directories** | `Ctrl + Shift + ↑ / ↓` | |
---
## 🤝 Contributing
Contributions, issues, and feature requests are welcome! Feel free to check out the [issues page](https://github.com/arabianq/pipewire-soundpad/issues).
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/arabianq/pipewire-soundpad)
## 📜 License
This project is licensed under the [MIT License](LICENSE).
+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: Fri, 24 Jul 2026 03:01:02 UTC
Architectures: amd64 arm64
Components: main
Description: Nightly APT Repository for PWSP
MD5Sum:
081ca4e74d7aa7d69f186b2b2015b315 650 main/binary-amd64/Packages
5dfb3b3a64f0fac5b5e3dae27b2f0ba5 456 main/binary-amd64/Packages.gz
facbb80485897bc6e0d67e37e5dd38e8 123 main/binary-amd64/Release
09bde3cef34399dd030cd979524c878e 677 main/binary-arm64/Packages
dbf5a0dc9445a5c1d3f8c43ff612a931 460 main/binary-arm64/Packages.gz
7418f9ee7493009aeaa4417f5d11ee62 123 main/binary-arm64/Release
SHA1:
c175536e7b2fdbcb5547a736ebf76bfc39abc01c 650 main/binary-amd64/Packages
7b045bf4c98e37c61aceb463738626b6b30e6812 456 main/binary-amd64/Packages.gz
66d8024fbaf66bb3aa03e04c8784ffc2d45d5e92 123 main/binary-amd64/Release
cce1d3557478b3b2377ecdc4b0f480d823d1c17d 677 main/binary-arm64/Packages
4e49c036b9cedbfde9fbcbe66287cf2573ca0df0 460 main/binary-arm64/Packages.gz
f7984ac62248818b3d8a2c59250042d426414d8c 123 main/binary-arm64/Release
SHA256:
456c91e50897e0f9dffc939124c8e9c522ccf4519b69491ec0f00a8bd6a631fb 650 main/binary-amd64/Packages
2574801b8db7fe11003b3c6b2fd536f972c9ec903f78c91473369e223b0e3d6c 456 main/binary-amd64/Packages.gz
b5a22f248703739051a84b584c2b0ea20a9b69b28e823c5a8b0aca5f33f90bba 123 main/binary-amd64/Release
a294541169af97911dc64f0e09cdaac8c8638d96cc9e4ccf7b8f581f4e8fc790 677 main/binary-arm64/Packages
365ef57b801edaf3e58b61d3da38b677fa17ced985e1bdcdc0bf918ebd79d7aa 460 main/binary-arm64/Packages.gz
a5e6d2298cf4bded7fd380a4bb06d97be39e9ea1a0b42acd5190a44aad619c92 123 main/binary-arm64/Release
-----BEGIN PGP SIGNATURE-----
iHUEARYKAB0WIQSq48VrHi02dxCM8oCDybDbLI+dFgUCamLVbwAKCRCDybDbLI+d
FosrAP0bxA/OvLDXAtlca9kHkXIDv/r/exqcfJtu/i5VN6k6nAEA1tYj/FdEo5Bd
wGOQ8D9sYgt/4jqwWlKO2JooJM1VvAM=
=TsTM
-----END PGP SIGNATURE-----
+28
View File
@@ -0,0 +1,28 @@
Origin: arabianq
Label: PipeWire Soundpad
Codename: nightly
Date: Fri, 24 Jul 2026 03:01:02 UTC
Architectures: amd64 arm64
Components: main
Description: Nightly APT Repository for PWSP
MD5Sum:
081ca4e74d7aa7d69f186b2b2015b315 650 main/binary-amd64/Packages
5dfb3b3a64f0fac5b5e3dae27b2f0ba5 456 main/binary-amd64/Packages.gz
facbb80485897bc6e0d67e37e5dd38e8 123 main/binary-amd64/Release
09bde3cef34399dd030cd979524c878e 677 main/binary-arm64/Packages
dbf5a0dc9445a5c1d3f8c43ff612a931 460 main/binary-arm64/Packages.gz
7418f9ee7493009aeaa4417f5d11ee62 123 main/binary-arm64/Release
SHA1:
c175536e7b2fdbcb5547a736ebf76bfc39abc01c 650 main/binary-amd64/Packages
7b045bf4c98e37c61aceb463738626b6b30e6812 456 main/binary-amd64/Packages.gz
66d8024fbaf66bb3aa03e04c8784ffc2d45d5e92 123 main/binary-amd64/Release
cce1d3557478b3b2377ecdc4b0f480d823d1c17d 677 main/binary-arm64/Packages
4e49c036b9cedbfde9fbcbe66287cf2573ca0df0 460 main/binary-arm64/Packages.gz
f7984ac62248818b3d8a2c59250042d426414d8c 123 main/binary-arm64/Release
SHA256:
456c91e50897e0f9dffc939124c8e9c522ccf4519b69491ec0f00a8bd6a631fb 650 main/binary-amd64/Packages
2574801b8db7fe11003b3c6b2fd536f972c9ec903f78c91473369e223b0e3d6c 456 main/binary-amd64/Packages.gz
b5a22f248703739051a84b584c2b0ea20a9b69b28e823c5a8b0aca5f33f90bba 123 main/binary-amd64/Release
a294541169af97911dc64f0e09cdaac8c8638d96cc9e4ccf7b8f581f4e8fc790 677 main/binary-arm64/Packages
365ef57b801edaf3e58b61d3da38b677fa17ced985e1bdcdc0bf918ebd79d7aa 460 main/binary-arm64/Packages.gz
a5e6d2298cf4bded7fd380a4bb06d97be39e9ea1a0b42acd5190a44aad619c92 123 main/binary-arm64/Release
+7
View File
@@ -0,0 +1,7 @@
-----BEGIN PGP SIGNATURE-----
iHUEABYKAB0WIQSq48VrHi02dxCM8oCDybDbLI+dFgUCamLVbgAKCRCDybDbLI+d
FvD1AP47jXHB/XgQDuwH9Wjvfp1g7/uihpwUTFWdp5WdSNDvCwD/aHwlMWv74ZHA
6HuBj0z/WYM+GkYtkNSzWs4uDRulKww=
=9VjN
-----END PGP SIGNATURE-----
@@ -0,0 +1,17 @@
Package: pwsp
Version: 1.13.0+git20260724.6d7abdb
Architecture: amd64
Homepage: https://pwsp.arabianq.ru
Maintainer: arabian
Installed-Size: 39842
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.13.0+git20260724.6d7abdb_amd64.deb
Size: 8716136
SHA256: 965fece0c573b531d6f00943bd151dde2eb3fa5ff328677e7291bc8e658e4077
SHA1: e4db36f4e1f8b793144ea026968d9547f2cbc6cf
MD5sum: 79b8317c13c9a9532a7d400fa481e6ce
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.13.0+git20260724.6d7abdb
Architecture: arm64
Homepage: https://pwsp.arabianq.ru
Maintainer: arabian
Installed-Size: 37539
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.13.0+git20260724.6d7abdb_arm64.deb
Size: 7756672
SHA256: a486978ad4e3f063e1cdc0d70a46cfd8564fe9bb68aff5a78f7135678392b913
SHA1: c71141a68a0da586e2c66c27a8020fb6aa9fe247
MD5sum: bed2684dc907bf4d2d3dae8be9c11068
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: Fri, 24 Jul 2026 03:07:45 UTC
Architectures: amd64 arm64
Components: main
Description: APT Repository for PWSP
MD5Sum:
71ecd28b5e8105ff860f1f246b217114 614 main/binary-amd64/Packages
6ab8e8d35578f11088babd7de1099414 439 main/binary-amd64/Packages.gz
f82d685802fbb32fec3c9ba8e11e55b9 115 main/binary-amd64/Release
937dbeb64d18155366c07b8538143c7a 614 main/binary-arm64/Packages
39d9ef2a83e1c45535a0e2ed4fee56e4 440 main/binary-arm64/Packages.gz
113dd4f621500874592b2a2f1eeb45ae 115 main/binary-arm64/Release
SHA1:
a4942b1271f02fe6e52304d2a661317b20f0d994 614 main/binary-amd64/Packages
f25bf00683d1598a151f56d4f5da3191fefbfb62 439 main/binary-amd64/Packages.gz
1ff55a261c49c41f38e6da56f1f5d7136d38b08f 115 main/binary-amd64/Release
44bc65d4970b17b7952fd1c28cb3042a6432ba56 614 main/binary-arm64/Packages
58b9ff4a9ba9e0a2d09e4036b4d4cf2c3ca39dd9 440 main/binary-arm64/Packages.gz
be63fa980d70857efdc424c837cd54ab986a40cd 115 main/binary-arm64/Release
SHA256:
025b1ef6e43cb206ed91ffa10359da1c1d55116e2c58cd34a52ed41151ffa9d2 614 main/binary-amd64/Packages
f3925a4fe33ec6a019dd32dc9233dbb7c217840570b51e4a8691649b1535d83c 439 main/binary-amd64/Packages.gz
c670ad086ec5b85d17211cb15e8e4ac1fb49a6398d0c9672992c26a009229d8c 115 main/binary-amd64/Release
ea253ef6d12f1f1b9426c42cd49a05c710cd353ef021426e1691c569e4b642e7 614 main/binary-arm64/Packages
1233fad86b413ab9439b7e481570cd36a972e53009cf595e4a411e2b38aed07f 440 main/binary-arm64/Packages.gz
4a90ce2395fbe57635b23de83540564c0917b2f419cd69ab2630fc1520bb5c11 115 main/binary-arm64/Release
-----BEGIN PGP SIGNATURE-----
iHUEARYKAB0WIQSq48VrHi02dxCM8oCDybDbLI+dFgUCamLXAQAKCRCDybDbLI+d
FuDYAP9ivfDJVVxOSN5vRGimqj2cZAo/1cZNzllpFqm8DxulEgEAmFMBjuD4I3Nt
G1Alfeld64OslEurjZrjCdmYTdmtsw8=
=KYf8
-----END PGP SIGNATURE-----
+28
View File
@@ -0,0 +1,28 @@
Origin: arabianq
Label: PipeWire Soundpad
Codename: stable
Date: Fri, 24 Jul 2026 03:07:45 UTC
Architectures: amd64 arm64
Components: main
Description: APT Repository for PWSP
MD5Sum:
71ecd28b5e8105ff860f1f246b217114 614 main/binary-amd64/Packages
6ab8e8d35578f11088babd7de1099414 439 main/binary-amd64/Packages.gz
f82d685802fbb32fec3c9ba8e11e55b9 115 main/binary-amd64/Release
937dbeb64d18155366c07b8538143c7a 614 main/binary-arm64/Packages
39d9ef2a83e1c45535a0e2ed4fee56e4 440 main/binary-arm64/Packages.gz
113dd4f621500874592b2a2f1eeb45ae 115 main/binary-arm64/Release
SHA1:
a4942b1271f02fe6e52304d2a661317b20f0d994 614 main/binary-amd64/Packages
f25bf00683d1598a151f56d4f5da3191fefbfb62 439 main/binary-amd64/Packages.gz
1ff55a261c49c41f38e6da56f1f5d7136d38b08f 115 main/binary-amd64/Release
44bc65d4970b17b7952fd1c28cb3042a6432ba56 614 main/binary-arm64/Packages
58b9ff4a9ba9e0a2d09e4036b4d4cf2c3ca39dd9 440 main/binary-arm64/Packages.gz
be63fa980d70857efdc424c837cd54ab986a40cd 115 main/binary-arm64/Release
SHA256:
025b1ef6e43cb206ed91ffa10359da1c1d55116e2c58cd34a52ed41151ffa9d2 614 main/binary-amd64/Packages
f3925a4fe33ec6a019dd32dc9233dbb7c217840570b51e4a8691649b1535d83c 439 main/binary-amd64/Packages.gz
c670ad086ec5b85d17211cb15e8e4ac1fb49a6398d0c9672992c26a009229d8c 115 main/binary-amd64/Release
ea253ef6d12f1f1b9426c42cd49a05c710cd353ef021426e1691c569e4b642e7 614 main/binary-arm64/Packages
1233fad86b413ab9439b7e481570cd36a972e53009cf595e4a411e2b38aed07f 440 main/binary-arm64/Packages.gz
4a90ce2395fbe57635b23de83540564c0917b2f419cd69ab2630fc1520bb5c11 115 main/binary-arm64/Release
+7
View File
@@ -0,0 +1,7 @@
-----BEGIN PGP SIGNATURE-----
iHUEABYKAB0WIQSq48VrHi02dxCM8oCDybDbLI+dFgUCamLXAQAKCRCDybDbLI+d
Fj18AQD57FZun/PwSNKsuSAA9AiYFKObip1ssxi9GBfSJ7fCUgEA0P5wzDw2PHOY
HtiG5spoGKcUFSofQ2/I71UCYr4phg0=
=mHlp
-----END PGP SIGNATURE-----
@@ -0,0 +1,17 @@
Package: pwsp
Version: 1.13.0-1
Architecture: amd64
Homepage: https://pwsp.arabianq.ru
Maintainer: arabian
Installed-Size: 14066
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.13.0-1_amd64.deb
Size: 4487632
SHA256: 18428fc7f05ef9f98900257d56b09c3dc3d0bf7c531c230ff840a252c48ff9ea
SHA1: f87a02e174367fbccddc9d53426f649ee05cab7e
MD5sum: 361dc63a721c92f60761c2647b927555
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.13.0-1
Architecture: arm64
Homepage: https://pwsp.arabianq.ru
Maintainer: arabian
Installed-Size: 11582
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.13.0-1_arm64.deb
Size: 3973864
SHA256: aabf3cbcfc2df9dc310b40d8461e9ae1c0bbc446b1e0681bdd7bd987a8b677c1
SHA1: 2b23e2bd742f98545ddc38804641ef859734b315
MD5sum: 35f801bfe10f0838472b99907911e8ed
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.
+13
View File
@@ -0,0 +1,13 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEaezCthYJKwYBBAHaRw8BAQdAyDiO0akghMksZ6O02KlelezoaePzXhH8yNWS
eAWTuRi0DGEudGV2Z0B5YS5ydYiZBBMWCgBBFiEEquPFax4tNncQjPKAg8mw2yyP
nRYFAmnswrYCGwMFCQWjmoAFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQ
g8mw2yyPnRbXawEAo0EPrAfePpIVj+CIph+Muj1ZU9Ui5+CD32J9XtSJYRcBANTz
txOH1oG5n3eFZ/HCnU4Z+yiqEhGI2b//fC8jxx0HuDgEaezCthIKKwYBBAGXVQEF
AQEHQEt/m+vl2KMpu+TZWaLDa6jnR3ctu3xbYpjfqDtOl+YnAwEIB4h4BBgWCgAg
FiEEquPFax4tNncQjPKAg8mw2yyPnRYFAmnswrYCGwwACgkQg8mw2yyPnRbEHAD+
PiMF1s5ZYNlfp3RcOTasrasWDjmCXvFYbeM3vWCAO94BAIlfzEZKodeZ4jfTuf+u
QoXpv5yiGFpf7xFOxcvXE38B
=F4OX
-----END PGP PUBLIC KEY BLOCK-----
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

-11
View File
@@ -1,11 +0,0 @@
[Unit]
Description=Pipewire Soundpad Daemon
After=pipewire.service
[Service]
ExecStart=/usr/bin/pwsp-daemon
Restart=no
RuntimeDirectory=pwsp
[Install]
WantedBy=default.target
-8
View File
@@ -1,8 +0,0 @@
[Desktop Entry]
Name=PWSP (Soundpad)
Comment=Let's you play audio files through you microphone
Exec=pwsp-gui %u
Icon=pwsp
Terminal=false
Type=Application
Categories=Audio
Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

+4
View File
@@ -0,0 +1,4 @@
[core]
repo_version=1
mode=archive-z2
indexed-deltas=true

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