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
4114 changed files with 285 additions and 21697 deletions
-1
View File
@@ -1 +0,0 @@
custom: ['https://dalink.to/arabianq', 'https://boosty.to/arabian', 'https://sponsr.ru/notultranx/']
-29
View File
@@ -1,29 +0,0 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "cargo"
directory: "/"
schedule:
interval: "weekly"
groups:
egui-stack:
patterns:
- "egui*"
- "eframe"
serde-stack:
patterns:
- "serde*"
tokio-stack:
patterns:
- "tokio*"
- "reqwest"
clap-stack:
patterns:
- "clap*"
-257
View File
@@ -1,257 +0,0 @@
name: Build
permissions:
contents: write
packages: write
on:
push:
branches: [main, master]
pull_request:
branches: [main, master]
workflow_dispatch:
jobs:
build-and-package:
strategy:
matrix:
include:
- arch: x64
runner: ubuntu-latest
- arch: arm64
runner: ubuntu-24.04-arm
fail-fast: false
runs-on: ${{ matrix.runner }}
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 \
libssl-dev \
pkg-config
- name: Checkout code
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Setup Rust toolchain
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
cache: false
- name: Rust Cache
uses: swatinem/rust-cache@v2
with:
prefix-key: "v3-${{ matrix.runner }}"
- name: Run tests
run: cargo test --locked
- name: Build all binaries
run: cargo build --locked
- name: Extract all binary names
id: cargo-meta
run: |
set -euo pipefail
BIN_NAMES=$(cargo metadata --no-deps --format-version 1 \
| jq -r '.packages[].targets[] | select(.kind[] | contains("bin")) | .name')
echo "bin_names<<EOF" >> $GITHUB_OUTPUT
echo "$BIN_NAMES" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Package ZIP archive
shell: bash
run: |
set -euo pipefail
COMMIT_SHA="${{ github.sha }}"
ARCHIVE_NAME="pwsp-${COMMIT_SHA}-linux-${{ matrix.arch }}.zip"
echo "Creating archive: $ARCHIVE_NAME"
FILES=()
while IFS= read -r BIN; do
[ -z "$BIN" ] && continue
FILES+=("target/debug/$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
zip -j "$ARCHIVE_NAME" "${FILES[@]}"
- name: Upload ZIP artifact
uses: actions/upload-artifact@v7
with:
name: archive-${{ matrix.arch }}
path: pwsp-*.zip
retention-days: 7
- name: Cache cargo-deb
id: cache-cargo-deb
uses: actions/cache@v6
with:
path: ~/.cargo/bin/cargo-deb
key: ${{ runner.os }}-${{ runner.arch }}-cargo-deb-v1
- name: Install cargo-deb
if: steps.cache-cargo-deb.outputs.cache-hit != 'true'
run: cargo install --locked cargo-deb
- name: Create .deb package
shell: bash
run: |
set -euo pipefail
export PATH="$HOME/.cargo/bin:$PATH"
if [ "${{ github.event_name }}" == "push" ] && [ "${{ github.ref }}" == "refs/heads/main" ]; then
BASE_VERSION=$(grep '^version =' Cargo.toml | head -1 | cut -d'"' -f2)
GIT_REV=$(git rev-parse --short HEAD)
DATE=$(date +%Y%m%d)
DEB_VER="${BASE_VERSION}+git${DATE}.${GIT_REV}"
echo "Building nightly deb version: $DEB_VER"
cargo-deb -p pwsp-gui --no-build --no-strip --profile dev --deb-version "$DEB_VER"
else
cargo-deb -p pwsp-gui --no-build --no-strip --profile dev
fi
- name: Upload .deb artifact
uses: actions/upload-artifact@v7
with:
name: deb-packages-${{ matrix.arch }}
path: target/debian/*.deb
retention-days: 7
deploy-nightly-apt:
needs: build-and-package
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
concurrency: gh-pages-deploy
permissions:
contents: write
steps:
- name: Checkout code
uses: actions/checkout@v7
- name: Setup GPG
id: gpg
uses: crazy-max/ghaction-import-gpg@v7
with:
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.GPG_PASSPHRASE }}
- name: Download DEB artifacts
uses: actions/download-artifact@v8
with:
pattern: deb-packages-*
path: debs
merge-multiple: true
- name: Checkout existing gh-pages
uses: actions/checkout@v7
with:
ref: gh-pages
path: gh-pages-branch
continue-on-error: true
- name: Generate Nightly APT Repository
run: |
sudo apt-get update
sudo apt-get install -y reprepro
mkdir -p apt-repo
if [ -d "gh-pages-branch/apt" ]; then
cp -r gh-pages-branch/apt/* apt-repo/ || true
fi
mkdir -p apt-repo/conf
cat <<EOF > apt-repo/conf/distributions
Origin: arabianq
Label: PipeWire Soundpad
Codename: stable
Architectures: amd64 arm64
Components: main
Description: APT Repository for PWSP
SignWith: ${{ steps.gpg.outputs.fingerprint }}
Origin: arabianq
Label: PipeWire Soundpad
Codename: nightly
Architectures: amd64 arm64
Components: main
Description: Nightly APT Repository for PWSP
SignWith: ${{ steps.gpg.outputs.fingerprint }}
EOF
gpg --armor --export ${{ steps.gpg.outputs.fingerprint }} > apt-repo/pubkey.gpg
cd apt-repo
for deb in ../debs/*.deb; do
if [ -f "$deb" ]; then
echo "Adding $deb to nightly APT repository..."
reprepro includedeb nightly "$deb"
fi
done
- name: Deploy APT Repo to GitHub Pages
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./apt-repo
destination_dir: apt
keep_files: true
flatpak-build:
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
strategy:
matrix:
include:
- arch: x86_64
runner: ubuntu-latest
- arch: aarch64
runner: ubuntu-24.04-arm
fail-fast: false
runs-on: ${{ matrix.runner }}
container:
image: ghcr.io/flathub-infra/flatpak-github-actions:freedesktop-25.08
options: --privileged
steps:
- uses: actions/checkout@v7
- name: Build Flatpak
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
with:
bundle: ru.arabianq.pwsp_${{ matrix.arch }}.flatpak
manifest-path: packages/flatpak/ru.arabianq.pwsp.yaml
cache: true
branch: master
build-bundle: true
arch: ${{ matrix.arch }}
trigger-copr-nightly:
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- name: Install copr-cli
run: pip install copr-cli
- name: Trigger Copr Build
env:
COPR_CONFIG: ${{ secrets.COPR_CONFIG }}
run: |
mkdir -p ~/.config
echo "$COPR_CONFIG" > ~/.config/copr
copr-cli buildscm --nowait \
--clone-url https://github.com/arabianq/pipewire-soundpad.git \
--commit ${{ github.sha }} \
--spec packages/rpm/pwsp-git.spec \
arabianq/pwsp
-36
View File
@@ -1,36 +0,0 @@
name: Dependabot Flatpak Cargo Sources
on:
pull_request:
types: [opened, synchronize, reopened]
paths:
- "Cargo.lock"
jobs:
update-cargo-sources:
if: github.actor == 'dependabot[bot]'
runs-on: ubuntu-latest
permissions:
contents: write # Needed to push back to the branch
steps:
- name: Checkout code
uses: actions/checkout@v7
with:
ref: ${{ github.head_ref }}
- name: Setup Python
uses: actions/setup-python@v7
with:
python-version: "3.x"
- name: Install dependencies
run: pip install aiohttp tomlkit
- name: Generate cargo-sources.json
run: bash ./scripts/generate-sources.sh
- name: Commit and push changes
uses: stefanzweifel/git-auto-commit-action@v7
with:
commit_message: "chore(flatpak): automatically update cargo-sources.json"
file_pattern: "packages/flatpak/cargo-sources.json"
-186
View File
@@ -1,186 +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:
build-flatpak:
name: Build Flatpak (${{ matrix.arch }})
strategy:
matrix:
include:
- arch: x86_64
runner: ubuntu-latest
- arch: aarch64
runner: ubuntu-24.04-arm
fail-fast: false
runs-on: ${{ matrix.runner }}
permissions:
contents: read
container:
image: ghcr.io/andyholmes/flatter/freedesktop:25.08
options: --privileged
steps:
- name: Checkout
uses: actions/checkout@v7
with:
ref: ${{ inputs.tag_name || github.ref }}
- name: Setup GPG
id: gpg
uses: crazy-max/ghaction-import-gpg@v7
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: |
sed -i '/^branch:/d' packages/flatpak/ru.arabianq.pwsp.yaml
sed -i '/^default-branch:/d' packages/flatpak/ru.arabianq.pwsp.yaml
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
flatpak install -y flathub 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: true
upload-pages-artifact: false
arch: ${{ matrix.arch }}
cache: true
prepare-repo:
name: Prepare OSTree Repo
needs: build-flatpak
runs-on: ubuntu-latest
concurrency: gh-pages-deploy
container:
image: ghcr.io/andyholmes/flatter/freedesktop:25.08
options: --privileged
permissions:
contents: write # Needed to upload files to GitHub Release
steps:
- name: Download Flatpak Bundles
uses: actions/download-artifact@v8
with:
path: bundles
pattern: ru.arabianq.pwsp-*
- name: Checkout existing gh-pages
uses: actions/checkout@v7
with:
ref: gh-pages
path: gh-pages-branch
continue-on-error: true
- name: Setup GPG
id: gpg
uses: crazy-max/ghaction-import-gpg@v7
with:
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.GPG_PASSPHRASE }}
- name: Update OSTree Repo and Prepare Release Bundles
run: |
mkdir -p release-bundles
# Inherit existing OSTree repository to preserve previous branches (e.g. stable vs nightly)
# Only inherit if objects/ exists, otherwise it's a corrupted/empty repo due to Git ignoring empty folders
if [ -d "gh-pages-branch/objects" ]; then
echo "Found existing OSTree repository. Copying..."
cp -r gh-pages-branch pages-repo
# Clean up the .git folder so it doesn't interfere
rm -rf pages-repo/.git
# Recreate empty OSTree directories that Git ignored when pushing previously
mkdir -p pages-repo/refs/heads pages-repo/refs/mirrors pages-repo/refs/remotes \
pages-repo/objects pages-repo/state pages-repo/extensions pages-repo/tmp
else
echo "Initializing new OSTree repository..."
mkdir -p pages-repo
ostree init --mode=archive-z2 --repo=pages-repo
fi
shopt -s nullglob
for dir in bundles/ru.arabianq.pwsp-*; do
arch=$(basename "$dir" | sed 's/ru.arabianq.pwsp-//')
# Find the flatpak file inside the dir
bundle=$(find "$dir" -name "*.flatpak" | head -n 1)
if [ -n "$bundle" ]; then
echo "Importing $bundle for architecture $arch..."
flatpak build-import-bundle pages-repo "$bundle"
# Copy with a unique name for GitHub Release
cp "$bundle" "release-bundles/ru.arabianq.pwsp-${arch}.flatpak"
fi
done
# Update summary and sign the repository
flatpak build-update-repo --generate-static-deltas --gpg-sign=${{ steps.gpg.outputs.fingerprint }} pages-repo
# Export GPG public key for manual import
gpg --export ${{ steps.gpg.outputs.fingerprint }} > pages-repo/pwsp.gpg
# Generate a .flatpakrepo file for easy installation
GPG_BASE64=$(gpg --export ${{ steps.gpg.outputs.fingerprint }} | base64 -w 0)
cat <<EOF | sed 's/^ *//' > pages-repo/pwsp.flatpakrepo
[Flatpak Repo]
Title=PipeWire Soundpad
Url=https://arabianq.github.io/pipewire-soundpad/
Homepage=https://github.com/arabianq/pipewire-soundpad
Comment=PipeWire Soundpad Flatpak Repository
Description=Official repository for PWSP
GPGKey=${GPG_BASE64}
EOF
- name: Deploy Flatpak Repo to GitHub Pages
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./pages-repo
destination_dir: .
keep_files: true
- name: Upload bundles to GitHub Release
if: github.event_name == 'release'
uses: softprops/action-gh-release@v3
with:
files: release-bundles/*.flatpak
tag_name: ${{ github.event.release.tag_name }}
-272
View File
@@ -1,272 +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 || '' }}"
EVENT_TAG="${{ github.event.release.tag_name || '' }}"
if [ -n "$INPUT_TAG" ]; then
echo "tag=$INPUT_TAG" >> $GITHUB_OUTPUT
elif [ -n "$EVENT_TAG" ]; then
echo "tag=$EVENT_TAG" >> $GITHUB_OUTPUT
elif [[ "${GITHUB_REF:-}" =~ ^refs/tags/(.+)$ ]]; then
echo "tag=${BASH_REMATCH[1]}" >> $GITHUB_OUTPUT
else
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 "tag=$TAG_NAME" >> $GITHUB_OUTPUT
else
echo "tag=" >> $GITHUB_OUTPUT
fi
fi
- name: Fail if no tag determined
if: ${{ steps.tag.outputs.tag == '' }}
run: |
echo "ERROR: No tag determined."
exit 1
build-release:
needs: prepare
strategy:
matrix:
include:
- arch: x64
runner: ubuntu-latest
- arch: arm64
runner: ubuntu-24.04-arm
fail-fast: false
runs-on: ${{ matrix.runner }}
steps:
- name: Install apt deps
run: |
sudo apt-get update
sudo apt-get install -y \
zip jq \
libpipewire-0.3-dev \
libclang-dev \
libasound2-dev \
libdbus-1-dev \
libssl-dev \
pkg-config
- name: Checkout code at tag
uses: actions/checkout@v7
with:
ref: ${{ needs.prepare.outputs.tag }}
fetch-depth: 0
- name: Setup Rust toolchain
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
cache: false
- name: Rust Cache
uses: swatinem/rust-cache@v2
with:
prefix-key: "v3-${{ matrix.runner }}"
- name: Extract all binary names
id: cargo-meta
run: |
set -euo pipefail
BIN_NAMES=$(cargo metadata --no-deps --format-version 1 \
| jq -r '.packages[].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 ZIP archive
shell: bash
run: |
set -euo pipefail
TAG="${{ needs.prepare.outputs.tag }}"
ARCHIVE_NAME="pwsp-${TAG}-linux-${{ matrix.arch }}.zip"
FILES=()
while IFS= read -r BIN; do
[ -z "$BIN" ] && continue
FILES+=("target/release/$BIN")
done <<< "${{ steps.cargo-meta.outputs.bin_names }}"
zip -j "$ARCHIVE_NAME" "${FILES[@]}"
- name: Upload ZIP artifact
uses: actions/upload-artifact@v7
with:
name: zip-archive-${{ matrix.arch }}
path: pwsp-*.zip
retention-days: 1
- name: Cache cargo-deb
id: cache-cargo-deb
uses: actions/cache@v6
with:
path: ~/.cargo/bin/cargo-deb
key: ${{ runner.os }}-${{ runner.arch }}-cargo-deb-v1
- name: Install cargo-deb
if: steps.cache-cargo-deb.outputs.cache-hit != 'true'
run: cargo install --locked cargo-deb
- name: Create .deb package
shell: bash
run: |
set -euo pipefail
export PATH="$HOME/.cargo/bin:$PATH"
cargo-deb -p pwsp-gui --no-build
- name: Upload DEB artifact
uses: actions/upload-artifact@v7
with:
name: deb-package-${{ matrix.arch }}
path: target/debian/*.deb
retention-days: 1
publish-release:
needs: [prepare, build-release]
runs-on: ubuntu-latest
steps:
- name: Download all artifacts
uses: actions/download-artifact@v8
with:
path: ./dist
merge-multiple: true
- name: Upload artifacts to Release
uses: softprops/action-gh-release@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag_name: ${{ needs.prepare.outputs.tag }}
files: |
./dist/pwsp-*.zip
./dist/*.deb
trigger-copr:
needs: prepare
runs-on: ubuntu-latest
steps:
- name: Install copr-cli
run: pip install copr-cli
- name: Trigger Copr Build
env:
COPR_CONFIG: ${{ secrets.COPR_CONFIG }}
run: |
mkdir -p ~/.config
echo "$COPR_CONFIG" > ~/.config/copr
copr-cli buildscm --nowait \
--clone-url https://github.com/arabianq/pipewire-soundpad.git \
--commit ${{ needs.prepare.outputs.tag }} \
--spec packages/rpm/pwsp.spec \
arabianq/pwsp
build-apt-repo:
needs: [prepare, build-release]
runs-on: ubuntu-latest
concurrency: gh-pages-deploy
permissions:
contents: write
steps:
- name: Checkout code
uses: actions/checkout@v7
- name: Setup GPG
id: gpg
uses: crazy-max/ghaction-import-gpg@v7
with:
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.GPG_PASSPHRASE }}
- name: Download DEB artifacts
uses: actions/download-artifact@v8
with:
pattern: deb-package-*
path: debs
merge-multiple: true
- name: Checkout existing gh-pages
uses: actions/checkout@v7
with:
ref: gh-pages
path: gh-pages-branch
continue-on-error: true
- name: Generate APT Repository
run: |
sudo apt-get update
sudo apt-get install -y reprepro
mkdir -p apt-repo
# Restore existing repository first so we don't lose old packages
if [ -d "gh-pages-branch/apt" ]; then
cp -r gh-pages-branch/apt/* apt-repo/ || true
fi
# Always rewrite the config and public key to ensure they are up-to-date
mkdir -p apt-repo/conf
cat <<EOF > apt-repo/conf/distributions
Origin: arabianq
Label: PipeWire Soundpad
Codename: stable
Architectures: amd64 arm64
Components: main
Description: APT Repository for PWSP
SignWith: ${{ steps.gpg.outputs.fingerprint }}
Origin: arabianq
Label: PipeWire Soundpad
Codename: nightly
Architectures: amd64 arm64
Components: main
Description: Nightly APT Repository for PWSP
SignWith: ${{ steps.gpg.outputs.fingerprint }}
EOF
gpg --armor --export ${{ steps.gpg.outputs.fingerprint }} > apt-repo/pubkey.gpg
cd apt-repo
for deb in ../debs/*.deb; do
if [ -f "$deb" ]; then
echo "Adding $deb to APT repository..."
reprepro includedeb stable "$deb"
fi
done
- name: Deploy APT Repo to GitHub Pages
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./apt-repo
destination_dir: apt
keep_files: true
-4
View File
@@ -1,4 +0,0 @@
/target
.idea
packages/aur/bin/.git
packages/aur/standart/.git
View File
View File
Generated
-5751
View File
File diff suppressed because it is too large Load Diff
-90
View File
@@ -1,90 +0,0 @@
[workspace]
members = [
"pwsp-lib",
"pwsp-daemon",
"pwsp-cli",
"pwsp-gui"
]
resolver = "2"
[workspace.package]
version = "1.12.5"
edition = "2024"
authors = ["arabian"]
homepage = "https://pwsp.arabianq.ru"
repository = "https://github.com/arabianq/pipewire-soundpad"
license = "MIT"
description = "PWSP lets you play audio files through your microphone. Has both CLI and GUI clients."
keywords = ["soundpad", "pipewire", "linux", "cli", "gui"]
[workspace.dependencies]
pwsp-lib = { path = "pwsp-lib" }
pwsp-daemon = { path = "pwsp-daemon" }
pwsp-cli = { path = "pwsp-cli" }
pwsp-gui = { path = "pwsp-gui" }
tokio = { version = "1.52.3", 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.15.0"
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.1"
anyhow = "1.0.102"
rustix = { version = "1.1.4", features = ["process"] }
rust-i18n = "4.0.0"
sys-locale = "0.3.2"
rodio = { git = "https://github.com/arabianq/rodio.git", rev = "4746803c2e5f67004264ac946708d47a9faf510c", default-features = false, features = [
"symphonia-all",
"symphonia-libopus",
"playback",
] }
pipewire = "0.10.0"
egui = { version = "0.35.0", default-features = false, features = [
"default_fonts",
"rayon",
] }
eframe = { version = "0.35.0", default-features = false, features = [
"default_fonts",
"glow",
"x11",
"wayland",
] }
egui_extras = "0.35.0"
egui_material_icons = "0.7.0"
egui_dnd = "0.16.0"
reqwest = { version = "0.13.4", default-features = false, features = ["native-tls"] }
percent-encoding = "2.3.2"
[profile.dev]
[profile.dev.package."*"]
opt-level = 3
debug = false
[profile.release]
strip = true
lto = true
codegen-units = 1
opt-level = "z"
panic = "abort"
-21
View File
@@ -1,21 +0,0 @@
MIT License
Copyright (c) 2026 arabianq
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.
-149
View File
@@ -1,149 +0,0 @@
# PipeWire Soundpad (PWSP) 🎵
![PWSP Screenshot](pwsp-gui/assets/screenshot.png)
[🇷🇺 Читать на русском](README.ru.md) | [🇺🇸 Read in English](README.md)
[![GitHub Actions Build Status](https://img.shields.io/github/actions/workflow/status/arabianq/pipewire-soundpad/build.yml?branch=main&style=flat-square)](https://github.com/arabianq/pipewire-soundpad/actions)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT)
[![GitHub Release](https://img.shields.io/github/v/release/arabianq/pipewire-soundpad?style=flat-square)](https://github.com/arabianq/pipewire-soundpad/releases/latest)
[![Platform](https://img.shields.io/badge/Platform-Linux%20%7C%20PipeWire-blue?style=flat-square)](https://pipewire.org/)
**PipeWire Soundpad (PWSP)** is a modern, low-latency application that lets you play audio files directly through your microphone. Designed specifically for Linux, it leverages the power of PipeWire to achieve native integration without the need for Pulseaudio bridges or complex virtual sinks.
---
## ✨ Features
- **Native PipeWire Integration:** Direct communication with the PipeWire API for the lowest possible latency.
- **Modular Architecture:** Consists of a background `daemon`, a command-line interface (`cli`), and a graphical user interface (`gui`).
- **Modern GUI:** Built with `egui`, supporting both Wayland and X11 seamlessly.
- **Global Hotkeys:** Powered by `evdev`, allowing you to play sounds from anywhere.
- **Broad Audio Support:** Powered by `rodio` and `symphonia` to support a wide range of audio formats.
---
## 🚀 Installation
We provide multiple ways to install PWSP, including stable releases and rolling "nightly" builds directly from the `main` branch.
### 📦 Flatpak (Recommended)
Add our official OSTree repository and install the application:
```bash
# Add the repository
flatpak remote-add --if-not-exists pwsp https://arabianq.github.io/pipewire-soundpad/pwsp.flatpakrepo
# Install the Stable version
flatpak install pwsp ru.arabianq.pwsp//stable
# OR Install the Nightly version (rolling updates)
flatpak install pwsp ru.arabianq.pwsp//nightly
```
### 🟠 Debian / Ubuntu (APT Repository)
We maintain an official APT repository for seamless updates via `apt`:
```bash
# 1. Download the public GPG key
wget -O- https://arabianq.github.io/pipewire-soundpad/apt/pubkey.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/pwsp.gpg
# 2. Add the repository (Choose STABLE or NIGHTLY)
# For Stable:
echo "deb [signed-by=/etc/apt/keyrings/pwsp.gpg] https://arabianq.github.io/pipewire-soundpad/apt/ stable main" | sudo tee /etc/apt/sources.list.d/pwsp.list
# For Nightly:
# echo "deb [signed-by=/etc/apt/keyrings/pwsp.gpg] https://arabianq.github.io/pipewire-soundpad/apt/ nightly main" | sudo tee /etc/apt/sources.list.d/pwsp.list
# 3. Update and install
sudo apt update
sudo apt install pwsp
```
### 🐧 Fedora / RHEL (COPR)
Available via the Fedora COPR repository:
```bash
sudo dnf copr enable arabianq/pwsp
sudo dnf install pwsp
```
### ⚙️ Manual / Standalone
You can manually download `.deb` packages or standalone `.zip` binaries from the [Releases page](https://github.com/arabianq/pipewire-soundpad/releases).
### 🦀 Build from Source
Make sure you have Rust, Cargo, and the required dependencies (`libpipewire-0.3-dev`, `libclang-dev`, `libasound2-dev`, `libdbus-1-dev`) installed.
```bash
git clone https://github.com/arabianq/pipewire-soundpad.git
cd pipewire-soundpad
cargo build --release --locked
```
The binaries will be located in `target/release/`.
---
## 🎮 Usage
### 1. Start the Daemon
PWSP operates via a background daemon that handles the audio routing.
```bash
# Run the daemon
pwsp-daemon
```
_(Tip: If installed via package managers, a systemd user service is provided. You can enable it with `systemctl --user enable --now pwsp-daemon.service`)_
### 2. Launch the GUI
Simply run the graphical interface to manage and play your sounds:
```bash
pwsp-gui
```
### 3. Use the CLI
You can also interact with the daemon directly via the command line:
```bash
pwsp-cli play /path/to/sound.mp3
pwsp-cli stop
pwsp-cli status
```
---
## 📚 Documentation & DeepWiki
For advanced configuration, troubleshooting, architecture details, and custom setups, please visit our official Wiki:
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/arabianq/pipewire-soundpad)
---
## 🤝 Contributing
Contributions, issues, and feature requests are welcome!
1. Fork the project.
2. Create your feature branch (`git checkout -b feat/amazing-feature`).
3. Commit your changes (`git commit -m 'Add some amazing feature'`).
4. Push to the branch (`git push origin feat/amazing-feature`).
5. Open a Pull Request.
---
## 📝 License
Distributed under the MIT License. See `LICENSE` for more information.
_Built with ❤️ for the Linux community._
-149
View File
@@ -1,149 +0,0 @@
# PipeWire Soundpad (PWSP) 🎵
![PWSP Screenshot](pwsp-gui/assets/screenshot.png)
[🇷🇺 Читать на русском](README.ru.md) | [🇺🇸 Read in English](README.md)
[![GitHub Actions Build Status](https://img.shields.io/github/actions/workflow/status/arabianq/pipewire-soundpad/build.yml?branch=main&style=flat-square)](https://github.com/arabianq/pipewire-soundpad/actions)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT)
[![GitHub Release](https://img.shields.io/github/v/release/arabianq/pipewire-soundpad?style=flat-square)](https://github.com/arabianq/pipewire-soundpad/releases/latest)
[![Platform](https://img.shields.io/badge/Platform-Linux%20%7C%20PipeWire-blue?style=flat-square)](https://pipewire.org/)
**PipeWire Soundpad (PWSP)** — это современное приложение с низкой задержкой, которое позволяет воспроизводить аудиофайлы прямо в ваш микрофон. Разработано специально для Linux с использованием мощи PipeWire для достижения нативной интеграции без использования мостов Pulseaudio или сложных виртуальных устройств.
---
## ✨ Возможности
- **Нативная интеграция с PipeWire:** Прямое взаимодействие с PipeWire API для минимальной задержки.
- **Модульная архитектура:** Состоит из фонового демона (`daemon`), интерфейса командной строки (`cli`) и графического интерфейса (`gui`).
- **Современный GUI:** Построен на `egui`, плавно работает как на Wayland, так и на X11.
- **Глобальные горячие клавиши:** Работают через `evdev`, позволяя воспроизводить звуки из любого окна.
- **Широкая поддержка форматов:** Использует `rodio` и `symphonia` для поддержки большинства аудиоформатов.
---
## 🚀 Установка
Мы предоставляем несколько способов установки PWSP, включая стабильные релизы и постоянно обновляемые "nightly" сборки напрямую из ветки `main`.
### 📦 Flatpak (Рекомендуется)
Добавьте наш официальный OSTree репозиторий и установите приложение:
```bash
# Добавьте репозиторий
flatpak remote-add --if-not-exists pwsp https://arabianq.github.io/pipewire-soundpad/pwsp.flatpakrepo
# Установите стабильную (Stable) версию
flatpak install pwsp ru.arabianq.pwsp//stable
# ИЛИ установите Nightly версию (самые свежие обновления)
flatpak install pwsp ru.arabianq.pwsp//nightly
```
### 🟠 Debian / Ubuntu (APT Репозиторий)
Мы поддерживаем официальный APT-репозиторий для бесшовных обновлений через `apt`:
```bash
# 1. Скачайте публичный GPG ключ
wget -O- https://arabianq.github.io/pipewire-soundpad/apt/pubkey.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/pwsp.gpg
# 2. Добавьте репозиторий (Выберите STABLE или NIGHTLY)
# Для Stable:
echo "deb [signed-by=/etc/apt/keyrings/pwsp.gpg] https://arabianq.github.io/pipewire-soundpad/apt/ stable main" | sudo tee /etc/apt/sources.list.d/pwsp.list
# Для Nightly:
# echo "deb [signed-by=/etc/apt/keyrings/pwsp.gpg] https://arabianq.github.io/pipewire-soundpad/apt/ nightly main" | sudo tee /etc/apt/sources.list.d/pwsp.list
# 3. Обновите индексы и установите
sudo apt update
sudo apt install pwsp
```
### 🐧 Fedora / RHEL (COPR)
Доступно через репозиторий Fedora COPR:
```bash
sudo dnf copr enable arabianq/pwsp
sudo dnf install pwsp
```
### ⚙️ Ручная установка
Вы можете вручную скачать пакеты `.deb` или готовые бинарники `.zip` на [странице релизов](https://github.com/arabianq/pipewire-soundpad/releases).
### 🦀 Сборка из исходников
Убедитесь, что у вас установлены Rust, Cargo и необходимые зависимости (`libpipewire-0.3-dev`, `libclang-dev`, `libasound2-dev`, `libdbus-1-dev`).
```bash
git clone https://github.com/arabianq/pipewire-soundpad.git
cd pipewire-soundpad
cargo build --release --locked
```
Собранные бинарники будут находиться в папке `target/release/`.
---
## 🎮 Использование
### 1. Запуск демона
PWSP работает через фоновый демон, который маршрутизирует аудио.
```bash
# Запуск демона
pwsp-daemon
```
_(Подсказка: Если вы установили программу через пакетный менеджер, она включает пользовательский systemd-сервис. Вы можете включить его командой: `systemctl --user enable --now pwsp-daemon.service`)_
### 2. Запуск GUI
Просто запустите графический интерфейс для управления и воспроизведения звуков:
```bash
pwsp-gui
```
### 3. Использование CLI
Вы также можете взаимодействовать с демоном напрямую через командную строку:
```bash
pwsp-cli play /path/to/sound.mp3
pwsp-cli stop
pwsp-cli status
```
---
## 📚 Документация и DeepWiki
Для детальной настройки, решения проблем, описания архитектуры и кастомных конфигураций, пожалуйста, посетите нашу официальную Wiki:
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/arabianq/pipewire-soundpad)
---
## 🤝 Вклад в проект (Contributing)
Будем рады вашей помощи, баг-репортам и идеям!
1. Сделайте Fork проекта.
2. Создайте свою ветку (`git checkout -b feat/amazing-feature`).
3. Закоммитьте изменения (`git commit -m 'Add some amazing feature'`).
4. Запушьте ветку (`git push origin feat/amazing-feature`).
5. Откройте Pull Request.
---
## 📝 Лицензия
Распространяется под лицензией MIT. Подробнее см. в файле `LICENSE`.
_Сделано с ❤️ для сообщества Linux._
+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