Compare commits

..
10 Commits
Author SHA1 Message Date
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
347 changed files with 285 additions and 23630 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
-5802
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.15.0"
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/RustAudio/rodio.git", rev = "c5f1e94290922fe4ee963ce6f85754ea6ba36243", 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.
-219
View File
@@ -1,219 +0,0 @@
# PipeWire Soundpad (PWSP) 🎵
<table border="0">
<tr>
<td colspan="2" align="center">
<h3>Main Screen</h3>
<img src="./pwsp-gui/assets/screenshots/main.png" alt="Main UI">
</td>
</tr>
<tr>
<td width="50%" align="center">
<h3>Settings</h3>
<img src="./pwsp-gui/assets/screenshots/settings.png" alt="Settings">
</td>
<td width="50%" align="center">
<h3>Hotkeys</h3>
<img src="./pwsp-gui/assets/screenshots/hotkeys.png" alt="Hotkeys">
</td>
</tr>
</table>
[🇷🇺 Читать на русском](README.ru.md) | 🇬🇧 English (you are here)
[![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 application that lets you play audio files directly through your microphone. Designed specifically for Linux, it talks to PipeWire natively: it creates its own virtual microphone and wires everything up itself, so you never have to build a routing setup by hand.
---
## ✨ Features
- **Native PipeWire Integration:** PWSP creates its own virtual microphone and manages the graph through the PipeWire API — no manual `pw-link` juggling, no PulseAudio modules to load.
- **Separate Monitoring and Microphone Volumes:** Two independent streams, so you can amplify what your friends hear without deafening yourself, and pick which device the monitoring plays on.
- **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.
- **Localized:** Ships in 9 languages, following your system locale or one you pick yourself in the settings.
- **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, including Opus.
---
## 🚀 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
sudo mkdir -p /etc/apt/keyrings
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
```
### 🐦 Arch Linux (AUR)
Two packages are available: `pwsp` builds from source, `pwsp-bin` installs the prebuilt binaries.
```bash
# Using your preferred AUR helper
paru -S pwsp # or: pwsp-bin
```
### ⚙️ 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 and Cargo installed, along with the build dependencies. On Debian/Ubuntu:
```bash
sudo apt install libpipewire-0.3-dev libclang-dev libasound2-dev libdbus-1-dev libssl-dev pkg-config
```
```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. Every command is grouped under `action`, `get` or `set`:
```bash
pwsp-cli action play /path/to/sound.mp3
pwsp-cli action stop
pwsp-cli get state
# Separate volumes for what you hear and what is sent to the microphone.
# Values above 1.0 amplify.
pwsp-cli set monitoring-volume 0.3
pwsp-cli set mic-volume 1.5
# Devices
pwsp-cli get inputs
pwsp-cli set input <name>
```
Run `pwsp-cli <group> --help` for the full list.
### 🔑 Enabling Global Hotkeys
Hotkeys are read straight from the kernel via `evdev`, which means the daemon needs access to `/dev/input/event*`. On most distributions that means adding yourself to the `input` group:
```bash
sudo usermod -aG input $USER
```
Log out and back in for it to take effect. Without this, everything else works — only the global hotkeys stay silent.
### 📦 A Note for Flatpak Users
The Flatpak ships a single entry point, so the commands above are reached through `flatpak run`:
```bash
# No arguments: starts the daemon and the GUI together
flatpak run ru.arabianq.pwsp
# The daemon on its own
flatpak run ru.arabianq.pwsp daemon --start
flatpak run ru.arabianq.pwsp daemon --kill
# Anything after "cli" is passed to pwsp-cli
flatpak run ru.arabianq.pwsp cli action play /path/to/sound.mp3
```
---
## 📚 Documentation & DeepWiki
DeepWiki generates a browsable overview of the architecture from the source, and lets you ask questions about it. It is generated automatically rather than written by hand, so treat it as a map, not as a specification:
[![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._
-219
View File
@@ -1,219 +0,0 @@
# PipeWire Soundpad (PWSP) 🎵
<table border="0">
<tr>
<td colspan="2" align="center">
<h3>Главная страница</h3>
<img src="./pwsp-gui/assets/screenshots/main.png" alt="Main UI">
</td>
</tr>
<tr>
<td width="50%" align="center">
<h3>Настройки</h3>
<img src="./pwsp-gui/assets/screenshots/settings.png" alt="Settings">
</td>
<td width="50%" align="center">
<h3>Горячие клавиши</h3>
<img src="./pwsp-gui/assets/screenshots/hotkeys.png" alt="Hotkeys">
</td>
</tr>
</table>
🇷🇺 Русский (вы здесь) | [🇬🇧 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 напрямую: создаёт собственный виртуальный микрофон и само выстраивает маршрутизацию, так что настраивать её руками не придётся.
---
## ✨ Возможности
- **Нативная интеграция с PipeWire:** PWSP создаёт собственный виртуальный микрофон и управляет графом через PipeWire API — без ручного `pw-link` и без подгрузки модулей PulseAudio.
- **Раздельная громкость мониторинга и микрофона:** Два независимых потока: можно усилить то, что слышат собеседники, не оглушив себя, и выбрать устройство для мониторинга.
- **Модульная архитектура:** Состоит из фонового демона (`daemon`), интерфейса командной строки (`cli`) и графического интерфейса (`gui`).
- **Современный GUI:** Построен на `egui`, плавно работает как на Wayland, так и на X11.
- **Локализация:** 9 языков; используется системный или выбранный вручную в настройках.
- **Глобальные горячие клавиши:** Работают через `evdev`, позволяя воспроизводить звуки из любого окна.
- **Широкая поддержка форматов:** Использует `rodio` и `symphonia` и поддерживает большинство аудиоформатов, включая Opus.
---
## 🚀 Установка
Мы предоставляем несколько способов установки 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 ключ
sudo mkdir -p /etc/apt/keyrings
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
```
### 🐦 Arch Linux (AUR)
Доступны два пакета: `pwsp` собирается из исходников, `pwsp-bin` ставит готовые бинарники.
```bash
# Через любой удобный AUR-хелпер
paru -S pwsp # или: pwsp-bin
```
### ⚙️ Ручная установка
Вы можете вручную скачать пакеты `.deb` или готовые бинарники `.zip` на [странице релизов](https://github.com/arabianq/pipewire-soundpad/releases).
### 🦀 Сборка из исходников
Убедитесь, что у вас установлены Rust и Cargo, а также зависимости для сборки. Для Debian/Ubuntu:
```bash
sudo apt install libpipewire-0.3-dev libclang-dev libasound2-dev libdbus-1-dev libssl-dev pkg-config
```
```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
Вы также можете взаимодействовать с демоном напрямую через командную строку. Все команды сгруппированы в `action`, `get` и `set`:
```bash
pwsp-cli action play /path/to/sound.mp3
pwsp-cli action stop
pwsp-cli get state
# Раздельная громкость: что слышите вы и что уходит в микрофон.
# Значения выше 1.0 усиливают.
pwsp-cli set monitoring-volume 0.3
pwsp-cli set mic-volume 1.5
# Устройства
pwsp-cli get inputs
pwsp-cli set input <имя>
```
Полный список — `pwsp-cli <группа> --help`.
### 🔑 Включение глобальных горячих клавиш
Горячие клавиши читаются напрямую из ядра через `evdev`, поэтому демону нужен доступ к `/dev/input/event*`. В большинстве дистрибутивов для этого достаточно добавить себя в группу `input`:
```bash
sudo usermod -aG input $USER
```
Изменение вступит в силу после перезахода в систему. Без него всё остальное работает — молчат только глобальные горячие клавиши.
### 📦 Замечание для пользователей Flatpak
У Flatpak-версии одна точка входа, поэтому команды выше вызываются через `flatpak run`:
```bash
# Без аргументов: запускает демон и GUI вместе
flatpak run ru.arabianq.pwsp
# Отдельно демон
flatpak run ru.arabianq.pwsp daemon --start
flatpak run ru.arabianq.pwsp daemon --kill
# Всё после "cli" передаётся в pwsp-cli
flatpak run ru.arabianq.pwsp cli action play /path/to/sound.mp3
```
---
## 📚 Документация и DeepWiki
DeepWiki автоматически строит по исходникам обзор архитектуры и позволяет задавать по нему вопросы. Он генерируется, а не пишется руками, поэтому воспринимайте его как карту, а не как спецификацию:
[![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: Sun, 05 Jul 2026 19:24:44 UTC
Architectures: amd64 arm64
Components: main
Description: Nightly APT Repository for PWSP
MD5Sum:
6bfd4df9927c7a13866166ff4f059879 650 main/binary-amd64/Packages
98a259db26140cac74adf193e732aa8d 450 main/binary-amd64/Packages.gz
facbb80485897bc6e0d67e37e5dd38e8 123 main/binary-amd64/Release
dfb46875d0fdcee69095ba17ec62b160 677 main/binary-arm64/Packages
895e04b52ec03790ea50c97dce503e27 461 main/binary-arm64/Packages.gz
7418f9ee7493009aeaa4417f5d11ee62 123 main/binary-arm64/Release
SHA1:
aa7a821fb465f122b96d21b8a9dc83f2fec35f16 650 main/binary-amd64/Packages
fbc780a24199aa51b73e2359c4859aa2fdecdecd 450 main/binary-amd64/Packages.gz
66d8024fbaf66bb3aa03e04c8784ffc2d45d5e92 123 main/binary-amd64/Release
ba50298a40d65896b36b3d7cc9e6eb08c6cae5fb 677 main/binary-arm64/Packages
06caee3b4c4f73b4fb3b377ebf62a662eaf89b0b 461 main/binary-arm64/Packages.gz
f7984ac62248818b3d8a2c59250042d426414d8c 123 main/binary-arm64/Release
SHA256:
fb43dd1059415ba64226e31b956c6b6743d0f14175d2c085c7360d63ebc04c1e 650 main/binary-amd64/Packages
a4c2a63014f75c24a95dbea77d0500b7c78a483a95b0d56c2a9386c9a4aaf8d4 450 main/binary-amd64/Packages.gz
b5a22f248703739051a84b584c2b0ea20a9b69b28e823c5a8b0aca5f33f90bba 123 main/binary-amd64/Release
6b5a49c0cec55ecf1ff67d66e18910986e021b37dd14e2d9ca96d42ec2b840e9 677 main/binary-arm64/Packages
6299f973fc9132a19382b350cd540f452e5e54f6456cc8b86b6b338b55ac9c03 461 main/binary-arm64/Packages.gz
a5e6d2298cf4bded7fd380a4bb06d97be39e9ea1a0b42acd5190a44aad619c92 123 main/binary-arm64/Release
-----BEGIN PGP SIGNATURE-----
iHUEARYKAB0WIQSq48VrHi02dxCM8oCDybDbLI+dFgUCakqvfQAKCRCDybDbLI+d
FoSWAPwPk1YGSdEA2ID7/82YbTpHuMaazDmJq7ZXBvKOhQsL5QD/TjVlBYt0gd9H
8tLxJMDS5gzhwdMavAc2TIygQ5T/tA8=
=e+sa
-----END PGP SIGNATURE-----
+28
View File
@@ -0,0 +1,28 @@
Origin: arabianq
Label: PipeWire Soundpad
Codename: nightly
Date: Sun, 05 Jul 2026 19:24:44 UTC
Architectures: amd64 arm64
Components: main
Description: Nightly APT Repository for PWSP
MD5Sum:
6bfd4df9927c7a13866166ff4f059879 650 main/binary-amd64/Packages
98a259db26140cac74adf193e732aa8d 450 main/binary-amd64/Packages.gz
facbb80485897bc6e0d67e37e5dd38e8 123 main/binary-amd64/Release
dfb46875d0fdcee69095ba17ec62b160 677 main/binary-arm64/Packages
895e04b52ec03790ea50c97dce503e27 461 main/binary-arm64/Packages.gz
7418f9ee7493009aeaa4417f5d11ee62 123 main/binary-arm64/Release
SHA1:
aa7a821fb465f122b96d21b8a9dc83f2fec35f16 650 main/binary-amd64/Packages
fbc780a24199aa51b73e2359c4859aa2fdecdecd 450 main/binary-amd64/Packages.gz
66d8024fbaf66bb3aa03e04c8784ffc2d45d5e92 123 main/binary-amd64/Release
ba50298a40d65896b36b3d7cc9e6eb08c6cae5fb 677 main/binary-arm64/Packages
06caee3b4c4f73b4fb3b377ebf62a662eaf89b0b 461 main/binary-arm64/Packages.gz
f7984ac62248818b3d8a2c59250042d426414d8c 123 main/binary-arm64/Release
SHA256:
fb43dd1059415ba64226e31b956c6b6743d0f14175d2c085c7360d63ebc04c1e 650 main/binary-amd64/Packages
a4c2a63014f75c24a95dbea77d0500b7c78a483a95b0d56c2a9386c9a4aaf8d4 450 main/binary-amd64/Packages.gz
b5a22f248703739051a84b584c2b0ea20a9b69b28e823c5a8b0aca5f33f90bba 123 main/binary-amd64/Release
6b5a49c0cec55ecf1ff67d66e18910986e021b37dd14e2d9ca96d42ec2b840e9 677 main/binary-arm64/Packages
6299f973fc9132a19382b350cd540f452e5e54f6456cc8b86b6b338b55ac9c03 461 main/binary-arm64/Packages.gz
a5e6d2298cf4bded7fd380a4bb06d97be39e9ea1a0b42acd5190a44aad619c92 123 main/binary-arm64/Release
+7
View File
@@ -0,0 +1,7 @@
-----BEGIN PGP SIGNATURE-----
iHUEABYKAB0WIQSq48VrHi02dxCM8oCDybDbLI+dFgUCakqvfAAKCRCDybDbLI+d
Fo9jAP4/71ld5H4YAOr2w4rWlAcqto2truao6TYmyXFwz8CZAwEA8394vMQeM4WS
ycHkUTKD6layzdu3o4a0tzk6nJNoPAk=
=O6oF
-----END PGP SIGNATURE-----
@@ -0,0 +1,17 @@
Package: pwsp
Version: 1.12.3+git20260705.c2f4658
Architecture: amd64
Homepage: https://pwsp.arabianq.ru
Maintainer: arabian
Installed-Size: 37178
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.12.3+git20260705.c2f4658_amd64.deb
Size: 8787644
SHA256: 1780724e53845b2cfd5c886e99b5b70591c731a8688672f21d6a2bf08a1481b9
SHA1: 6d6e59c86e757e74cf267d87b4658eb34cf65f85
MD5sum: c66acffe4656d4d53406918642b6e918
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.12.3+git20260705.c2f4658
Architecture: arm64
Homepage: https://pwsp.arabianq.ru
Maintainer: arabian
Installed-Size: 35078
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.12.3+git20260705.c2f4658_arm64.deb
Size: 7870840
SHA256: cb93ea739a37544dbb4c9ce9aef7b5c6d76ab97014041f91982e11c837747ec1
SHA1: e58c766a2137f36977d6451e089aba9d78ece5f5
MD5sum: 69e54a4f5fce511320868ac0a4cb922c
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: Sun, 05 Jul 2026 18:53:39 UTC
Architectures: amd64 arm64
Components: main
Description: APT Repository for PWSP
MD5Sum:
1a66bb3fa7022471fcbddb76e805086a 614 main/binary-amd64/Packages
334ed3b3f3cedc6406545417abf9d13b 438 main/binary-amd64/Packages.gz
f82d685802fbb32fec3c9ba8e11e55b9 115 main/binary-amd64/Release
8a7bbcc3dd27ac9151a2329731acb54f 614 main/binary-arm64/Packages
0b91db8e02e57c584ffaee7a5cb560d5 437 main/binary-arm64/Packages.gz
113dd4f621500874592b2a2f1eeb45ae 115 main/binary-arm64/Release
SHA1:
2510f93cca3c207a0e1ce9142fdc35c303d1fea5 614 main/binary-amd64/Packages
99b4d466b68b8a21b9757d2953a3e9c93175c025 438 main/binary-amd64/Packages.gz
1ff55a261c49c41f38e6da56f1f5d7136d38b08f 115 main/binary-amd64/Release
3e86a48a2167361dd41ef54ff464828e26a2bb20 614 main/binary-arm64/Packages
b4ed128eaa1f980b97bbb6db6ae9be6b4bbcfe3e 437 main/binary-arm64/Packages.gz
be63fa980d70857efdc424c837cd54ab986a40cd 115 main/binary-arm64/Release
SHA256:
3a49a9daf84bdd622f5812dcb403d419941a2393721a20e746d957399994a3b3 614 main/binary-amd64/Packages
4a0f5dfba6fec89ae6d23499d2a9fe3dc3c3a4c9512c44ba0fc526f580f5e915 438 main/binary-amd64/Packages.gz
c670ad086ec5b85d17211cb15e8e4ac1fb49a6398d0c9672992c26a009229d8c 115 main/binary-amd64/Release
19ff13f0f7fc035f7d3b904695f0b05fe1139ee4465a61c09d4acc224e91dade 614 main/binary-arm64/Packages
b6f7241e29bd7d18844e3fd9c324f709721dde8d27432804a209c3de9e78ad29 437 main/binary-arm64/Packages.gz
4a90ce2395fbe57635b23de83540564c0917b2f419cd69ab2630fc1520bb5c11 115 main/binary-arm64/Release
-----BEGIN PGP SIGNATURE-----
iHUEARYKAB0WIQSq48VrHi02dxCM8oCDybDbLI+dFgUCakqoMwAKCRCDybDbLI+d
Fv+FAQD9xZPM77UZrI/Ze6wCt7tYtpD3btLVJQIcRWuVQhtemQD/fkNVdZ9DBgFw
mLZH/E2xC5bm9a5626UnQYrizapD9gQ=
=3Gpf
-----END PGP SIGNATURE-----
+28
View File
@@ -0,0 +1,28 @@
Origin: arabianq
Label: PipeWire Soundpad
Codename: stable
Date: Sun, 05 Jul 2026 18:53:39 UTC
Architectures: amd64 arm64
Components: main
Description: APT Repository for PWSP
MD5Sum:
1a66bb3fa7022471fcbddb76e805086a 614 main/binary-amd64/Packages
334ed3b3f3cedc6406545417abf9d13b 438 main/binary-amd64/Packages.gz
f82d685802fbb32fec3c9ba8e11e55b9 115 main/binary-amd64/Release
8a7bbcc3dd27ac9151a2329731acb54f 614 main/binary-arm64/Packages
0b91db8e02e57c584ffaee7a5cb560d5 437 main/binary-arm64/Packages.gz
113dd4f621500874592b2a2f1eeb45ae 115 main/binary-arm64/Release
SHA1:
2510f93cca3c207a0e1ce9142fdc35c303d1fea5 614 main/binary-amd64/Packages
99b4d466b68b8a21b9757d2953a3e9c93175c025 438 main/binary-amd64/Packages.gz
1ff55a261c49c41f38e6da56f1f5d7136d38b08f 115 main/binary-amd64/Release
3e86a48a2167361dd41ef54ff464828e26a2bb20 614 main/binary-arm64/Packages
b4ed128eaa1f980b97bbb6db6ae9be6b4bbcfe3e 437 main/binary-arm64/Packages.gz
be63fa980d70857efdc424c837cd54ab986a40cd 115 main/binary-arm64/Release
SHA256:
3a49a9daf84bdd622f5812dcb403d419941a2393721a20e746d957399994a3b3 614 main/binary-amd64/Packages
4a0f5dfba6fec89ae6d23499d2a9fe3dc3c3a4c9512c44ba0fc526f580f5e915 438 main/binary-amd64/Packages.gz
c670ad086ec5b85d17211cb15e8e4ac1fb49a6398d0c9672992c26a009229d8c 115 main/binary-amd64/Release
19ff13f0f7fc035f7d3b904695f0b05fe1139ee4465a61c09d4acc224e91dade 614 main/binary-arm64/Packages
b6f7241e29bd7d18844e3fd9c324f709721dde8d27432804a209c3de9e78ad29 437 main/binary-arm64/Packages.gz
4a90ce2395fbe57635b23de83540564c0917b2f419cd69ab2630fc1520bb5c11 115 main/binary-arm64/Release
+7
View File
@@ -0,0 +1,7 @@
-----BEGIN PGP SIGNATURE-----
iHUEABYKAB0WIQSq48VrHi02dxCM8oCDybDbLI+dFgUCakqoMwAKCRCDybDbLI+d
Fn2+AP917sKN36Oawrfs0o+aNBfplXPbLukgibfadL1l7nS3QwEA5b9DV9KLzrqm
MkoQGgWYNExawNh5HDC3bQXuHkRHjgM=
=X+y2
-----END PGP SIGNATURE-----
@@ -0,0 +1,17 @@
Package: pwsp
Version: 1.12.3-1
Architecture: amd64
Homepage: https://pwsp.arabianq.ru
Maintainer: arabian
Installed-Size: 14049
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.12.3-1_amd64.deb
Size: 4473344
SHA256: 2168446169fe7f3fe8b20559e216ac1a9f675d483989f28157777f5da0263df7
SHA1: d8731cabf365e2e6f15fc20490b5cd83101c7232
MD5sum: c2410a797ec25cc455798fe15bd3e0d6
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.12.3-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.12.3-1_arm64.deb
Size: 3963168
SHA256: 3767bb8bcdf2186dad6dc4f62c0e17aa70025161359e04e86e5b0b1e6ed93125
SHA1: 3952a63c85c98d859726e3c16378ac63ce7de25d
MD5sum: 5ad8ae5a66f3d754d0f44171a3ab67d3
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.
+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-----
+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