SmartestHome/hosts/audio-endpoint/configs/spotify-connect-start

46 lines
2.3 KiB
Bash
Executable File

#!/bin/sh
# Starts whichever Spotify Connect backend actually got installed on this image —
# librespot or spotifyd. Installed to /usr/local/bin/spotify-connect-start,
# invoked by spotify-connect.service. Exactly one of these binaries exists on any
# given image (see the apt-first/documented-fallback install logic in both build
# pipelines' hooks, mirroring hosts/thin-client's own
# 0500-spotify-connect.hook.chroot); this wrapper is what lets the systemd unit
# stay one static file regardless of which one it turned out to be.
#
# DEVICE NAME: always $(hostname), read fresh at every start, never baked in.
# Per-room identity is set differently on each variant — Raspberry Pi Imager's OS
# Customisation (arm64, per-flash) or IMAGE_HOSTNAME at build time (amd64,
# per-build) — see hosts/audio-endpoint/README.md's "Per-room identity" sections.
# Reading the hostname here rather than a baked-in name is what lets one shared
# unit/wrapper work correctly either way.
#
# ALSA DEVICE: ${ALSA_DEVICE:-default}. The arm64 image sets this to a fixed
# `hw:0` via a systemd drop-in (safe once onboard audio is disabled and the
# HiFiBerry is the only card left — see the hifiberry-amp2 config.txt fragment).
# The amd64 image ships with no override at all — a generic mini PC's USB DAC
# enumeration index isn't something this repo can know in advance (it may also
# have onboard audio competing for card 0, and which one wins varies by board),
# so guessing one would be exactly the kind of "build against a guess" this
# project avoids elsewhere (gesture-config.json's camera_device, the ESP32
# firmware's weather_entity_id). See hosts/audio-endpoint/README.md's amd64
# section for the one-time `aplay -l` + systemd drop-in step this leaves for
# whoever sets up that specific box.
set -eu
NAME="$(hostname)"
DEVICE="${ALSA_DEVICE:-default}"
if command -v librespot >/dev/null 2>&1; then
exec librespot --name "$NAME" --backend alsa --device "$DEVICE" \
--bitrate 320 --initial-volume 100 --device-type speaker
fi
if command -v spotifyd >/dev/null 2>&1; then
exec spotifyd --no-daemon --device-name "$NAME" --backend alsa \
--device "$DEVICE" --bitrate 320 --initial-volume 100
fi
echo "spotify-connect-start: neither librespot nor spotifyd is installed on this" >&2
echo " image — see hosts/audio-endpoint/README.md's Spotify Connect install section." >&2
exit 1