chore(snap): add root snapcraft.yaml

cx
This commit is contained in:
vicrodh committed 2026-02-05 04:09:00 -06:00
1 parent eb27f6df76
commit f67193fe82
1 file changed
+125
+125
View File
@@ -0,0 +1,125 @@
# QBZ Snap package configuration
# NOTE: Keep this file in sync with packaging/snap/snapcraft.yaml.
name: qbz-player
title: "QBZ — Native Qobuz Client for Linux"
version: '1.1.8'
summary: Native Qobuz player for Linux with bit-perfect audio and DAC control
description: |
QBZ is a native Linux desktop client for Qobuz™, designed for high-fidelity playback.
Unlike browser-based players or web wrappers, QBZ uses a native audio pipeline with direct ALSA and PipeWire integration, allowing bit-perfect playback, exclusive device access, and proper per-track sample-rate switching for external DACs.
Browsers are limited by system mixers and WebAudio, often resampling audio to 48 kHz. QBZ bypasses these limitations to deliver true high-resolution audio up to 24-bit / 192 kHz on Linux.
Features:
- Native Qobuz™ streaming client (not a web wrapper)
- Bit-perfect playback with ALSA exclusive mode
- DAC passthrough and per-track sample-rate switching
- Hi-Res FLAC playback
- Queue, playlists, favorites, and offline cache
- Local library integration
- Chromecast and DLNA support
- MPRIS media keys and desktop integration
- Open source (MIT license)
QBZ is built for Linux users and audiophiles who care about how audio actually reaches their hardware.
Legal:
QBZ uses the Qobuz™ API but is not affiliated with, endorsed by, or certified by Qobuz.
license: MIT
contact: https://github.com/vicrodh/qbz/discussions
website: https://qbz.lol
source-code: https://github.com/vicrodh/qbz
issues: https://github.com/vicrodh/qbz/issues
grade: stable
confinement: strict
base: core22
icon: packaging/snap/snap/gui/qbz.png
passthrough:
layout:
/usr/lib/x86_64-linux-gnu/webkit2gtk-4.1:
bind: $SNAP/usr/lib/x86_64-linux-gnu/webkit2gtk-4.1
/usr/share/alsa:
bind: $SNAP/usr/share/alsa
/etc/alsa:
bind: $SNAP/etc/alsa
/usr/lib/x86_64-linux-gnu/alsa-lib:
bind: $SNAP/usr/lib/x86_64-linux-gnu/alsa-lib
architectures:
- build-on: amd64
apps:
qbz:
command: bin/qbz
desktop: packaging/snap/snap/gui/qbz.desktop
extensions: [gnome]
environment:
# Prefer GNOME platform GL libs to avoid Mesa/driver mismatches on NVIDIA.
LD_LIBRARY_PATH: $SNAP/gnome-platform/usr/lib/x86_64-linux-gnu:$SNAP/gnome-platform/lib/x86_64-linux-gnu:$SNAP/gnome-platform/usr/lib:$SNAP/gnome-platform/lib:$LD_LIBRARY_PATH
WEBKIT_EXEC_PATH: $SNAP/usr/lib/x86_64-linux-gnu/webkit2gtk-4.1
GTK_USE_PORTAL: "0"
GIO_USE_PORTAL: "0"
PIPEWIRE_RUNTIME_DIR: $XDG_RUNTIME_DIR/..
plugs:
- network
- network-status
- audio-playback
- home
- removable-media
- desktop
- desktop-legacy
- wayland
- x11
- unity7
- gsettings
- pulseaudio
- alsa
- pipewire
parts:
qbz:
plugin: rust
source: https://github.com/vicrodh/qbz.git
source-tag: v1.1.8
build-packages:
- libwebkit2gtk-4.1-dev
- libgtk-3-dev
- libayatana-appindicator3-dev
- librsvg2-dev
- patchelf
- libssl-dev
- libasound2-dev
- pkg-config
# alsa-utils for aplay command (device enumeration)
- alsa-utils
stage-packages:
- libwebkit2gtk-4.1-0
- libgtk-3-0
- libayatana-appindicator3-1
- libasound2
- libasound2-data
- libasound2-plugins
- libssl3
- pipewire-bin
- pulseaudio-utils
# Include alsa-utils in the snap for aplay -L command
- alsa-utils
override-build: |
# Allow sandboxed builds to override GTK_USE_PORTAL.
perl -0pi -e 'if ($_ !~ /var_os\\(\"GTK_USE_PORTAL\"\\)/) { s/std::env::set_var\\(\"GTK_USE_PORTAL\", \"1\"\\);/if std::env::var_os\\(\"GTK_USE_PORTAL\"\\).is_none() {\\n std::env::set_var(\"GTK_USE_PORTAL\", \"1\");\\n }/ }' src-tauri/src/main.rs
# Install Node.js for frontend build
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt-get install -y nodejs
# Build frontend
npm ci
npm run tauri build -- --no-bundle
# Install binary
mkdir -p $SNAPCRAFT_PART_INSTALL/bin
cp src-tauri/target/release/qbz-nix $SNAPCRAFT_PART_INSTALL/bin/qbz