git: 4c5902886dab - main - audio/radiotrope: Add new port

From: Nicola Vitale <nivit_at_FreeBSD.org>
Date: Sun, 29 Mar 2026 17:19:00 UTC
The branch main has been updated by nivit:

URL: https://cgit.FreeBSD.org/ports/commit/?id=4c5902886dab47114a9c96b1f7d5e148ed02bb88

commit 4c5902886dab47114a9c96b1f7d5e148ed02bb88
Author:     Nicola Vitale <nivit@FreeBSD.org>
AuthorDate: 2026-03-29 17:16:19 +0000
Commit:     Nicola Vitale <nivit@FreeBSD.org>
CommitDate: 2026-03-29 17:17:46 +0000

    audio/radiotrope: Add new port
    
    Radiotrope is a GUI and CLI internet radio player. It’s an AI agent-enabled
    player built with Rust, Slint, and MCP.
    
    Features
    
      - MCP server - AI agents (Claude, etc.) can play stations, control volume,
        and query status through natural language
      - 10-band equalizer - 14 presets, per-band gain control, preamp
      - Desktop GUI - built with Slint, dark/light themes, user-selectable accent
        color, real-time spectrum visualization, stream statistics
      - Terminal player - lightweight TUI with ratatui for headless/SSH use
      - Resilient streaming - automatic reconnection with exponential backoff,
        stall detection, health monitoring
      - Wide format support - MP3, AAC, HE-AAC, Vorbis, Opus, FLAC over ICY, HLS,
        and HTTP
    
    https://github.com/goten002/radiotrope
---
 audio/Makefile                   |    1 +
 audio/radiotrope/Makefile        |   43 ++
 audio/radiotrope/Makefile.crates |  781 +++++++++++++++++++
 audio/radiotrope/distinfo        | 1565 ++++++++++++++++++++++++++++++++++++++
 audio/radiotrope/pkg-descr       |   15 +
 audio/radiotrope/pkg-plist       |    8 +
 6 files changed, 2413 insertions(+)

diff --git a/audio/Makefile b/audio/Makefile
index fd22dea1aaf8..9ab6270e69c7 100644
--- a/audio/Makefile
+++ b/audio/Makefile
@@ -687,6 +687,7 @@
     SUBDIR += qtractor
     SUBDIR += quimup
     SUBDIR += qxgedit
+    SUBDIR += radiotrope
     SUBDIR += ratatouille-lv2
     SUBDIR += raul
     SUBDIR += rawrec
diff --git a/audio/radiotrope/Makefile b/audio/radiotrope/Makefile
new file mode 100644
index 000000000000..e1e37ecf3d12
--- /dev/null
+++ b/audio/radiotrope/Makefile
@@ -0,0 +1,43 @@
+PORTNAME=	radiotrope
+DISTVERSION=	g20260316
+CATEGORIES=	audio
+
+MAINTAINER=	nivit@FreeBSD.org
+COMMENT=	AI agent-enabled internet radio player
+WWW=		https://github.com/goten002/radiotrope
+
+LICENSE=	APACHE20 BSD0CLAUSE BSD2CLAUSE BSD3CLAUSE BSL FDK-AAC GPLv3 \
+		ISCL MIT MPL20 UNICODE UNLICENSE WTFPL ZLIB
+LICENSE_COMB=	multi
+LICENSE_NAME_FDK-AAC=	Fraunhofer FDK AAC Codec Library
+LICENSE_NAME_UNICODE=	UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
+LICENSE_TEXT_FDK-AAC=	See https://spdx.org/licenses/FDK-AAC.html
+LICENSE_TEXT_UNICODE=	See https://www.unicode.org/copyright.html
+LICENSE_PERMS_FDK-AAC=	dist-mirror pkg-mirror auto-accept
+LICENSE_PERMS_UNICODE=	dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
+
+LIB_DEPENDS=	libasound.so:audio/alsa-lib
+
+USES=		cargo ssl
+USE_GITHUB=	yes
+GH_ACCOUNT=	goten002
+GH_TAGNAME=	aab2334
+
+CARGO_INSTALL_PATH=	crates/radiotrope-app crates/radiotrope-cli
+
+DESKTOP_ENTRIES=	"${PORTNAME}" \
+			"${COMMENT}" \
+			"${PORTNAME}" \
+			"${PORTNAME}" \
+			"Audio;AudioVideo;" \
+			false
+
+post-install:
+.for size in 16 32 48 64 128 256
+	${MKDIR} ${STAGEDIR}${PREFIX}/share/icons/hicolor/${size}x${size}/apps
+	cd ${WRKSRC}/assets/icons && \
+	${INSTALL_DATA} icon-${size}.png \
+	${STAGEDIR}${PREFIX}/share/icons/hicolor/${size}x${size}/apps/${PORTNAME}.png
+.endfor
+
+.include <bsd.port.mk>
diff --git a/audio/radiotrope/Makefile.crates b/audio/radiotrope/Makefile.crates
new file mode 100644
index 000000000000..7d6a9ac29402
--- /dev/null
+++ b/audio/radiotrope/Makefile.crates
@@ -0,0 +1,781 @@
+CARGO_CRATES=	ab_glyph-0.2.32 \
+		ab_glyph_rasterizer-0.1.10 \
+		accesskit-0.22.0 \
+		accesskit_atspi_common-0.15.0 \
+		accesskit_consumer-0.32.0 \
+		accesskit_macos-0.23.0 \
+		accesskit_unix-0.18.0 \
+		accesskit_windows-0.30.0 \
+		accesskit_winit-0.30.0 \
+		adler2-2.0.1 \
+		ahash-0.8.12 \
+		aho-corasick-1.1.4 \
+		aligned-0.4.3 \
+		aligned-vec-0.6.4 \
+		allocator-api2-0.2.21 \
+		alsa-0.11.0 \
+		alsa-sys-0.4.0 \
+		android-activity-0.6.0 \
+		android-properties-0.2.2 \
+		android_system_properties-0.1.5 \
+		annotate-snippets-0.12.11 \
+		anstream-0.6.21 \
+		anstyle-1.0.13 \
+		anstyle-parse-0.2.7 \
+		anstyle-query-1.1.5 \
+		anstyle-wincon-3.0.11 \
+		anyhow-1.0.100 \
+		arbitrary-1.4.2 \
+		arg_enum_proc_macro-0.3.4 \
+		arrayref-0.3.9 \
+		arrayvec-0.7.6 \
+		as-raw-xcb-connection-1.0.1 \
+		as-slice-0.2.1 \
+		async-broadcast-0.7.2 \
+		async-channel-2.5.0 \
+		async-executor-1.13.3 \
+		async-io-2.6.0 \
+		async-lock-3.4.2 \
+		async-process-2.5.0 \
+		async-recursion-1.1.1 \
+		async-signal-0.2.13 \
+		async-task-4.7.1 \
+		async-trait-0.1.89 \
+		atomic-0.6.1 \
+		atomic-waker-1.1.2 \
+		atspi-0.29.0 \
+		atspi-common-0.13.0 \
+		atspi-proxies-0.13.0 \
+		auto_enums-0.8.7 \
+		autocfg-1.5.0 \
+		av-scenechange-0.14.1 \
+		av1-grain-0.2.5 \
+		avif-serialize-0.8.8 \
+		base64-0.22.1 \
+		bincode-2.0.1 \
+		bindgen-0.72.1 \
+		biquad-0.5.0 \
+		bit-set-0.5.3 \
+		bit-vec-0.6.3 \
+		bit_field-0.10.3 \
+		bitflags-1.3.2 \
+		bitflags-2.10.0 \
+		bitstream-io-4.9.0 \
+		block-buffer-0.10.4 \
+		block2-0.5.1 \
+		block2-0.6.2 \
+		blocking-1.6.2 \
+		borsh-1.6.0 \
+		built-0.8.0 \
+		bumpalo-3.19.1 \
+		by_address-1.2.1 \
+		bytemuck-1.25.0 \
+		bytemuck_derive-1.10.2 \
+		byteorder-1.5.0 \
+		byteorder-lite-0.1.0 \
+		bytes-1.11.1 \
+		calloop-0.13.0 \
+		calloop-0.14.3 \
+		calloop-wayland-source-0.3.0 \
+		calloop-wayland-source-0.4.1 \
+		castaway-0.2.4 \
+		cc-1.2.55 \
+		cesu8-1.1.0 \
+		cexpr-0.6.0 \
+		cfg-if-1.0.4 \
+		cfg_aliases-0.2.1 \
+		cgl-0.3.2 \
+		chrono-0.4.43 \
+		clang-sys-1.8.1 \
+		clap-4.5.58 \
+		clap_builder-4.5.58 \
+		clap_derive-4.5.55 \
+		clap_lex-1.0.0 \
+		clipboard-win-5.4.1 \
+		clru-0.6.2 \
+		cmake-0.1.57 \
+		color_quant-1.1.0 \
+		colorchoice-1.0.4 \
+		combine-4.6.7 \
+		compact_str-0.9.0 \
+		concurrent-queue-2.5.0 \
+		const-field-offset-0.1.5 \
+		const-field-offset-macro-0.1.5 \
+		convert_case-0.10.0 \
+		copypasta-0.10.2 \
+		core-foundation-0.9.4 \
+		core-foundation-sys-0.8.7 \
+		core-graphics-0.23.2 \
+		core-graphics-types-0.1.3 \
+		core2-0.4.0 \
+		core_maths-0.1.1 \
+		coreaudio-rs-0.14.0 \
+		countme-3.0.1 \
+		cpal-0.17.3 \
+		cpp-0.5.10 \
+		cpp_build-0.5.10 \
+		cpp_common-0.5.10 \
+		cpp_macros-0.5.10 \
+		cpufeatures-0.2.17 \
+		crc32fast-1.5.0 \
+		critical-section-1.2.0 \
+		crossbeam-channel-0.5.15 \
+		crossbeam-deque-0.8.6 \
+		crossbeam-epoch-0.9.18 \
+		crossbeam-utils-0.8.21 \
+		crossterm-0.29.0 \
+		crossterm_winapi-0.9.1 \
+		crunchy-0.2.4 \
+		crypto-common-0.1.7 \
+		csscolorparser-0.6.2 \
+		ctor-lite-0.1.2 \
+		cursor-icon-1.2.0 \
+		darling-0.23.0 \
+		darling_core-0.23.0 \
+		darling_macro-0.23.0 \
+		dasp_sample-0.11.0 \
+		data-url-0.3.2 \
+		deltae-0.3.2 \
+		deranged-0.5.5 \
+		derive_more-2.1.1 \
+		derive_more-impl-2.1.1 \
+		derive_utils-0.15.0 \
+		digest-0.10.7 \
+		dirs-6.0.0 \
+		dirs-sys-0.5.0 \
+		dispatch-0.2.0 \
+		dispatch2-0.3.0 \
+		displaydoc-0.2.5 \
+		dlib-0.5.2 \
+		document-features-0.2.12 \
+		downcast-rs-1.2.1 \
+		dpi-0.1.2 \
+		drm-0.14.1 \
+		drm-ffi-0.9.0 \
+		drm-fourcc-2.2.0 \
+		drm-sys-0.8.0 \
+		either-1.15.0 \
+		encoding_rs-0.8.35 \
+		endi-1.1.1 \
+		enumflags2-0.7.12 \
+		enumflags2_derive-0.7.12 \
+		equator-0.4.2 \
+		equator-macro-0.4.2 \
+		equivalent-1.0.2 \
+		errno-0.3.14 \
+		error-code-3.3.2 \
+		euclid-0.22.13 \
+		event-listener-5.4.1 \
+		event-listener-strategy-0.5.4 \
+		exr-1.74.0 \
+		extended-0.1.0 \
+		fancy-regex-0.11.0 \
+		fastrand-2.3.0 \
+		fax-0.2.6 \
+		fax_derive-0.2.0 \
+		fdeflate-0.3.7 \
+		fdk-aac-0.8.0 \
+		fdk-aac-sys-0.5.0 \
+		femtovg-0.20.3 \
+		field-offset-0.3.6 \
+		filedescriptor-0.8.3 \
+		filetime-0.2.27 \
+		find-msvc-tools-0.1.9 \
+		finl_unicode-1.4.0 \
+		fixedbitset-0.4.2 \
+		flate2-1.1.9 \
+		float-cmp-0.9.0 \
+		fnv-1.0.7 \
+		foldhash-0.1.5 \
+		foldhash-0.2.0 \
+		font-types-0.10.1 \
+		fontdb-0.23.0 \
+		fontdue-0.9.3 \
+		fontique-0.7.0 \
+		foreign-types-0.3.2 \
+		foreign-types-0.5.0 \
+		foreign-types-macros-0.2.3 \
+		foreign-types-shared-0.1.1 \
+		foreign-types-shared-0.3.1 \
+		form_urlencoded-1.2.2 \
+		futures-0.3.31 \
+		futures-channel-0.3.31 \
+		futures-core-0.3.31 \
+		futures-executor-0.3.31 \
+		futures-io-0.3.31 \
+		futures-lite-2.6.1 \
+		futures-macro-0.3.31 \
+		futures-sink-0.3.31 \
+		futures-task-0.3.31 \
+		futures-util-0.3.31 \
+		gbm-0.18.0 \
+		gbm-sys-0.4.0 \
+		generic-array-0.14.7 \
+		gethostname-1.1.0 \
+		getopts-0.2.24 \
+		getrandom-0.2.17 \
+		getrandom-0.3.4 \
+		gif-0.14.1 \
+		gl_generator-0.14.0 \
+		glob-0.3.3 \
+		glow-0.16.0 \
+		glutin-0.32.3 \
+		glutin-winit-0.5.0 \
+		glutin_egl_sys-0.7.1 \
+		glutin_glx_sys-0.6.1 \
+		glutin_wgl_sys-0.6.1 \
+		h2-0.4.13 \
+		half-2.7.1 \
+		harfrust-0.3.2 \
+		hashbrown-0.14.5 \
+		hashbrown-0.15.5 \
+		hashbrown-0.16.1 \
+		heck-0.5.0 \
+		hermit-abi-0.3.9 \
+		hermit-abi-0.5.2 \
+		hex-0.4.3 \
+		htmlparser-0.2.1 \
+		http-1.4.0 \
+		http-body-1.0.1 \
+		http-body-util-0.1.3 \
+		httparse-1.10.1 \
+		hyper-1.8.1 \
+		hyper-rustls-0.27.7 \
+		hyper-tls-0.6.0 \
+		hyper-util-0.1.20 \
+		i-slint-backend-linuxkms-1.15.1 \
+		i-slint-backend-qt-1.15.1 \
+		i-slint-backend-selector-1.15.1 \
+		i-slint-backend-winit-1.15.1 \
+		i-slint-common-1.15.1 \
+		i-slint-compiler-1.15.1 \
+		i-slint-core-1.15.1 \
+		i-slint-core-macros-1.15.1 \
+		i-slint-renderer-femtovg-1.15.1 \
+		i-slint-renderer-skia-1.15.1 \
+		i-slint-renderer-software-1.15.1 \
+		iana-time-zone-0.1.65 \
+		iana-time-zone-haiku-0.1.2 \
+		icu_collections-2.1.1 \
+		icu_locale_core-2.1.1 \
+		icu_normalizer-2.1.1 \
+		icu_normalizer_data-2.1.1 \
+		icu_properties-2.1.2 \
+		icu_properties_data-2.1.2 \
+		icu_provider-2.1.1 \
+		ident_case-1.0.1 \
+		idna-1.1.0 \
+		idna_adapter-1.2.1 \
+		image-0.25.9 \
+		image-webp-0.2.4 \
+		imagesize-0.14.0 \
+		imgref-1.12.0 \
+		indexmap-2.13.0 \
+		indoc-2.0.7 \
+		input-0.9.1 \
+		input-sys-1.18.0 \
+		instability-0.3.11 \
+		integer-sqrt-0.1.5 \
+		interpolate_name-0.2.4 \
+		io-lifetimes-1.0.11 \
+		ipnet-2.11.0 \
+		iri-string-0.7.10 \
+		is_terminal_polyfill-1.70.2 \
+		itertools-0.13.0 \
+		itertools-0.14.0 \
+		itoa-1.0.17 \
+		jni-0.21.1 \
+		jni-sys-0.3.0 \
+		jobserver-0.1.34 \
+		js-sys-0.3.85 \
+		kasuari-0.4.11 \
+		keyboard-types-0.7.0 \
+		khronos_api-3.1.0 \
+		kurbo-0.12.0 \
+		kurbo-0.13.0 \
+		lab-0.11.0 \
+		lazy_static-1.5.0 \
+		lebe-0.5.3 \
+		libc-0.2.180 \
+		libfuzzer-sys-0.4.12 \
+		libloading-0.8.9 \
+		libm-0.2.16 \
+		libredox-0.1.12 \
+		libudev-sys-0.1.4 \
+		line-clipping-0.3.5 \
+		linebender_resource_handle-0.1.1 \
+		linked-hash-map-0.5.6 \
+		linked_hash_set-0.1.6 \
+		linux-raw-sys-0.4.15 \
+		linux-raw-sys-0.6.5 \
+		linux-raw-sys-0.11.0 \
+		litemap-0.8.1 \
+		litrs-1.0.0 \
+		lock_api-0.4.14 \
+		log-0.4.29 \
+		loop9-0.1.5 \
+		lru-0.16.3 \
+		lyon_algorithms-1.0.16 \
+		lyon_extra-1.0.3 \
+		lyon_geom-1.0.18 \
+		lyon_path-1.0.16 \
+		m3u8-rs-6.0.0 \
+		mac_address-1.1.8 \
+		mach2-0.5.0 \
+		maybe-rayon-0.1.1 \
+		memchr-2.7.6 \
+		memmap2-0.9.9 \
+		memmem-0.1.1 \
+		memoffset-0.9.1 \
+		minimal-lexical-0.2.1 \
+		miniz_oxide-0.8.9 \
+		mio-1.1.1 \
+		moxcms-0.7.11 \
+		mpeg2ts-0.6.0 \
+		muda-0.17.1 \
+		native-tls-0.2.14 \
+		natord-1.0.9 \
+		ndk-0.9.0 \
+		ndk-context-0.1.1 \
+		ndk-sys-0.6.0+11769913 \
+		new_debug_unreachable-1.0.6 \
+		nix-0.29.0 \
+		nix-0.30.1 \
+		nom-7.1.3 \
+		nom-8.0.0 \
+		noop_proc_macro-0.3.0 \
+		num-bigint-0.4.6 \
+		num-complex-0.4.6 \
+		num-conv-0.2.0 \
+		num-derive-0.4.2 \
+		num-integer-0.1.46 \
+		num-rational-0.4.2 \
+		num-traits-0.2.19 \
+		num_enum-0.7.5 \
+		num_enum_derive-0.7.5 \
+		num_threads-0.1.7 \
+		objc-sys-0.3.5 \
+		objc2-0.5.2 \
+		objc2-0.6.3 \
+		objc2-app-kit-0.2.2 \
+		objc2-app-kit-0.3.2 \
+		objc2-audio-toolbox-0.3.2 \
+		objc2-avf-audio-0.3.2 \
+		objc2-cloud-kit-0.2.2 \
+		objc2-cloud-kit-0.3.2 \
+		objc2-contacts-0.2.2 \
+		objc2-core-audio-0.3.2 \
+		objc2-core-audio-types-0.3.2 \
+		objc2-core-data-0.2.2 \
+		objc2-core-data-0.3.2 \
+		objc2-core-foundation-0.3.2 \
+		objc2-core-graphics-0.3.2 \
+		objc2-core-image-0.2.2 \
+		objc2-core-image-0.3.2 \
+		objc2-core-location-0.2.2 \
+		objc2-core-text-0.3.2 \
+		objc2-core-video-0.3.2 \
+		objc2-encode-4.1.0 \
+		objc2-foundation-0.2.2 \
+		objc2-foundation-0.3.2 \
+		objc2-io-surface-0.3.2 \
+		objc2-link-presentation-0.2.2 \
+		objc2-metal-0.2.2 \
+		objc2-metal-0.3.2 \
+		objc2-quartz-core-0.2.2 \
+		objc2-quartz-core-0.3.2 \
+		objc2-symbols-0.2.2 \
+		objc2-ui-kit-0.2.2 \
+		objc2-ui-kit-0.3.2 \
+		objc2-uniform-type-identifiers-0.2.2 \
+		objc2-user-notifications-0.2.2 \
+		once_cell-1.21.3 \
+		once_cell_polyfill-1.70.2 \
+		openssl-0.10.75 \
+		openssl-macros-0.1.1 \
+		openssl-probe-0.1.6 \
+		openssl-sys-0.9.111 \
+		option-ext-0.2.0 \
+		opusic-sys-0.5.8 \
+		orbclient-0.3.50 \
+		ordered-float-4.6.0 \
+		ordered-stream-0.2.0 \
+		owned_ttf_parser-0.25.1 \
+		parking-2.2.1 \
+		parking_lot-0.12.5 \
+		parking_lot_core-0.9.12 \
+		parley-0.7.0 \
+		paste-1.0.15 \
+		pastey-0.1.1 \
+		percent-encoding-2.3.2 \
+		pest-2.8.6 \
+		pest_derive-2.8.6 \
+		pest_generator-2.8.6 \
+		pest_meta-2.8.6 \
+		phf-0.11.3 \
+		phf_codegen-0.11.3 \
+		phf_generator-0.11.3 \
+		phf_macros-0.11.3 \
+		phf_shared-0.11.3 \
+		pico-args-0.5.0 \
+		pin-project-1.1.10 \
+		pin-project-internal-1.1.10 \
+		pin-project-lite-0.2.16 \
+		pin-utils-0.1.0 \
+		pin-weak-1.1.0 \
+		piper-0.2.4 \
+		pkg-config-0.3.32 \
+		png-0.17.16 \
+		png-0.18.0 \
+		polling-3.11.0 \
+		portable-atomic-1.13.1 \
+		potential_utf-0.1.4 \
+		powerfmt-0.2.0 \
+		ppv-lite86-0.2.21 \
+		prettyplease-0.2.37 \
+		primal-check-0.3.4 \
+		proc-macro-crate-3.4.0 \
+		proc-macro2-1.0.106 \
+		profiling-1.0.17 \
+		profiling-procmacros-1.0.17 \
+		pulldown-cmark-0.13.0 \
+		pulldown-cmark-escape-0.11.0 \
+		pxfm-0.1.27 \
+		qoi-0.4.1 \
+		qttypes-0.2.12 \
+		quick-error-2.0.1 \
+		quick-xml-0.38.4 \
+		quote-1.0.44 \
+		r-efi-5.3.0 \
+		rand-0.8.5 \
+		rand-0.9.2 \
+		rand_chacha-0.9.0 \
+		rand_core-0.6.4 \
+		rand_core-0.9.5 \
+		ratatui-0.30.0 \
+		ratatui-core-0.1.0 \
+		ratatui-crossterm-0.1.0 \
+		ratatui-macros-0.7.0 \
+		ratatui-termwiz-0.1.0 \
+		ratatui-widgets-0.3.0 \
+		rav1e-0.8.1 \
+		ravif-0.12.0 \
+		raw-window-handle-0.6.2 \
+		raw-window-metal-1.1.0 \
+		rayon-1.11.0 \
+		rayon-core-1.13.0 \
+		read-fonts-0.35.0 \
+		redox_syscall-0.4.1 \
+		redox_syscall-0.5.18 \
+		redox_syscall-0.7.1 \
+		redox_users-0.5.2 \
+		regex-1.12.3 \
+		regex-automata-0.4.14 \
+		regex-syntax-0.8.9 \
+		reqwest-0.13.1 \
+		resvg-0.46.0 \
+		rgb-0.8.52 \
+		ring-0.17.14 \
+		rodio-0.22.0 \
+		rowan-0.16.1 \
+		roxmltree-0.21.1 \
+		rspolib-0.1.2 \
+		rustc-hash-1.1.0 \
+		rustc-hash-2.1.1 \
+		rustc_version-0.4.1 \
+		rustfft-6.4.1 \
+		rustix-0.38.44 \
+		rustix-1.1.3 \
+		rustls-0.23.36 \
+		rustls-pki-types-1.14.0 \
+		rustls-webpki-0.103.9 \
+		rustversion-1.0.22 \
+		rustybuzz-0.20.1 \
+		ryu-1.0.22 \
+		same-file-1.0.6 \
+		schannel-0.1.28 \
+		scoped-tls-1.0.1 \
+		scoped-tls-hkt-0.1.5 \
+		scopeguard-1.2.0 \
+		sctk-adwaita-0.10.1 \
+		security-framework-2.11.1 \
+		security-framework-sys-2.15.0 \
+		semver-1.0.27 \
+		serde-1.0.228 \
+		serde_core-1.0.228 \
+		serde_derive-1.0.228 \
+		serde_json-1.0.149 \
+		serde_repr-0.1.20 \
+		serde_spanned-1.0.4 \
+		serde_urlencoded-0.7.1 \
+		sha2-0.10.9 \
+		shlex-1.3.0 \
+		signal-hook-0.3.18 \
+		signal-hook-mio-0.2.5 \
+		signal-hook-registry-1.4.8 \
+		simd-adler32-0.3.8 \
+		simd_helpers-0.1.0 \
+		simplecss-0.2.2 \
+		siphasher-1.0.2 \
+		skia-bindings-0.90.0 \
+		skia-safe-0.90.0 \
+		skrifa-0.37.0 \
+		slab-0.4.12 \
+		slint-1.15.1 \
+		slint-build-1.15.1 \
+		slint-macros-1.15.1 \
+		slotmap-1.1.1 \
+		smallvec-1.15.1 \
+		smithay-client-toolkit-0.19.2 \
+		smithay-client-toolkit-0.20.0 \
+		smithay-clipboard-0.7.3 \
+		smol_str-0.2.2 \
+		smol_str-0.3.5 \
+		snafu-0.8.9 \
+		snafu-derive-0.8.9 \
+		socket2-0.6.2 \
+		softbuffer-0.4.8 \
+		spin_on-0.1.1 \
+		stable_deref_trait-1.2.1 \
+		static_assertions-1.1.0 \
+		strength_reduce-0.2.4 \
+		strict-num-0.1.1 \
+		strsim-0.11.1 \
+		strum-0.27.2 \
+		strum_macros-0.27.2 \
+		subtle-2.6.1 \
+		svgtypes-0.16.1 \
+		swash-0.2.6 \
+		symphonia-0.5.5 \
+		symphonia-adapter-fdk-aac-0.1.3 \
+		symphonia-adapter-libopus-0.2.6 \
+		symphonia-bundle-flac-0.5.5 \
+		symphonia-bundle-mp3-0.5.5 \
+		symphonia-codec-aac-0.5.5 \
+		symphonia-codec-pcm-0.5.5 \
+		symphonia-codec-vorbis-0.5.5 \
+		symphonia-core-0.5.5 \
+		symphonia-format-isomp4-0.5.5 \
+		symphonia-format-ogg-0.5.5 \
+		symphonia-format-riff-0.5.5 \
+		symphonia-metadata-0.5.5 \
+		symphonia-utils-xiph-0.5.5 \
+		syn-1.0.109 \
+		syn-2.0.114 \
+		sync_wrapper-1.0.2 \
+		synstructure-0.13.2 \
+		sys-locale-0.3.2 \
+		tar-0.4.44 \
+		tempfile-3.24.0 \
+		terminfo-0.9.0 \
+		termios-0.3.3 \
+		termwiz-0.23.3 \
+		text-size-1.1.1 \
+		thiserror-1.0.69 \
+		thiserror-2.0.18 \
+		thiserror-impl-1.0.69 \
+		thiserror-impl-2.0.18 \
+		tiff-0.10.3 \
+		time-0.3.47 \
+		time-core-0.1.8 \
+		tiny-skia-0.11.4 \
+		tiny-skia-path-0.11.4 \
+		tiny-xlib-0.2.4 \
+		tinystr-0.8.2 \
+		tinyvec-1.10.0 \
+		tinyvec_macros-0.1.1 \
+		tokio-1.49.0 \
+		tokio-native-tls-0.3.1 \
+		tokio-rustls-0.26.4 \
+		tokio-util-0.7.18 \
+		toml-0.9.12+spec-1.1.0 \
+		toml_datetime-0.7.5+spec-1.1.0 \
+		toml_edit-0.23.10+spec-1.0.0 \
+		toml_edit-0.24.1+spec-1.1.0 \
+		toml_parser-1.0.8+spec-1.1.0 \
+		toml_writer-1.0.6+spec-1.1.0 \
+		tower-0.5.3 \
+		tower-http-0.6.8 \
+		tower-layer-0.3.3 \
+		tower-service-0.3.3 \
+		tracing-0.1.44 \
+		tracing-attributes-0.1.31 \
+		tracing-core-0.1.36 \
+		transpose-0.2.3 \
+		try-lock-0.2.5 \
+		ttf-parser-0.21.1 \
+		ttf-parser-0.25.1 \
+		typed-index-collections-3.5.0 \
+		typenum-1.19.0 \
+		ucd-trie-0.1.7 \
+		udev-0.9.3 \
+		uds_windows-1.1.0 \
+		unicase-2.9.0 \
+		unicode-bidi-0.3.18 \
+		unicode-bidi-mirroring-0.4.0 \
+		unicode-ccc-0.4.0 \
+		unicode-ident-1.0.22 \
+		unicode-linebreak-0.1.5 \
+		unicode-properties-0.1.4 \
+		unicode-script-0.5.8 \
+		unicode-segmentation-1.12.0 \
+		unicode-truncate-2.0.1 \
+		unicode-vo-0.1.0 \
+		unicode-width-0.2.2 \
+		unicode-xid-0.2.6 \
+		untrusted-0.9.0 \
+		unty-0.0.4 \
+		url-2.5.8 \
+		usvg-0.46.0 \
+		utf8_iter-1.0.4 \
+		utf8parse-0.2.2 \
+		uuid-1.20.0 \
+		v_frame-0.3.9 \
+		vcpkg-0.2.15 \
+		version_check-0.9.5 \
+		vtable-0.3.0 \
+		vtable-macro-0.3.0 \
+		vtparse-0.6.2 \
+		walkdir-2.5.0 \
+		want-0.3.1 \
+		wasi-0.11.1+wasi-snapshot-preview1 \
+		wasip2-1.0.2+wasi-0.2.9 \
+		wasm-bindgen-0.2.108 \
+		wasm-bindgen-futures-0.4.58 \
+		wasm-bindgen-macro-0.2.108 \
+		wasm-bindgen-macro-support-0.2.108 \
+		wasm-bindgen-shared-0.2.108 \
+		wayland-backend-0.3.12 \
+		wayland-client-0.31.12 \
+		wayland-csd-frame-0.3.0 \
+		wayland-cursor-0.31.12 \
+		wayland-protocols-0.32.10 \
+		wayland-protocols-experimental-20250721.0.1 \
+		wayland-protocols-misc-0.3.10 \
+		wayland-protocols-plasma-0.3.10 \
+		wayland-protocols-wlr-0.3.10 \
+		wayland-scanner-0.31.8 \
+		wayland-sys-0.31.8 \
+		web-sys-0.3.85 \
+		web-time-1.1.0 \
+		weezl-0.1.12 \
+		wezterm-bidi-0.2.3 \
+		wezterm-blob-leases-0.1.1 \
+		wezterm-color-types-0.3.0 \
+		wezterm-dynamic-0.2.1 \
+		wezterm-dynamic-derive-0.1.1 \
+		wezterm-input-types-0.1.0 \
+		winapi-0.3.9 \
+		winapi-i686-pc-windows-gnu-0.4.0 \
+		winapi-util-0.1.11 \
+		winapi-x86_64-pc-windows-gnu-0.4.0 \
+		windows-0.58.0 \
+		windows-0.61.3 \
+		windows-0.62.2 \
+		windows-collections-0.2.0 \
+		windows-collections-0.3.2 \
+		windows-core-0.58.0 \
+		windows-core-0.61.2 \
+		windows-core-0.62.2 \
+		windows-future-0.2.1 \
+		windows-future-0.3.2 \
+		windows-implement-0.58.0 \
+		windows-implement-0.60.2 \
+		windows-interface-0.58.0 \
+		windows-interface-0.59.3 \
+		windows-link-0.1.3 \
+		windows-link-0.2.1 \
+		windows-numerics-0.2.0 \
+		windows-numerics-0.3.1 \
+		windows-result-0.2.0 \
+		windows-result-0.3.4 \
+		windows-result-0.4.1 \
+		windows-strings-0.1.0 \
+		windows-strings-0.4.2 \
+		windows-strings-0.5.1 \
+		windows-sys-0.45.0 \
+		windows-sys-0.48.0 \
+		windows-sys-0.52.0 \
+		windows-sys-0.60.2 \
+		windows-sys-0.61.2 \
+		windows-targets-0.42.2 \
+		windows-targets-0.48.5 \
+		windows-targets-0.52.6 \
+		windows-targets-0.53.5 \
+		windows-threading-0.1.0 \
+		windows-threading-0.2.1 \
+		windows_aarch64_gnullvm-0.42.2 \
+		windows_aarch64_gnullvm-0.48.5 \
+		windows_aarch64_gnullvm-0.52.6 \
+		windows_aarch64_gnullvm-0.53.1 \
+		windows_aarch64_msvc-0.42.2 \
+		windows_aarch64_msvc-0.48.5 \
+		windows_aarch64_msvc-0.52.6 \
+		windows_aarch64_msvc-0.53.1 \
+		windows_i686_gnu-0.42.2 \
+		windows_i686_gnu-0.48.5 \
+		windows_i686_gnu-0.52.6 \
+		windows_i686_gnu-0.53.1 \
+		windows_i686_gnullvm-0.52.6 \
+		windows_i686_gnullvm-0.53.1 \
+		windows_i686_msvc-0.42.2 \
+		windows_i686_msvc-0.48.5 \
+		windows_i686_msvc-0.52.6 \
+		windows_i686_msvc-0.53.1 \
+		windows_x86_64_gnu-0.42.2 \
+		windows_x86_64_gnu-0.48.5 \
+		windows_x86_64_gnu-0.52.6 \
+		windows_x86_64_gnu-0.53.1 \
+		windows_x86_64_gnullvm-0.42.2 \
+		windows_x86_64_gnullvm-0.48.5 \
+		windows_x86_64_gnullvm-0.52.6 \
+		windows_x86_64_gnullvm-0.53.1 \
+		windows_x86_64_msvc-0.42.2 \
+		windows_x86_64_msvc-0.48.5 \
+		windows_x86_64_msvc-0.52.6 \
+		windows_x86_64_msvc-0.53.1 \
+		winit-0.30.12 \
+		winnow-0.7.14 \
+		wit-bindgen-0.51.0 \
+		write-fonts-0.43.0 \
+		writeable-0.6.2 \
+		x11-clipboard-0.9.3 \
+		x11-dl-2.21.0 \
+		x11rb-0.13.2 \
+		x11rb-protocol-0.13.2 \
+		xattr-1.6.1 \
+		xcursor-0.3.10 \
+		xkbcommon-0.9.0 \
+		xkbcommon-dl-0.4.2 \
+		xkeysym-0.2.1 \
+		xml-rs-0.8.28 \
+		xmlwriter-0.1.0 \
+		y4m-0.8.0 \
+		yazi-0.2.1 \
+		yeslogic-fontconfig-sys-6.0.0 \
+		yoke-0.8.1 \
+		yoke-derive-0.8.1 \
+		zbus-5.13.2 \
+		zbus-lockstep-0.5.2 \
+		zbus-lockstep-macros-0.5.2 \
+		zbus_macros-5.13.2 \
+		zbus_names-4.3.1 \
+		zbus_xml-5.1.0 \
+		zeno-0.3.3 \
+		zerocopy-0.8.39 \
+		zerocopy-derive-0.8.39 \
+		zerofrom-0.1.6 \
+		zerofrom-derive-0.1.6 \
+		zeroize-1.8.2 \
+		zerotrie-0.2.3 \
+		zerovec-0.11.5 \
+		zerovec-derive-0.11.2 \
+		zmij-1.0.21 \
+		zune-core-0.4.12 \
+		zune-core-0.5.1 \
+		zune-inflate-0.2.54 \
+		zune-jpeg-0.4.21 \
+		zune-jpeg-0.5.12 \
+		zvariant-5.9.2 \
+		zvariant_derive-5.9.2 \
+		zvariant_utils-3.3.0
diff --git a/audio/radiotrope/distinfo b/audio/radiotrope/distinfo
new file mode 100644
index 000000000000..9b8218bc8714
--- /dev/null
+++ b/audio/radiotrope/distinfo
@@ -0,0 +1,1565 @@
+TIMESTAMP = 1774786221
+SHA256 (rust/crates/ab_glyph-0.2.32.crate) = 01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2
+SIZE (rust/crates/ab_glyph-0.2.32.crate) = 20967
+SHA256 (rust/crates/ab_glyph_rasterizer-0.1.10.crate) = 366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618
+SIZE (rust/crates/ab_glyph_rasterizer-0.1.10.crate) = 11206
+SHA256 (rust/crates/accesskit-0.22.0.crate) = 3eca13c82f9a5cd813120b2e9b6a5d10532c6e4cd140c295cebd1f770095c8a5
+SIZE (rust/crates/accesskit-0.22.0.crate) = 35698
+SHA256 (rust/crates/accesskit_atspi_common-0.15.0.crate) = 3eb9cc46b7fb6987c4f891f0301b230b29d9e69b4854f060a0cf41fbc407ab77
+SIZE (rust/crates/accesskit_atspi_common-0.15.0.crate) = 26666
+SHA256 (rust/crates/accesskit_consumer-0.32.0.crate) = 69d880a613f29621c90e801feec40f5dd61d837d7e20bf9b67676d45e7364a36
+SIZE (rust/crates/accesskit_consumer-0.32.0.crate) = 37839
+SHA256 (rust/crates/accesskit_macos-0.23.0.crate) = 5b0ddfc3fe3d457d11cc1c4989105986a03583a1d54d0c25053118944b62e100
+SIZE (rust/crates/accesskit_macos-0.23.0.crate) = 25694
+SHA256 (rust/crates/accesskit_unix-0.18.0.crate) = d5d552169ef018149966ed139bb0311c6947b3343e9140d1b9f88d69da9528fd
+SIZE (rust/crates/accesskit_unix-0.18.0.crate) = 26170
+SHA256 (rust/crates/accesskit_windows-0.30.0.crate) = d277279d0a3b0c0021dd110b55aa1fe326b09ee2cbc338df28f847c7daf94e25
+SIZE (rust/crates/accesskit_windows-0.30.0.crate) = 56127
+SHA256 (rust/crates/accesskit_winit-0.30.0.crate) = db08dff285306264a1de127ea07bb9e7a1ed71bd8593c168d0731caa782516c9
+SIZE (rust/crates/accesskit_winit-0.30.0.crate) = 33812
+SHA256 (rust/crates/adler2-2.0.1.crate) = 320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa
+SIZE (rust/crates/adler2-2.0.1.crate) = 13366
+SHA256 (rust/crates/ahash-0.8.12.crate) = 5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75
+SIZE (rust/crates/ahash-0.8.12.crate) = 43413
+SHA256 (rust/crates/aho-corasick-1.1.4.crate) = ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301
+SIZE (rust/crates/aho-corasick-1.1.4.crate) = 184015
+SHA256 (rust/crates/aligned-0.4.3.crate) = ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685
+SIZE (rust/crates/aligned-0.4.3.crate) = 10452
+SHA256 (rust/crates/aligned-vec-0.6.4.crate) = dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b
+SIZE (rust/crates/aligned-vec-0.6.4.crate) = 12609
+SHA256 (rust/crates/allocator-api2-0.2.21.crate) = 683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923
+SIZE (rust/crates/allocator-api2-0.2.21.crate) = 63622
+SHA256 (rust/crates/alsa-0.11.0.crate) = 812947049edcd670a82cd5c73c3661d2e58468577ba8489de58e1a73c04cbd5d
+SIZE (rust/crates/alsa-0.11.0.crate) = 76094
+SHA256 (rust/crates/alsa-sys-0.4.0.crate) = ad7569085a265dd3f607ebecce7458eaab2132a84393534c95b18dcbc3f31e04
+SIZE (rust/crates/alsa-sys-0.4.0.crate) = 35672
+SHA256 (rust/crates/android-activity-0.6.0.crate) = ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046
+SIZE (rust/crates/android-activity-0.6.0.crate) = 258597
+SHA256 (rust/crates/android-properties-0.2.2.crate) = fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04
+SIZE (rust/crates/android-properties-0.2.2.crate) = 4563
+SHA256 (rust/crates/android_system_properties-0.1.5.crate) = 819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311
+SIZE (rust/crates/android_system_properties-0.1.5.crate) = 5243
+SHA256 (rust/crates/annotate-snippets-0.12.11.crate) = 16e4850548ff4a25a77ce3bda7241874e17fb702ea551f0cc62a2dbe052f1272
+SIZE (rust/crates/annotate-snippets-0.12.11.crate) = 57601
+SHA256 (rust/crates/anstream-0.6.21.crate) = 43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a
+SIZE (rust/crates/anstream-0.6.21.crate) = 29516
+SHA256 (rust/crates/anstyle-1.0.13.crate) = 5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78
+SIZE (rust/crates/anstyle-1.0.13.crate) = 17651
+SHA256 (rust/crates/anstyle-parse-0.2.7.crate) = 4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2
+SIZE (rust/crates/anstyle-parse-0.2.7.crate) = 21707
+SHA256 (rust/crates/anstyle-query-1.1.5.crate) = 40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc
+SIZE (rust/crates/anstyle-query-1.1.5.crate) = 10264
+SHA256 (rust/crates/anstyle-wincon-3.0.11.crate) = 291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d
+SIZE (rust/crates/anstyle-wincon-3.0.11.crate) = 12638
+SHA256 (rust/crates/anyhow-1.0.100.crate) = a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61
+SIZE (rust/crates/anyhow-1.0.100.crate) = 54059
+SHA256 (rust/crates/arbitrary-1.4.2.crate) = c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1
+SIZE (rust/crates/arbitrary-1.4.2.crate) = 38307
+SHA256 (rust/crates/arg_enum_proc_macro-0.3.4.crate) = 0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea
+SIZE (rust/crates/arg_enum_proc_macro-0.3.4.crate) = 5102
+SHA256 (rust/crates/arrayref-0.3.9.crate) = 76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb
+SIZE (rust/crates/arrayref-0.3.9.crate) = 9186
+SHA256 (rust/crates/arrayvec-0.7.6.crate) = 7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50
+SIZE (rust/crates/arrayvec-0.7.6.crate) = 31237
+SHA256 (rust/crates/as-raw-xcb-connection-1.0.1.crate) = 175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b
+SIZE (rust/crates/as-raw-xcb-connection-1.0.1.crate) = 6460
+SHA256 (rust/crates/as-slice-0.2.1.crate) = 516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516
+SIZE (rust/crates/as-slice-0.2.1.crate) = 6942
+SHA256 (rust/crates/async-broadcast-0.7.2.crate) = 435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532
+SIZE (rust/crates/async-broadcast-0.7.2.crate) = 22746
+SHA256 (rust/crates/async-channel-2.5.0.crate) = 924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2
+SIZE (rust/crates/async-channel-2.5.0.crate) = 18624
+SHA256 (rust/crates/async-executor-1.13.3.crate) = 497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8
+SIZE (rust/crates/async-executor-1.13.3.crate) = 29126
+SHA256 (rust/crates/async-io-2.6.0.crate) = 456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc
+SIZE (rust/crates/async-io-2.6.0.crate) = 51062
+SHA256 (rust/crates/async-lock-3.4.2.crate) = 290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311
+SIZE (rust/crates/async-lock-3.4.2.crate) = 39826
+SHA256 (rust/crates/async-process-2.5.0.crate) = fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75
+SIZE (rust/crates/async-process-2.5.0.crate) = 27552
+SHA256 (rust/crates/async-recursion-1.1.1.crate) = 3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11
+SIZE (rust/crates/async-recursion-1.1.1.crate) = 14874
+SHA256 (rust/crates/async-signal-0.2.13.crate) = 43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c
+SIZE (rust/crates/async-signal-0.2.13.crate) = 17015
+SHA256 (rust/crates/async-task-4.7.1.crate) = 8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de
+SIZE (rust/crates/async-task-4.7.1.crate) = 38077
+SHA256 (rust/crates/async-trait-0.1.89.crate) = 9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb
+SIZE (rust/crates/async-trait-0.1.89.crate) = 32171
+SHA256 (rust/crates/atomic-0.6.1.crate) = a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340
+SIZE (rust/crates/atomic-0.6.1.crate) = 15243
+SHA256 (rust/crates/atomic-waker-1.1.2.crate) = 1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0
+SIZE (rust/crates/atomic-waker-1.1.2.crate) = 12422
+SHA256 (rust/crates/atspi-0.29.0.crate) = c77886257be21c9cd89a4ae7e64860c6f0eefca799bb79127913052bd0eefb3d
+SIZE (rust/crates/atspi-0.29.0.crate) = 20051
+SHA256 (rust/crates/atspi-common-0.13.0.crate) = 20c5617155740c98003016429ad13fe43ce7a77b007479350a9f8bf95a29f63d
+SIZE (rust/crates/atspi-common-0.13.0.crate) = 129527
*** 1505 LINES SKIPPED ***