class BeefyPlayer < Formula include Language::Python::Virtualenv desc "Terminal player for internet radio with a live spectrum analyser" homepage "https://tildeforge.dev/beefcarver/beefy-player" url "https://tildeforge.dev/beefcarver/beefy-player/releases/download/v1.2.2/beefy-player-1.2.2.tar.gz" sha256 "0000000000000000000000000000000000000000000000000000000000000000" # TODO: release asset license "WTFPL" head "https://tildeforge.dev/beefcarver/beefy-player.git", branch: "main" depends_on "python@3.14" # numpy and pillow are large native builds. Depending on Homebrew's own # formulae (which have bottles) keeps them out of the app's virtualenv build; # the venv sees them through system site-packages. depends_on "numpy" depends_on "pillow" # Runtime tools the app shells out to: mpv for audio, ffmpeg for the stream # decode fallback of the spectrum analyser. Both are optional at runtime -- # the UI degrades gracefully -- but a radio player without them is not much fun. depends_on "ffmpeg" depends_on "mpv" # Tells `brew update-python-resources` what to resolve: numpy/pillow come from # the formulae above, and dbus-next is marker-gated to Linux upstream so it # has to be requested explicitly for the Linux side of the tap. pypi_packages exclude_packages: "numpy,pillow", extra_packages: "dbus-next" def install # system_site_packages is the default, so the excluded numpy/pillow from the # formulae are importable from the virtualenv. virtualenv_install_with_resources end def caveats <<~EOS The spectrum analyser follows what you hear. On macOS 14.2+ grant your terminal permission under System Settings > Privacy & Security > System Audio Recording, otherwise it falls back to decoding the stream. Inside tmux, install `tmux` for image passthrough. EOS end test do assert_match version.to_s, shell_output("#{bin}/beefy-player --version") # --offline keeps the test hermetic: cached or bundled stations only. assert_match(/^# /, shell_output("#{bin}/beefy-player --offline --list")) end end