mirror of
https://github.com/arabianq/pipewire-soundpad.git
synced 2026-09-21 14:27:51 +00:00
Compare commits
479
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c75e073774 | ||
|
|
464baa20ce | ||
|
|
051e81d9f7 | ||
|
|
8854c401a9 | ||
|
|
c9f30e09d7 | ||
|
|
0d0b5f9f29 | ||
|
|
425c1df61e | ||
|
|
2073a410e8 | ||
|
|
cfa31200d4 | ||
|
|
389640ee0a | ||
|
|
7b87dc02dd | ||
|
|
785b835237 | ||
|
|
1616d80ee9 | ||
|
|
d97d4c60d2 | ||
|
|
0c3d7cbd35 | ||
|
|
6d7abdbf53 | ||
|
|
41bb035b2c | ||
|
|
3873bf4270 | ||
|
|
2b60b47cce | ||
|
|
65ae8589db | ||
|
|
a33d023950 | ||
|
|
5c73bc1bea | ||
|
|
42e305869a | ||
|
|
cb7f4f7f6b | ||
|
|
62821904af | ||
|
|
3a218283db | ||
|
|
02fdfb6ca8 | ||
|
|
a027838d0e | ||
|
|
1828d903a1 | ||
|
|
83ca7a5e34 | ||
|
|
f2aca5e34a | ||
|
|
6130a99c4b | ||
|
|
322b93efa1 | ||
|
|
683f4127a0 | ||
|
|
c873166e21 | ||
|
|
ec4e873071 | ||
|
|
a91252d7fb | ||
|
|
239170df45 | ||
|
|
5fef42a2e2 | ||
|
|
4f8f663f12 | ||
|
|
6ccc55a1d0 | ||
|
|
d266a3f073 | ||
|
|
d2993592be | ||
|
|
1a53ab62dc | ||
|
|
51fcd94a61 | ||
|
|
7f6a122816 | ||
|
|
7ca01ed8cb | ||
|
|
07321afb60 | ||
|
|
8534e516ad | ||
|
|
16ce233f79 | ||
|
|
c2f4658871 | ||
|
|
701bdebc88 | ||
|
|
d4ae78c7b0 | ||
|
|
9e1d50e30c | ||
|
|
85b6c17bd1 | ||
|
|
cfe478b02d | ||
|
|
0b23b3ed51 | ||
|
|
728d14006c | ||
|
|
f8bb84bbcf | ||
|
|
0dbcc771f5 | ||
|
|
b3a786a76c | ||
|
|
972e303bff | ||
|
|
c406704ce5 | ||
|
|
fd4a35e0e1 | ||
|
|
c793d09006 | ||
|
|
e4dd6d8b56 | ||
|
|
457416779a | ||
|
|
b0ac5490cc | ||
|
|
a728671b01 | ||
|
|
08153e4a1c | ||
|
|
c4699002fd | ||
|
|
dbcbf36df0 | ||
|
|
873ed9a6db | ||
|
|
601a5ce336 | ||
|
|
62a851714e | ||
|
|
cc152de59f | ||
|
|
501ff9bd64 | ||
|
|
f83e18b800 | ||
|
|
ba920473c7 | ||
|
|
dfb5985e4a | ||
|
|
52dc0e3a09 | ||
|
|
4ce16d5301 | ||
|
|
48cda995ee | ||
|
|
7950f75c07 | ||
|
|
38ad8d5bc2 | ||
|
|
347dee713c | ||
|
|
e6e6293e20 | ||
|
|
a1e53aa536 | ||
|
|
bff50b99f1 | ||
|
|
09b86dc108 | ||
|
|
30070c439b | ||
|
|
44c3a5e3a7 | ||
|
|
9a0bc92222 | ||
|
|
3f85994f83 | ||
|
|
caf8ac19a1 | ||
|
|
f563680ceb | ||
|
|
78ca2ddf68 | ||
|
|
838fc1ce29 | ||
|
|
622cf39fa2 | ||
|
|
809b1a8490 | ||
|
|
d1a5275173 | ||
|
|
e67f174a59 | ||
|
|
6545431ac2 | ||
|
|
026ef97a72 | ||
|
|
9f833cc30b | ||
|
|
410a2c7959 | ||
|
|
c173e602ad | ||
|
|
3576c634fd | ||
|
|
5747f39ace | ||
|
|
c501033834 | ||
|
|
c0a27e0c3b | ||
|
|
3c2882ef1f | ||
|
|
36aed3f55d | ||
|
|
c48a425bb0 | ||
|
|
9a5436cd35 | ||
|
|
2ce243e896 | ||
|
|
57fb3fd7a3 | ||
|
|
82b02bf520 | ||
|
|
3d4dbbe866 | ||
|
|
70bd3a889a | ||
|
|
a7b5bdd2a9 | ||
|
|
99fef4a167 | ||
|
|
ae08f7ddc3 | ||
|
|
0060d0bdee | ||
|
|
f91a49cb70 | ||
|
|
8d513ff65b | ||
|
|
226dfd91ff | ||
|
|
344ea60fa5 | ||
|
|
8411cb3528 | ||
|
|
ad8f22a359 | ||
|
|
4ec49d822b | ||
|
|
ec2fa2a478 | ||
|
|
e91465365d | ||
|
|
0476329798 | ||
|
|
6c59137639 | ||
|
|
3693a678ea | ||
|
|
5511d23c3e | ||
|
|
818cd8b50d | ||
|
|
6f7d631e28 | ||
|
|
18904052c7 | ||
|
|
6841d8d1c3 | ||
|
|
105be87222 | ||
|
|
0f8abbc443 | ||
|
|
54011e7ff1 | ||
|
|
dac9d53cef | ||
|
|
9da3799cd3 | ||
|
|
d66369884c | ||
|
|
5e47e7d6fb | ||
|
|
695c83c9e6 | ||
|
|
798a6d1887 | ||
|
|
bb18175a30 | ||
|
|
6ef3f8d76e | ||
|
|
bec77f59bd | ||
|
|
dad1a62798 | ||
|
|
84a4a01282 | ||
|
|
88995f6fd1 | ||
|
|
660ece9866 | ||
|
|
f2dcf2e0fe | ||
|
|
fe655be59a | ||
|
|
78960cdc10 | ||
|
|
0439cf815e | ||
|
|
5ae82ef28c | ||
|
|
5f69345d45 | ||
|
|
930857312d | ||
|
|
e884993dba | ||
|
|
05dd4319cc | ||
|
|
e320c85a6f | ||
|
|
f02bbc1e1c | ||
|
|
02f1116076 | ||
|
|
8155cceac8 | ||
|
|
d974a93c04 | ||
|
|
c6d9f2d6e7 | ||
|
|
dc1ecc81ea | ||
|
|
9b70bcd69d | ||
|
|
a07025b1f6 | ||
|
|
c1d145fbc8 | ||
|
|
3d4b59761b | ||
|
|
ca9b5dd517 | ||
|
|
6863c9a6f8 | ||
|
|
958a3efde5 | ||
|
|
30e75e924c | ||
|
|
2b4b7ea730 | ||
|
|
dafe67f35f | ||
|
|
8fa22ca5b0 | ||
|
|
d72eaabf54 | ||
|
|
377b218592 | ||
|
|
911417af40 | ||
|
|
573958c05b | ||
|
|
0bb7ef3f33 | ||
|
|
10f07cd895 | ||
|
|
b2f2894aa1 | ||
|
|
e6c8d720d5 | ||
|
|
a6d93ff528 | ||
|
|
bcf791d84c | ||
|
|
e4b0b10393 | ||
|
|
11de96db58 | ||
|
|
7396c0aef8 | ||
|
|
fc2cd5e2da | ||
|
|
1a37729cf1 | ||
|
|
86b38a250e | ||
|
|
54fa278cea | ||
|
|
db040aa820 | ||
|
|
04449e7525 | ||
|
|
9f50809a99 | ||
|
|
7dda4bc2b1 | ||
|
|
1569955e12 | ||
|
|
9adc6cfbda | ||
|
|
76b1d4f345 | ||
|
|
10f9937dc3 | ||
|
|
498c09eb50 | ||
|
|
78e0a133b6 | ||
|
|
7f8b7194b6 | ||
|
|
302f153b91 | ||
|
|
f87dcb1564 | ||
|
|
d4d16f6ce7 | ||
|
|
949307fcf8 | ||
|
|
2a8fcca06b | ||
|
|
5c4b8f4b45 | ||
|
|
70c7e3789b | ||
|
|
5367a3daae | ||
|
|
42c0170044 | ||
|
|
cb56cb3a04 | ||
|
|
5a2418325d | ||
|
|
a948ea2dcd | ||
|
|
a156df346b | ||
|
|
7a13ae55a6 | ||
|
|
b2b83f5c32 | ||
|
|
f01a0e656c | ||
|
|
6114b9a7f8 | ||
|
|
b8baeb6226 | ||
|
|
02306b5893 | ||
|
|
3add499bd7 | ||
|
|
3c2e943e18 | ||
|
|
261f83efd4 | ||
|
|
c6577cd5e0 | ||
|
|
95761f6a5a | ||
|
|
d6effc972e | ||
|
|
498d0d25af | ||
|
|
c99d0749e3 | ||
|
|
151f43f1ab | ||
|
|
077518019f | ||
|
|
968eba80e6 | ||
|
|
aa77a8d212 | ||
|
|
4b50645c93 | ||
|
|
39648f7781 | ||
|
|
c649ef5410 | ||
|
|
0dfd841e6d | ||
|
|
89ce111542 | ||
|
|
80a8b1a45f | ||
|
|
f5c7d9bb2c | ||
|
|
bcd39eb6a2 | ||
|
|
47a7674c14 | ||
|
|
d33ee0c69e | ||
|
|
624310eae5 | ||
|
|
92a576de37 | ||
|
|
ce948ce678 | ||
|
|
e72fc519a0 | ||
|
|
8126efe8d9 | ||
|
|
a7dd0b97d1 | ||
|
|
5f9aad7fa2 | ||
|
|
7e66a9241b | ||
|
|
02ad7337a1 | ||
|
|
c08898e4f2 | ||
|
|
ed8b04caa9 | ||
|
|
58e5f039be | ||
|
|
eb89733715 | ||
|
|
476fd325ef | ||
|
|
da49c96e53 | ||
|
|
f0e05379f7 | ||
|
|
3d3523fd7a | ||
|
|
81da36f03c | ||
|
|
8bfa5daf78 | ||
|
|
b816d2aa88 | ||
|
|
23ae562849 | ||
|
|
e3bc1fd55f | ||
|
|
15964f205b | ||
|
|
6a0ac61033 | ||
|
|
4b802273f4 | ||
|
|
baae7a1ccf | ||
|
|
654694cecf | ||
|
|
04ecf66beb | ||
|
|
0fe94f9112 | ||
|
|
9fbe42c201 | ||
|
|
fac04c4533 | ||
|
|
f93852bf8e | ||
|
|
1bb0aa959a | ||
|
|
7a1723fbcb | ||
|
|
712a0968a7 | ||
|
|
e98e6bc2f3 | ||
|
|
5007b483aa | ||
|
|
b936b58e75 | ||
|
|
502ef2ed89 | ||
|
|
ce5910b9a6 | ||
|
|
b0c670235e | ||
|
|
f1d4ffd7fa | ||
|
|
6f35ab7b8b | ||
|
|
9a67f5479a | ||
|
|
b727eba988 | ||
|
|
330c3d79d4 | ||
|
|
dff20daace | ||
|
|
cdc44328a8 | ||
|
|
ac61a71dcb | ||
|
|
71c800c396 | ||
|
|
577a6d279b | ||
|
|
49e01f0318 | ||
|
|
5ea9b3b0ba | ||
|
|
ca85d4c369 | ||
|
|
4499b1d3aa | ||
|
|
d385e5356e | ||
|
|
b4a0dc6a83 | ||
|
|
2e570b3bb0 | ||
|
|
ee4554286e | ||
|
|
2c6f0d932e | ||
|
|
4e7606fdc6 | ||
|
|
03df631690 | ||
|
|
6df826f210 | ||
|
|
cdf306cfe9 | ||
|
|
74a436b171 | ||
|
|
2f33c48bcc | ||
|
|
1f48dad71c | ||
|
|
8066f6d96b | ||
|
|
5c3bc30a6e | ||
|
|
90ed05d88d | ||
|
|
f59050ef04 | ||
|
|
bae10edc99 | ||
|
|
cfa2681ba3 | ||
|
|
03e936ac34 | ||
|
|
f7f96abcbb | ||
|
|
4d54443593 | ||
|
|
5afe3dd45b | ||
|
|
bd75ac6190 | ||
|
|
3e6a8b6e79 | ||
|
|
c1c8deb1b3 | ||
|
|
dc61342af8 | ||
|
|
fded7f7b3f | ||
|
|
ec83680333 | ||
|
|
16e94e71d3 | ||
|
|
56040934e9 | ||
|
|
89975cb124 | ||
|
|
03e20ffa7e | ||
|
|
8f7ea09ef5 | ||
|
|
c639721f2a | ||
|
|
84512efda8 | ||
|
|
6cf4a9744d | ||
|
|
d9ced4e650 | ||
|
|
c1f3f34169 | ||
|
|
6c06da7b0d | ||
|
|
023caa4616 | ||
|
|
fc593f8a8e | ||
|
|
f281ad5a78 | ||
|
|
fe8fec4ea7 | ||
|
|
7583e72687 | ||
|
|
e4b4a3d198 | ||
|
|
a7af1caace | ||
|
|
c5086189d6 | ||
|
|
ac667f1273 | ||
|
|
fdb79e609f | ||
|
|
531a49dbdf | ||
|
|
2a13c25230 | ||
|
|
408f5317c4 | ||
|
|
3672d6f43e | ||
|
|
cc3bec0746 | ||
|
|
180a69bd40 | ||
|
|
6de51bc11c | ||
|
|
bc9f086245 | ||
|
|
f84cc03a6c | ||
|
|
96dda1d8a9 | ||
|
|
87b791ee3a | ||
|
|
ae5da6d9bd | ||
|
|
546b6fd13f | ||
|
|
e8d1947f18 | ||
|
|
9e55cb5f8b | ||
|
|
7f57175519 | ||
|
|
b21b32f746 | ||
|
|
3827d54ba8 | ||
|
|
9801b0cdf5 | ||
|
|
154f33b15b | ||
|
|
fa217c3b25 | ||
|
|
1fb8daf389 | ||
|
|
f2213d1def | ||
|
|
6997a6fa71 | ||
|
|
e1ae768f26 | ||
|
|
57c4461952 | ||
|
|
5c46ff4a1e | ||
|
|
9112102c16 | ||
|
|
9d1eb8bee9 | ||
|
|
39fe8a59c7 | ||
|
|
5870f7d440 | ||
|
|
4a060e4669 | ||
|
|
3981833a3b | ||
|
|
1ea84dbb28 | ||
|
|
195aa56ceb | ||
|
|
b205800a66 | ||
|
|
5e538db201 | ||
|
|
0bcd23195f | ||
|
|
ca0196f927 | ||
|
|
874c8063aa | ||
|
|
d877f79d5c | ||
|
|
3cfd2cb9bd | ||
|
|
bf1f8410c1 | ||
|
|
ad7c63617b | ||
|
|
00b25dde9d | ||
|
|
e3118a4b89 | ||
|
|
23f5ee0d22 | ||
|
|
5c4df232d5 | ||
|
|
7f0e6f7996 | ||
|
|
ab60e6b0ab | ||
|
|
3b3c5c32f9 | ||
|
|
74b76dd61d | ||
|
|
3b3db608e8 | ||
|
|
b1a24cb50e | ||
|
|
1855a8b72c | ||
|
|
42ab513ad9 | ||
|
|
ba04546b17 | ||
|
|
6feec98b4c | ||
|
|
43e1c60baa | ||
|
|
2f5fc04244 | ||
|
|
aa45a49c3a | ||
|
|
dd8ff8b1bf | ||
|
|
25667ce0f0 | ||
|
|
ccf48e6426 | ||
|
|
da79be0d22 | ||
|
|
01afb01198 | ||
|
|
37723ddc30 | ||
|
|
b672d9bd10 | ||
|
|
fa8a7b7590 | ||
|
|
d3c8706c33 | ||
|
|
071e805457 | ||
|
|
4f30f5047e | ||
|
|
e173a27c6e | ||
|
|
5891cc071e | ||
|
|
b02acb44fb | ||
|
|
c4a01a9f72 | ||
|
|
be5a619b89 | ||
|
|
00a3aa4ca4 | ||
|
|
dee908a347 | ||
|
|
4f8681a8c6 | ||
|
|
675f29f51f | ||
|
|
2efe16376c | ||
|
|
607e30da7c | ||
|
|
d6f96f3035 | ||
|
|
81cea863e4 | ||
|
|
ac721d0c4d | ||
|
|
06f12cd740 | ||
|
|
dda87f3222 | ||
|
|
8b1c4773c3 | ||
|
|
9b71c105fc | ||
|
|
82d603cbab | ||
|
|
e6d0e6e128 | ||
|
|
4c62d9f1e7 | ||
|
|
c40251b2a1 | ||
|
|
b7fa90d37e | ||
|
|
e3b787204d | ||
|
|
0a5d61b510 | ||
|
|
ef3cb0f48c | ||
|
|
19b5e52ba6 | ||
|
|
6b75654511 | ||
|
|
22c5ca6384 | ||
|
|
eacfaaf8f6 | ||
|
|
f3e574e8c9 | ||
|
|
cc02c6c3c0 | ||
|
|
7ec53f259e | ||
|
|
dddd4c5440 | ||
|
|
1a9836a7d9 | ||
|
|
26eec0c0ef | ||
|
|
3ba7a79010 | ||
|
|
6ab54d7ec9 | ||
|
|
af4f175e0c | ||
|
|
9907408541 | ||
|
|
b3e0d730da | ||
|
|
edfd2ba9b7 | ||
|
|
f2ce47cdcd | ||
|
|
6b10d365fc | ||
|
|
da756ccffe | ||
|
|
5e99870a71 | ||
|
|
ed5d6f63b1 | ||
|
|
89a58c27a0 | ||
|
|
529d73aa83 | ||
|
|
c98bc997c3 |
@@ -0,0 +1 @@
|
|||||||
|
custom: ['https://dalink.to/arabianq', 'https://boosty.to/arabian', 'https://sponsr.ru/notultranx/']
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
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*"
|
||||||
@@ -0,0 +1,257 @@
|
|||||||
|
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
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
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"
|
||||||
@@ -0,0 +1,186 @@
|
|||||||
|
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 }}
|
||||||
@@ -0,0 +1,272 @@
|
|||||||
|
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
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
/target
|
||||||
|
.idea
|
||||||
|
packages/aur/bin/.git
|
||||||
|
packages/aur/standart/.git
|
||||||
Generated
+5801
File diff suppressed because it is too large
Load Diff
+90
@@ -0,0 +1,90 @@
|
|||||||
|
[workspace]
|
||||||
|
members = [
|
||||||
|
"pwsp-lib",
|
||||||
|
"pwsp-daemon",
|
||||||
|
"pwsp-cli",
|
||||||
|
"pwsp-gui"
|
||||||
|
]
|
||||||
|
resolver = "2"
|
||||||
|
|
||||||
|
[workspace.package]
|
||||||
|
version = "1.16.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"
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
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.
|
||||||
@@ -0,0 +1,219 @@
|
|||||||
|
# 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)
|
||||||
|
|
||||||
|
[](https://github.com/arabianq/pipewire-soundpad/actions)
|
||||||
|
[](https://opensource.org/licenses/MIT)
|
||||||
|
[](https://github.com/arabianq/pipewire-soundpad/releases/latest)
|
||||||
|
[](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:
|
||||||
|
|
||||||
|
[](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
@@ -0,0 +1,219 @@
|
|||||||
|
# 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)
|
||||||
|
|
||||||
|
[](https://github.com/arabianq/pipewire-soundpad/actions)
|
||||||
|
[](https://opensource.org/licenses/MIT)
|
||||||
|
[](https://github.com/arabianq/pipewire-soundpad/releases/latest)
|
||||||
|
[](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 автоматически строит по исходникам обзор архитектуры и позволяет задавать по нему вопросы. Он генерируется, а не пишется руками, поэтому воспринимайте его как карту, а не как спецификацию:
|
||||||
|
|
||||||
|
[](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._
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
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.
@@ -1,4 +0,0 @@
|
|||||||
5.3.1
|
|
||||||
3.3.0
|
|
||||||
bdb5.3.28
|
|
||||||
bdb5.3.0
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
-----BEGIN PGP SIGNED MESSAGE-----
|
|
||||||
Hash: SHA512
|
|
||||||
|
|
||||||
Origin: arabianq
|
|
||||||
Label: PipeWire Soundpad
|
|
||||||
Codename: nightly
|
|
||||||
Date: Mon, 20 Jul 2026 18:23:18 UTC
|
|
||||||
Architectures: amd64 arm64
|
|
||||||
Components: main
|
|
||||||
Description: Nightly APT Repository for PWSP
|
|
||||||
MD5Sum:
|
|
||||||
47c6bbccfe0c256aa46776b5f73ffc11 650 main/binary-amd64/Packages
|
|
||||||
2f681f56a634aa0ebf52b8775b942b3d 451 main/binary-amd64/Packages.gz
|
|
||||||
facbb80485897bc6e0d67e37e5dd38e8 123 main/binary-amd64/Release
|
|
||||||
e18b45381b1a7cd841862d334a314786 677 main/binary-arm64/Packages
|
|
||||||
b5df4388f20e04881b93ffadd8b15e72 460 main/binary-arm64/Packages.gz
|
|
||||||
7418f9ee7493009aeaa4417f5d11ee62 123 main/binary-arm64/Release
|
|
||||||
SHA1:
|
|
||||||
16b171c187d4bd79714ce3d4676986c4ea9ff99c 650 main/binary-amd64/Packages
|
|
||||||
714ce5712ccd15e5ef3eff38820455ddf0ae157d 451 main/binary-amd64/Packages.gz
|
|
||||||
66d8024fbaf66bb3aa03e04c8784ffc2d45d5e92 123 main/binary-amd64/Release
|
|
||||||
6691a01218100436c927c661aefde4a609f408c4 677 main/binary-arm64/Packages
|
|
||||||
65f72442c939d550005038b1de27f503234c49bd 460 main/binary-arm64/Packages.gz
|
|
||||||
f7984ac62248818b3d8a2c59250042d426414d8c 123 main/binary-arm64/Release
|
|
||||||
SHA256:
|
|
||||||
061782a475b34e44e268dbadfbe0d07c1b65d00ffbe90510e20ce59f4d99f6ce 650 main/binary-amd64/Packages
|
|
||||||
1c2ac4b75ce65cc7c1ccbd1fb3f13046fb5b4e9676da0eb9e49bbd76da542bf3 451 main/binary-amd64/Packages.gz
|
|
||||||
b5a22f248703739051a84b584c2b0ea20a9b69b28e823c5a8b0aca5f33f90bba 123 main/binary-amd64/Release
|
|
||||||
5ab21e34170e9833c77d9743822613eec4a3a3d04d1e55c1638e6caf5300d37f 677 main/binary-arm64/Packages
|
|
||||||
0fb037fbe0997a3d0000d04f13aaff3867137d91eefaed166c2269e9f5e05aaf 460 main/binary-arm64/Packages.gz
|
|
||||||
a5e6d2298cf4bded7fd380a4bb06d97be39e9ea1a0b42acd5190a44aad619c92 123 main/binary-arm64/Release
|
|
||||||
-----BEGIN PGP SIGNATURE-----
|
|
||||||
|
|
||||||
iHUEARYKAB0WIQSq48VrHi02dxCM8oCDybDbLI+dFgUCal5nlwAKCRCDybDbLI+d
|
|
||||||
FofzAPwNFphDyOtMnyFZIdKvVI4FQX1bN9xdVcJDqUaXEtCi6QD+JTn+IBpZgDY/
|
|
||||||
3CXAx/tKnVOCcGBqmO2TlVAMn+IalgU=
|
|
||||||
=Qgtn
|
|
||||||
-----END PGP SIGNATURE-----
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
Origin: arabianq
|
|
||||||
Label: PipeWire Soundpad
|
|
||||||
Codename: nightly
|
|
||||||
Date: Mon, 20 Jul 2026 18:23:18 UTC
|
|
||||||
Architectures: amd64 arm64
|
|
||||||
Components: main
|
|
||||||
Description: Nightly APT Repository for PWSP
|
|
||||||
MD5Sum:
|
|
||||||
47c6bbccfe0c256aa46776b5f73ffc11 650 main/binary-amd64/Packages
|
|
||||||
2f681f56a634aa0ebf52b8775b942b3d 451 main/binary-amd64/Packages.gz
|
|
||||||
facbb80485897bc6e0d67e37e5dd38e8 123 main/binary-amd64/Release
|
|
||||||
e18b45381b1a7cd841862d334a314786 677 main/binary-arm64/Packages
|
|
||||||
b5df4388f20e04881b93ffadd8b15e72 460 main/binary-arm64/Packages.gz
|
|
||||||
7418f9ee7493009aeaa4417f5d11ee62 123 main/binary-arm64/Release
|
|
||||||
SHA1:
|
|
||||||
16b171c187d4bd79714ce3d4676986c4ea9ff99c 650 main/binary-amd64/Packages
|
|
||||||
714ce5712ccd15e5ef3eff38820455ddf0ae157d 451 main/binary-amd64/Packages.gz
|
|
||||||
66d8024fbaf66bb3aa03e04c8784ffc2d45d5e92 123 main/binary-amd64/Release
|
|
||||||
6691a01218100436c927c661aefde4a609f408c4 677 main/binary-arm64/Packages
|
|
||||||
65f72442c939d550005038b1de27f503234c49bd 460 main/binary-arm64/Packages.gz
|
|
||||||
f7984ac62248818b3d8a2c59250042d426414d8c 123 main/binary-arm64/Release
|
|
||||||
SHA256:
|
|
||||||
061782a475b34e44e268dbadfbe0d07c1b65d00ffbe90510e20ce59f4d99f6ce 650 main/binary-amd64/Packages
|
|
||||||
1c2ac4b75ce65cc7c1ccbd1fb3f13046fb5b4e9676da0eb9e49bbd76da542bf3 451 main/binary-amd64/Packages.gz
|
|
||||||
b5a22f248703739051a84b584c2b0ea20a9b69b28e823c5a8b0aca5f33f90bba 123 main/binary-amd64/Release
|
|
||||||
5ab21e34170e9833c77d9743822613eec4a3a3d04d1e55c1638e6caf5300d37f 677 main/binary-arm64/Packages
|
|
||||||
0fb037fbe0997a3d0000d04f13aaff3867137d91eefaed166c2269e9f5e05aaf 460 main/binary-arm64/Packages.gz
|
|
||||||
a5e6d2298cf4bded7fd380a4bb06d97be39e9ea1a0b42acd5190a44aad619c92 123 main/binary-arm64/Release
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
-----BEGIN PGP SIGNATURE-----
|
|
||||||
|
|
||||||
iHUEABYKAB0WIQSq48VrHi02dxCM8oCDybDbLI+dFgUCal5nlgAKCRCDybDbLI+d
|
|
||||||
FjQZAQDtt7vv9PFWjyta0qTy0BoP+o0TvFGvJEtxy/bN2NjmwgEAvN76B+MY28I0
|
|
||||||
acNkul/G9a1hhn6vfmsHDX/IvEc0rgc=
|
|
||||||
=2rvU
|
|
||||||
-----END PGP SIGNATURE-----
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
Package: pwsp
|
|
||||||
Version: 1.12.5+git20260720.42e3058
|
|
||||||
Architecture: amd64
|
|
||||||
Homepage: https://pwsp.arabianq.ru
|
|
||||||
Maintainer: arabian
|
|
||||||
Installed-Size: 39571
|
|
||||||
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.5+git20260720.42e3058_amd64.deb
|
|
||||||
Size: 8671104
|
|
||||||
SHA256: 8d1bcec10f2645299a7dece8345ef36b0f5521dda19781bde5016a28ab405af8
|
|
||||||
SHA1: 999d47e7def761f54c2cc52121cf542203973536
|
|
||||||
MD5sum: d1961b0a4fbab11a07207b5a0740b64e
|
|
||||||
Description: PWSP lets you play audio files through your microphone. Has both CLI and GUI
|
|
||||||
clients.
|
|
||||||
|
|
||||||
Binary file not shown.
@@ -1,5 +0,0 @@
|
|||||||
Component: main
|
|
||||||
Origin: arabianq
|
|
||||||
Label: PipeWire Soundpad
|
|
||||||
Architecture: amd64
|
|
||||||
Description: Nightly APT Repository for PWSP
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
Package: pwsp
|
|
||||||
Version: 1.12.5+git20260720.42e3058
|
|
||||||
Architecture: arm64
|
|
||||||
Homepage: https://pwsp.arabianq.ru
|
|
||||||
Maintainer: arabian
|
|
||||||
Installed-Size: 37270
|
|
||||||
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.5+git20260720.42e3058_arm64.deb
|
|
||||||
Size: 7706208
|
|
||||||
SHA256: df88f4c9a2d7b50fa263adde4835a8c0e6fabd28dd27b0e8bb7978c41c974b87
|
|
||||||
SHA1: 813a0a1b38910faf4d04bb9a6d419041823edda1
|
|
||||||
MD5sum: ba6bc2753389cc935dfbe0eeb103347e
|
|
||||||
Description: PWSP lets you play audio files through your microphone. Has both CLI and GUI
|
|
||||||
clients.
|
|
||||||
|
|
||||||
Binary file not shown.
@@ -1,5 +0,0 @@
|
|||||||
Component: main
|
|
||||||
Origin: arabianq
|
|
||||||
Label: PipeWire Soundpad
|
|
||||||
Architecture: arm64
|
|
||||||
Description: Nightly APT Repository for PWSP
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
-----BEGIN PGP SIGNED MESSAGE-----
|
|
||||||
Hash: SHA512
|
|
||||||
|
|
||||||
Origin: arabianq
|
|
||||||
Label: PipeWire Soundpad
|
|
||||||
Codename: stable
|
|
||||||
Date: Mon, 20 Jul 2026 18:44:52 UTC
|
|
||||||
Architectures: amd64 arm64
|
|
||||||
Components: main
|
|
||||||
Description: APT Repository for PWSP
|
|
||||||
MD5Sum:
|
|
||||||
eacd7563641b7b6f7bb846ee95e5e608 614 main/binary-amd64/Packages
|
|
||||||
5902112d5f3ab6454ef7b4fd9187b85b 440 main/binary-amd64/Packages.gz
|
|
||||||
f82d685802fbb32fec3c9ba8e11e55b9 115 main/binary-amd64/Release
|
|
||||||
2dbe62e524736a210a209549cf06258d 614 main/binary-arm64/Packages
|
|
||||||
68fe69fd6d835c41d0cd7f65c84b91cd 437 main/binary-arm64/Packages.gz
|
|
||||||
113dd4f621500874592b2a2f1eeb45ae 115 main/binary-arm64/Release
|
|
||||||
SHA1:
|
|
||||||
4cda7a7ce7ac891de03539cbbc5157cb7f6498af 614 main/binary-amd64/Packages
|
|
||||||
4c1ed3dfebd68b17395d38aa1b41358e7241d048 440 main/binary-amd64/Packages.gz
|
|
||||||
1ff55a261c49c41f38e6da56f1f5d7136d38b08f 115 main/binary-amd64/Release
|
|
||||||
656e0fecef823842592a3fc986796d16eb4bcbda 614 main/binary-arm64/Packages
|
|
||||||
cc2d6f5b302e80ecb235cd54ee5092366c896096 437 main/binary-arm64/Packages.gz
|
|
||||||
be63fa980d70857efdc424c837cd54ab986a40cd 115 main/binary-arm64/Release
|
|
||||||
SHA256:
|
|
||||||
3e179e5b3a6f64d8af0bde1783160f9e64ea16a9c8569a4765d612440835c036 614 main/binary-amd64/Packages
|
|
||||||
32fd8982acea5cf8ad51d0f052cb36f46a1355a1c1a5dcbe2c7cf385ed98589b 440 main/binary-amd64/Packages.gz
|
|
||||||
c670ad086ec5b85d17211cb15e8e4ac1fb49a6398d0c9672992c26a009229d8c 115 main/binary-amd64/Release
|
|
||||||
0a8d4c42ad644896b12a6a1dd1b1bf66cad84d7419edc5f5294efbd42a445107 614 main/binary-arm64/Packages
|
|
||||||
a55070045fd0f6833a35900e2113217fb3285a8f45dd143b659934bf95e5f3ef 437 main/binary-arm64/Packages.gz
|
|
||||||
4a90ce2395fbe57635b23de83540564c0917b2f419cd69ab2630fc1520bb5c11 115 main/binary-arm64/Release
|
|
||||||
-----BEGIN PGP SIGNATURE-----
|
|
||||||
|
|
||||||
iHUEARYKAB0WIQSq48VrHi02dxCM8oCDybDbLI+dFgUCal5spAAKCRCDybDbLI+d
|
|
||||||
FmZXAP92H8E2imCo7OfI8uIWtwsiN6/CogSpw15i7DLRwV5fDQEA3KK7zK/zkEPC
|
|
||||||
+9zsug5Du6xzZs49W3t0zNhJndt5yAg=
|
|
||||||
=Tpxj
|
|
||||||
-----END PGP SIGNATURE-----
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
Origin: arabianq
|
|
||||||
Label: PipeWire Soundpad
|
|
||||||
Codename: stable
|
|
||||||
Date: Mon, 20 Jul 2026 18:44:52 UTC
|
|
||||||
Architectures: amd64 arm64
|
|
||||||
Components: main
|
|
||||||
Description: APT Repository for PWSP
|
|
||||||
MD5Sum:
|
|
||||||
eacd7563641b7b6f7bb846ee95e5e608 614 main/binary-amd64/Packages
|
|
||||||
5902112d5f3ab6454ef7b4fd9187b85b 440 main/binary-amd64/Packages.gz
|
|
||||||
f82d685802fbb32fec3c9ba8e11e55b9 115 main/binary-amd64/Release
|
|
||||||
2dbe62e524736a210a209549cf06258d 614 main/binary-arm64/Packages
|
|
||||||
68fe69fd6d835c41d0cd7f65c84b91cd 437 main/binary-arm64/Packages.gz
|
|
||||||
113dd4f621500874592b2a2f1eeb45ae 115 main/binary-arm64/Release
|
|
||||||
SHA1:
|
|
||||||
4cda7a7ce7ac891de03539cbbc5157cb7f6498af 614 main/binary-amd64/Packages
|
|
||||||
4c1ed3dfebd68b17395d38aa1b41358e7241d048 440 main/binary-amd64/Packages.gz
|
|
||||||
1ff55a261c49c41f38e6da56f1f5d7136d38b08f 115 main/binary-amd64/Release
|
|
||||||
656e0fecef823842592a3fc986796d16eb4bcbda 614 main/binary-arm64/Packages
|
|
||||||
cc2d6f5b302e80ecb235cd54ee5092366c896096 437 main/binary-arm64/Packages.gz
|
|
||||||
be63fa980d70857efdc424c837cd54ab986a40cd 115 main/binary-arm64/Release
|
|
||||||
SHA256:
|
|
||||||
3e179e5b3a6f64d8af0bde1783160f9e64ea16a9c8569a4765d612440835c036 614 main/binary-amd64/Packages
|
|
||||||
32fd8982acea5cf8ad51d0f052cb36f46a1355a1c1a5dcbe2c7cf385ed98589b 440 main/binary-amd64/Packages.gz
|
|
||||||
c670ad086ec5b85d17211cb15e8e4ac1fb49a6398d0c9672992c26a009229d8c 115 main/binary-amd64/Release
|
|
||||||
0a8d4c42ad644896b12a6a1dd1b1bf66cad84d7419edc5f5294efbd42a445107 614 main/binary-arm64/Packages
|
|
||||||
a55070045fd0f6833a35900e2113217fb3285a8f45dd143b659934bf95e5f3ef 437 main/binary-arm64/Packages.gz
|
|
||||||
4a90ce2395fbe57635b23de83540564c0917b2f419cd69ab2630fc1520bb5c11 115 main/binary-arm64/Release
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
-----BEGIN PGP SIGNATURE-----
|
|
||||||
|
|
||||||
iHUEABYKAB0WIQSq48VrHi02dxCM8oCDybDbLI+dFgUCal5spAAKCRCDybDbLI+d
|
|
||||||
FvjhAQCc7P+2nek9+6AO76Zz3vdbblVVu+uaQ32y0zybrF+89gD+MNlZ50j+a4xk
|
|
||||||
qYRaVSb20a7K/k9WhqxJL6xRzfpuLgY=
|
|
||||||
=gJb6
|
|
||||||
-----END PGP SIGNATURE-----
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
Package: pwsp
|
|
||||||
Version: 1.12.5-1
|
|
||||||
Architecture: amd64
|
|
||||||
Homepage: https://pwsp.arabianq.ru
|
|
||||||
Maintainer: arabian
|
|
||||||
Installed-Size: 14002
|
|
||||||
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.5-1_amd64.deb
|
|
||||||
Size: 4467724
|
|
||||||
SHA256: 8b145ef5fb48bba8dddc34c1b9452e98c2c0c4a21f2b6d09d0a7f07a0847c17d
|
|
||||||
SHA1: 47db425b980d29f2e40800bb8d775eec3b071bc6
|
|
||||||
MD5sum: 2519213377967f0cd885967c3e604419
|
|
||||||
Description: PWSP lets you play audio files through your microphone. Has both CLI and GUI
|
|
||||||
clients.
|
|
||||||
|
|
||||||
Binary file not shown.
@@ -1,5 +0,0 @@
|
|||||||
Component: main
|
|
||||||
Origin: arabianq
|
|
||||||
Label: PipeWire Soundpad
|
|
||||||
Architecture: amd64
|
|
||||||
Description: APT Repository for PWSP
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
Package: pwsp
|
|
||||||
Version: 1.12.5-1
|
|
||||||
Architecture: arm64
|
|
||||||
Homepage: https://pwsp.arabianq.ru
|
|
||||||
Maintainer: arabian
|
|
||||||
Installed-Size: 11518
|
|
||||||
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.5-1_arm64.deb
|
|
||||||
Size: 3951656
|
|
||||||
SHA256: ce4e61d9233565c623ecfb02aad8c65c8d35dfe1c2d4755244696e61b83319ef
|
|
||||||
SHA1: 5ad4f9160fdbf4b44b4fed2044e797ca5522d2ea
|
|
||||||
MD5sum: 9f80c0fe862f96e3a148790d1961f624
|
|
||||||
Description: PWSP lets you play audio files through your microphone. Has both CLI and GUI
|
|
||||||
clients.
|
|
||||||
|
|
||||||
Binary file not shown.
@@ -1,5 +0,0 @@
|
|||||||
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.
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.
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.
@@ -1,13 +0,0 @@
|
|||||||
-----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-----
|
|
||||||
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.
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.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user