git: ad8a777e7519 - main - multimedia/termusic: New port: Music Player TUI

From: Yuri Victorovich <yuri_at_FreeBSD.org>
Date: Sun, 29 Mar 2026 05:15:29 UTC
The branch main has been updated by yuri:

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

commit ad8a777e7519d03aa58ce7712dc66bf83da777ab
Author:     Yuri Victorovich <yuri@FreeBSD.org>
AuthorDate: 2026-03-28 23:33:28 +0000
Commit:     Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2026-03-29 05:15:26 +0000

    multimedia/termusic: New port: Music Player TUI
---
 multimedia/Makefile           |    1 +
 multimedia/termusic/Makefile  |  692 ++++++++++++++++++++++
 multimedia/termusic/distinfo  | 1307 +++++++++++++++++++++++++++++++++++++++++
 multimedia/termusic/pkg-descr |   11 +
 4 files changed, 2011 insertions(+)

diff --git a/multimedia/Makefile b/multimedia/Makefile
index 476a94bd4613..1d685e294151 100644
--- a/multimedia/Makefile
+++ b/multimedia/Makefile
@@ -368,6 +368,7 @@
     SUBDIR += tautulli
     SUBDIR += tenacity
     SUBDIR += termplay
+    SUBDIR += termusic
     SUBDIR += tinyobjloader
     SUBDIR += tivodecode
     SUBDIR += totem
diff --git a/multimedia/termusic/Makefile b/multimedia/termusic/Makefile
new file mode 100644
index 000000000000..5bf9c1d952b2
--- /dev/null
+++ b/multimedia/termusic/Makefile
@@ -0,0 +1,692 @@
+PORTNAME=	termusic
+DISTVERSIONPREFIX=	v
+DISTVERSION=	0.12.1
+CATEGORIES=	multimedia
+
+MAINTAINER=	yuri@FreeBSD.org
+COMMENT=	Music Player TUI
+WWW=		https://github.com/tramhao/termusic
+
+LICENSE=	GPLv3 MIT
+LICENSE_COMB=	multi
+LICENSE_FILE_GPLv3=	${WRKSRC}/LICENSE_GPLv3
+LICENSE_FILE_MIT=	${WRKSRC}/LICENSE_MIT
+
+BUILD_DEPENDS=	protoc:devel/protobuf
+LIB_DEPENDS=	libasound.so:audio/alsa-lib
+
+USES=		cargo pkgconfig ssl
+
+USE_GITHUB=	yes
+GH_ACCOUNT=	tramhao
+
+CARGO_CRATES=	addr2line-0.24.2 \
+		adler2-2.0.0 \
+		ahash-0.8.12 \
+		aho-corasick-1.1.3 \
+		aligned-vec-0.5.0 \
+		allocator-api2-0.2.18 \
+		alphanumeric-sort-1.5.3 \
+		alsa-0.9.1 \
+		alsa-sys-0.3.1 \
+		android-tzdata-0.1.1 \
+		android_system_properties-0.1.5 \
+		anes-0.1.6 \
+		ansi_colours-1.2.3 \
+		anstream-0.6.15 \
+		anstyle-1.0.8 \
+		anstyle-parse-0.2.5 \
+		anstyle-query-1.1.1 \
+		anstyle-wincon-3.0.4 \
+		anyhow-1.0.99 \
+		arbitrary-1.3.2 \
+		arg_enum_proc_macro-0.3.4 \
+		arrayvec-0.7.6 \
+		async-broadcast-0.5.1 \
+		async-channel-2.3.1 \
+		async-compression-0.4.12 \
+		async-executor-1.13.0 \
+		async-fs-1.6.0 \
+		async-io-1.13.0 \
+		async-io-2.3.4 \
+		async-lock-2.8.0 \
+		async-lock-3.4.0 \
+		async-process-1.8.1 \
+		async-recursion-1.1.1 \
+		async-ringbuf-0.3.4 \
+		async-signal-0.2.10 \
+		async-task-4.7.1 \
+		async-trait-0.1.89 \
+		atomic-0.6.0 \
+		atomic-waker-1.1.2 \
+		autocfg-1.3.0 \
+		av1-grain-0.2.3 \
+		avif-serialize-0.8.2 \
+		axum-0.8.1 \
+		axum-core-0.5.0 \
+		backtrace-0.3.74 \
+		base64-0.22.1 \
+		bindgen-0.71.1 \
+		bit_field-0.10.2 \
+		bitflags-1.3.2 \
+		bitflags-2.9.1 \
+		bitstream-io-2.5.3 \
+		block-0.1.6 \
+		block-buffer-0.10.4 \
+		blocking-1.6.1 \
+		bstr-1.10.0 \
+		built-0.7.5 \
+		bumpalo-3.16.0 \
+		bytemuck-1.17.0 \
+		byteorder-1.5.0 \
+		byteorder-lite-0.1.0 \
+		bytes-1.10.1 \
+		bytesize-2.0.1 \
+		camino-1.1.9 \
+		cassowary-0.3.0 \
+		cast-0.3.0 \
+		castaway-0.2.3 \
+		cc-1.2.17 \
+		cesu8-1.1.0 \
+		cexpr-0.6.0 \
+		cfg-expr-0.15.8 \
+		cfg-expr-0.16.0 \
+		cfg-if-1.0.0 \
+		cfg_aliases-0.2.1 \
+		chrono-0.4.41 \
+		ciborium-0.2.2 \
+		ciborium-io-0.2.2 \
+		ciborium-ll-0.2.2 \
+		clang-sys-1.8.1 \
+		clap-4.5.46 \
+		clap_builder-4.5.46 \
+		clap_derive-4.5.45 \
+		clap_lex-0.7.4 \
+		cocoa-0.24.1 \
+		cocoa-foundation-0.1.2 \
+		color_quant-1.1.0 \
+		colorchoice-1.0.2 \
+		colored-3.0.0 \
+		combine-4.6.7 \
+		compact_str-0.8.0 \
+		concurrent-queue-2.5.0 \
+		console-0.15.8 \
+		convert_case-0.7.1 \
+		cookie-0.18.1 \
+		cookie_store-0.21.1 \
+		core-foundation-0.9.4 \
+		core-foundation-sys-0.8.7 \
+		core-graphics-0.22.3 \
+		core-graphics-types-0.1.3 \
+		coreaudio-rs-0.13.0 \
+		cpal-0.16.0 \
+		cpufeatures-0.2.13 \
+		crc32fast-1.4.2 \
+		criterion-0.7.0 \
+		criterion-plot-0.6.0 \
+		crossbeam-deque-0.8.5 \
+		crossbeam-epoch-0.9.18 \
+		crossbeam-utils-0.8.20 \
+		crossterm-0.28.1 \
+		crossterm-0.29.0 \
+		crossterm_winapi-0.9.1 \
+		crunchy-0.2.2 \
+		crypto-common-0.1.6 \
+		ctrlc-3.4.7 \
+		dasp_sample-0.11.0 \
+		data-encoding-2.6.0 \
+		deranged-0.3.11 \
+		derivative-2.2.0 \
+		derive_more-2.0.1 \
+		derive_more-impl-2.0.1 \
+		diff-0.1.13 \
+		digest-0.10.7 \
+		dirs-6.0.0 \
+		dirs-sys-0.5.0 \
+		discord-rich-presence-0.2.5 \
+		dispatch-0.2.0 \
+		dispatch2-0.3.0 \
+		displaydoc-0.2.5 \
+		document-features-0.2.11 \
+		educe-0.6.0 \
+		either-1.15.0 \
+		encode_unicode-0.3.6 \
+		encoding_rs-0.8.34 \
+		entities-1.0.1 \
+		enum-ordinalize-4.3.0 \
+		enum-ordinalize-derive-4.3.1 \
+		enumflags2-0.7.10 \
+		enumflags2_derive-0.7.10 \
+		equivalent-1.0.1 \
+		errno-0.3.12 \
+		escaper-0.1.1 \
+		event-listener-2.5.3 \
+		event-listener-3.1.0 \
+		event-listener-5.3.1 \
+		event-listener-strategy-0.5.2 \
+		exr-1.73.0 \
+		extended-0.1.0 \
+		fallible-iterator-0.3.0 \
+		fallible-streaming-iterator-0.1.9 \
+		fastrand-1.9.0 \
+		fastrand-2.1.1 \
+		fdeflate-0.3.4 \
+		figment-0.10.19 \
+		fixedbitset-0.5.7 \
+		flate2-1.0.32 \
+		flexi_logger-0.31.5 \
+		fnv-1.0.7 \
+		foldhash-0.1.3 \
+		foreign-types-0.3.2 \
+		foreign-types-shared-0.1.1 \
+		form_urlencoded-1.2.1 \
+		futures-channel-0.3.31 \
+		futures-core-0.3.31 \
+		futures-executor-0.3.31 \
+		futures-io-0.3.31 \
+		futures-lite-1.13.0 \
+		futures-lite-2.3.0 \
+		futures-macro-0.3.31 \
+		futures-sink-0.3.31 \
+		futures-task-0.3.31 \
+		futures-util-0.3.31 \
+		generic-array-0.14.7 \
+		getrandom-0.2.15 \
+		getrandom-0.3.2 \
+		gif-0.13.1 \
+		gimli-0.31.1 \
+		gio-sys-0.21.1 \
+		glib-0.21.1 \
+		glib-macros-0.21.0 \
+		glib-sys-0.21.1 \
+		glob-0.3.1 \
+		gobject-sys-0.21.1 \
+		gstreamer-0.24.1 \
+		gstreamer-sys-0.24.0 \
+		h2-0.4.6 \
+		half-2.4.1 \
+		hard-xml-1.36.0 \
+		hard-xml-derive-1.36.0 \
+		hashbrown-0.15.0 \
+		hashlink-0.10.0 \
+		heck-0.5.0 \
+		hermit-abi-0.3.9 \
+		hermit-abi-0.4.0 \
+		hex-0.4.3 \
+		http-1.1.0 \
+		http-body-1.0.1 \
+		http-body-util-0.1.2 \
+		httparse-1.9.4 \
+		httpdate-1.0.3 \
+		hyper-1.7.0 \
+		hyper-rustls-0.27.2 \
+		hyper-timeout-0.5.1 \
+		hyper-tls-0.6.0 \
+		hyper-util-0.1.16 \
+		iana-time-zone-0.1.60 \
+		iana-time-zone-haiku-0.1.2 \
+		icu_collections-1.5.0 \
+		icu_locid-1.5.0 \
+		icu_locid_transform-1.5.0 \
+		icu_locid_transform_data-1.5.1 \
+		icu_normalizer-1.5.0 \
+		icu_normalizer_data-1.5.1 \
+		icu_properties-1.5.1 \
+		icu_properties_data-1.5.1 \
+		icu_provider-1.5.0 \
+		icu_provider_macros-1.5.0 \
+		id3-1.16.3 \
+		idna-1.0.3 \
+		idna_adapter-1.2.0 \
+		image-0.25.6 \
+		image-webp-0.2.0 \
+		imgref-1.11.0 \
+		include_dir-0.7.4 \
+		include_dir_macros-0.7.4 \
+		indexmap-2.11.0 \
+		indoc-2.0.6 \
+		instability-0.3.2 \
+		instant-0.1.13 \
+		interpolate_name-0.2.4 \
+		io-lifetimes-1.0.11 \
+		io-uring-0.7.10 \
+		ipnet-2.9.0 \
+		iri-string-0.7.8 \
+		is_terminal_polyfill-1.70.1 \
+		itertools-0.12.1 \
+		itertools-0.13.0 \
+		itertools-0.14.0 \
+		itoa-1.0.11 \
+		jetscii-0.5.3 \
+		jni-0.21.1 \
+		jni-sys-0.3.0 \
+		jobserver-0.1.32 \
+		jpeg-decoder-0.3.1 \
+		js-sys-0.3.77 \
+		kstring-2.0.2 \
+		lazy-regex-3.3.0 \
+		lazy-regex-proc_macros-3.3.0 \
+		lazy_static-1.5.0 \
+		lebe-0.5.2 \
+		libaes-0.7.0 \
+		libc-0.2.175 \
+		libfuzzer-sys-0.4.7 \
+		libloading-0.8.5 \
+		libmpv-sirno-2.0.2-fork.1 \
+		libmpv-sys-sirno-2.0.0-fork.1 \
+		libredox-0.1.3 \
+		libsqlite3-sys-0.35.0 \
+		linux-raw-sys-0.3.8 \
+		linux-raw-sys-0.4.14 \
+		linux-raw-sys-0.9.4 \
+		litemap-0.7.5 \
+		litrs-0.4.1 \
+		lock_api-0.4.13 \
+		lofty-0.22.4 \
+		lofty_attr-0.11.1 \
+		log-0.4.27 \
+		loop9-0.1.5 \
+		lru-0.12.5 \
+		mach2-0.4.3 \
+		make-cmd-0.1.0 \
+		malloc_buf-0.0.6 \
+		matchit-0.8.4 \
+		maybe-rayon-0.1.1 \
+		md5-0.8.0 \
+		mediatype-0.20.0 \
+		memchr-2.7.5 \
+		memoffset-0.7.1 \
+		memoffset-0.9.1 \
+		mime-0.3.17 \
+		minimal-lexical-0.2.1 \
+		miniz_oxide-0.8.0 \
+		mio-1.0.2 \
+		muldiv-1.0.1 \
+		multimap-0.10.1 \
+		native-tls-0.2.12 \
+		ndk-0.9.0 \
+		ndk-context-0.1.1 \
+		ndk-sys-0.6.0+11769913 \
+		new_debug_unreachable-1.0.6 \
+		nix-0.26.4 \
+		nix-0.30.1 \
+		nom-7.1.3 \
+		noop_proc_macro-0.3.0 \
+		ntapi-0.4.1 \
+		nu-ansi-term-0.50.1 \
+		num-bigint-0.4.6 \
+		num-complex-0.4.6 \
+		num-conv-0.1.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.4 \
+		num_enum_derive-0.7.4 \
+		objc-0.2.7 \
+		objc2-0.6.1 \
+		objc2-audio-toolbox-0.3.1 \
+		objc2-core-audio-0.3.1 \
+		objc2-core-audio-types-0.3.1 \
+		objc2-core-foundation-0.3.1 \
+		objc2-encode-4.1.0 \
+		objc2-foundation-0.3.1 \
+		objc2-io-kit-0.3.1 \
+		object-0.36.3 \
+		ogg_pager-0.7.0 \
+		once_cell-1.19.0 \
+		oorandom-11.1.5 \
+		openssl-0.10.66 \
+		openssl-macros-0.1.1 \
+		openssl-probe-0.1.5 \
+		openssl-sys-0.9.103 \
+		opml-1.1.6 \
+		option-ext-0.2.0 \
+		option-operations-0.5.0 \
+		opusic-sys-0.5.8 \
+		orange-trees-0.1.3 \
+		ordered-stream-0.2.0 \
+		os_str_bytes-6.6.1 \
+		parking-2.2.0 \
+		parking_lot-0.12.4 \
+		parking_lot_core-0.9.11 \
+		paste-1.0.15 \
+		pathdiff-0.2.3 \
+		percent-encoding-2.3.2 \
+		petgraph-0.7.1 \
+		pin-project-1.1.5 \
+		pin-project-internal-1.1.5 \
+		pin-project-lite-0.2.14 \
+		pin-utils-0.1.0 \
+		pinyin-0.10.0 \
+		piper-0.2.4 \
+		pkg-config-0.3.30 \
+		plotters-0.3.7 \
+		plotters-backend-0.3.7 \
+		plotters-svg-0.3.7 \
+		png-0.17.16 \
+		polling-2.8.0 \
+		polling-3.7.3 \
+		pollster-0.3.0 \
+		portable-atomic-1.11.0 \
+		portable-atomic-util-0.2.4 \
+		powerfmt-0.2.0 \
+		ppv-lite86-0.2.21 \
+		pretty_assertions-1.4.1 \
+		prettyplease-0.2.20 \
+		primal-check-0.3.4 \
+		proc-macro-crate-1.3.1 \
+		proc-macro-crate-3.3.0 \
+		proc-macro2-1.0.92 \
+		profiling-1.0.16 \
+		profiling-procmacros-1.0.16 \
+		prost-0.14.1 \
+		prost-build-0.14.1 \
+		prost-derive-0.14.1 \
+		prost-types-0.14.1 \
+		psl-types-2.0.11 \
+		publicsuffix-2.3.0 \
+		pulldown-cmark-0.13.0 \
+		pulldown-cmark-to-cmark-21.0.0 \
+		qoi-0.4.1 \
+		quick-error-2.0.1 \
+		quick-xml-0.37.5 \
+		quick-xml-0.38.3 \
+		quinn-0.11.3 \
+		quinn-proto-0.11.6 \
+		quinn-udp-0.5.4 \
+		quote-1.0.37 \
+		r-efi-5.2.0 \
+		rand-0.8.5 \
+		rand-0.9.2 \
+		rand_chacha-0.3.1 \
+		rand_chacha-0.9.0 \
+		rand_core-0.6.4 \
+		rand_core-0.9.3 \
+		rangemap-1.5.1 \
+		ratatui-0.29.0 \
+		rav1e-0.7.1 \
+		ravif-0.11.11 \
+		rayon-1.10.0 \
+		rayon-core-1.12.1 \
+		redox_syscall-0.5.3 \
+		redox_users-0.5.0 \
+		regex-1.11.2 \
+		regex-automata-0.4.8 \
+		regex-syntax-0.8.5 \
+		reqwest-0.12.23 \
+		rfc822_sanitizer-0.3.6 \
+		rgb-0.8.50 \
+		ring-0.17.14 \
+		ringbuf-0.4.8 \
+		rodio-0.21.1 \
+		rss-2.0.12 \
+		rusqlite-0.37.0 \
+		rustc-demangle-0.1.24 \
+		rustc-hash-2.1.1 \
+		rustfft-6.2.0 \
+		rustix-0.37.27 \
+		rustix-0.38.34 \
+		rustix-1.0.7 \
+		rustls-0.23.12 \
+		rustls-pki-types-1.12.0 \
+		rustls-webpki-0.102.6 \
+		rustversion-1.0.17 \
+		ryu-1.0.18 \
+		same-file-1.0.6 \
+		sanitize-filename-0.6.0 \
+		schannel-0.1.23 \
+		scopeguard-1.2.0 \
+		security-framework-2.11.1 \
+		security-framework-sys-2.11.1 \
+		semver-1.0.26 \
+		serde-1.0.221 \
+		serde_core-1.0.221 \
+		serde_derive-1.0.221 \
+		serde_json-1.0.143 \
+		serde_repr-0.1.19 \
+		serde_spanned-0.6.8 \
+		serde_spanned-1.0.0 \
+		serde_urlencoded-0.7.1 \
+		serde_yaml-0.9.34+deprecated \
+		sha1-0.10.6 \
+		shell-words-1.1.0 \
+		shellexpand-3.1.1 \
+		shlex-1.3.0 \
+		signal-hook-0.3.17 \
+		signal-hook-mio-0.2.4 \
+		signal-hook-registry-1.4.2 \
+		simd-adler32-0.3.7 \
+		simd_helpers-0.1.0 \
+		sixel-rs-0.3.3 \
+		sixel-sys-0.3.1 \
+		slab-0.4.9 \
+		smallvec-1.15.1 \
+		smawk-0.3.2 \
+		socket2-0.4.10 \
+		socket2-0.5.7 \
+		socket2-0.6.0 \
+		soundtouch-0.5.1 \
+		soundtouch-ffi-0.3.0 \
+		souvlaki-0.8.3 \
+		stable_deref_trait-1.2.0 \
+		static_assertions-1.1.0 \
+		stream-download-0.22.4 \
+		strength_reduce-0.2.4 \
+		strsim-0.11.1 \
+		strum-0.26.3 \
+		strum_macros-0.26.4 \
+		subtle-2.6.1 \
+		symphonia-0.5.5 \
+		symphonia-adapter-libopus-0.2.0 \
+		symphonia-bundle-flac-0.5.5 \
+		symphonia-bundle-mp3-0.5.5 \
+		symphonia-codec-aac-0.5.5 \
+		symphonia-codec-adpcm-0.5.5 \
+		symphonia-codec-alac-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-mkv-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.106 \
+		sync_wrapper-1.0.2 \
+		synstructure-0.13.1 \
+		sysinfo-0.36.1 \
+		system-configuration-0.6.1 \
+		system-configuration-sys-0.6.0 \
+		system-deps-6.2.2 \
+		system-deps-7.0.2 \
+		target-lexicon-0.12.16 \
+		tempfile-3.12.0 \
+		termcolor-1.4.1 \
+		textwrap-0.16.2 \
+		thiserror-1.0.63 \
+		thiserror-2.0.16 \
+		thiserror-impl-1.0.63 \
+		thiserror-impl-2.0.16 \
+		tiff-0.9.1 \
+		time-0.3.36 \
+		time-core-0.1.2 \
+		time-macros-0.2.18 \
+		tinystr-0.7.6 \
+		tinytemplate-1.2.1 \
+		tinyvec-1.8.0 \
+		tinyvec_macros-0.1.1 \
+		tokio-1.47.1 \
+		tokio-macros-2.5.0 \
+		tokio-native-tls-0.3.1 \
+		tokio-rustls-0.26.0 \
+		tokio-stream-0.1.17 \
+		tokio-util-0.7.16 \
+		toml-0.8.22 \
+		toml-0.9.5 \
+		toml_datetime-0.6.9 \
+		toml_datetime-0.7.0 \
+		toml_edit-0.19.15 \
+		toml_edit-0.22.26 \
+		toml_parser-1.0.2 \
+		toml_write-0.1.1 \
+		toml_writer-1.0.2 \
+		tonic-0.14.1 \
+		tonic-build-0.14.1 \
+		tonic-prost-0.14.1 \
+		tonic-prost-build-0.14.1 \
+		tower-0.5.2 \
+		tower-http-0.6.6 \
+		tower-layer-0.3.3 \
+		tower-service-0.3.3 \
+		tracing-0.1.40 \
+		tracing-attributes-0.1.27 \
+		tracing-core-0.1.32 \
+		transpose-0.2.3 \
+		try-lock-0.2.5 \
+		tui-realm-stdlib-3.0.0 \
+		tui-realm-treeview-3.0.0 \
+		tuirealm-3.2.0 \
+		tuirealm_derive-2.0.0 \
+		typenum-1.17.0 \
+		uds_windows-1.1.0 \
+		uncased-0.9.10 \
+		unicase-2.8.1 \
+		unicode-ident-1.0.12 \
+		unicode-linebreak-0.1.5 \
+		unicode-segmentation-1.12.0 \
+		unicode-truncate-1.1.0 \
+		unicode-width-0.1.13 \
+		unicode-width-0.2.0 \
+		unsafe-libyaml-0.2.11 \
+		untrusted-0.9.0 \
+		url-2.5.4 \
+		urlencoding-2.1.3 \
+		utf16_iter-1.0.5 \
+		utf8_iter-1.0.4 \
+		utf8parse-0.2.2 \
+		uuid-0.8.2 \
+		v_frame-0.3.8 \
+		vcpkg-0.2.15 \
+		version-compare-0.2.0 \
+		version_check-0.9.5 \
+		viuer-0.9.2 \
+		waker-fn-1.2.0 \
+		walkdir-2.5.0 \
+		want-0.3.1 \
+		wasi-0.11.0+wasi-snapshot-preview1 \
+		wasi-0.14.2+wasi-0.2.4 \
+		wasm-bindgen-0.2.100 \
+		wasm-bindgen-backend-0.2.100 \
+		wasm-bindgen-futures-0.4.43 \
+		wasm-bindgen-macro-0.2.100 \
+		wasm-bindgen-macro-support-0.2.100 \
+		wasm-bindgen-shared-0.2.100 \
+		wasm-streams-0.4.0 \
+		web-sys-0.3.70 \
+		webpki-roots-0.26.3 \
+		webpki-roots-1.0.2 \
+		weezl-0.1.8 \
+		wildmatch-2.4.0 \
+		winapi-0.3.9 \
+		winapi-i686-pc-windows-gnu-0.4.0 \
+		winapi-util-0.1.9 \
+		winapi-x86_64-pc-windows-gnu-0.4.0 \
+		windows-0.44.0 \
+		windows-0.54.0 \
+		windows-0.58.0 \
+		windows-0.61.1 \
+		windows-collections-0.2.0 \
+		windows-core-0.52.0 \
+		windows-core-0.54.0 \
+		windows-core-0.58.0 \
+		windows-core-0.61.0 \
+		windows-future-0.2.0 \
+		windows-implement-0.58.0 \
+		windows-implement-0.60.0 \
+		windows-interface-0.58.0 \
+		windows-interface-0.59.1 \
+		windows-link-0.1.1 \
+		windows-numerics-0.2.0 \
+		windows-registry-0.5.1 \
+		windows-result-0.1.2 \
+		windows-result-0.2.0 \
+		windows-result-0.3.2 \
+		windows-strings-0.1.0 \
+		windows-strings-0.4.0 \
+		windows-sys-0.45.0 \
+		windows-sys-0.48.0 \
+		windows-sys-0.52.0 \
+		windows-sys-0.59.0 \
+		windows-targets-0.42.2 \
+		windows-targets-0.48.5 \
+		windows-targets-0.52.6 \
+		windows_aarch64_gnullvm-0.42.2 \
+		windows_aarch64_gnullvm-0.48.5 \
+		windows_aarch64_gnullvm-0.52.6 \
+		windows_aarch64_msvc-0.42.2 \
+		windows_aarch64_msvc-0.48.5 \
+		windows_aarch64_msvc-0.52.6 \
+		windows_i686_gnu-0.42.2 \
+		windows_i686_gnu-0.48.5 \
+		windows_i686_gnu-0.52.6 \
+		windows_i686_gnullvm-0.52.6 \
+		windows_i686_msvc-0.42.2 \
+		windows_i686_msvc-0.48.5 \
+		windows_i686_msvc-0.52.6 \
+		windows_x86_64_gnu-0.42.2 \
+		windows_x86_64_gnu-0.48.5 \
+		windows_x86_64_gnu-0.52.6 \
+		windows_x86_64_gnullvm-0.42.2 \
+		windows_x86_64_gnullvm-0.48.5 \
+		windows_x86_64_gnullvm-0.52.6 \
+		windows_x86_64_msvc-0.42.2 \
+		windows_x86_64_msvc-0.48.5 \
+		windows_x86_64_msvc-0.52.6 \
+		winnow-0.5.40 \
+		winnow-0.7.10 \
+		wit-bindgen-rt-0.39.0 \
+		write16-1.0.0 \
+		writeable-0.5.5 \
+		xdg-home-1.3.0 \
+		xmlparser-0.13.6 \
+		yansi-1.0.1 \
+		yoke-0.7.5 \
+		yoke-derive-0.7.5 \
+		ytd-rs-0.1.7 \
+		zbus-3.15.2 \
+		zbus_macros-3.15.2 \
+		zbus_names-2.6.1 \
+		zerocopy-0.8.24 \
+		zerocopy-derive-0.8.24 \
+		zerofrom-0.1.6 \
+		zerofrom-derive-0.1.6 \
+		zeroize-1.8.1 \
+		zerovec-0.10.4 \
+		zerovec-derive-0.10.3 \
+		zune-core-0.4.12 \
+		zune-inflate-0.2.54 \
+		zune-jpeg-0.4.13 \
+		zvariant-3.15.2 \
+		zvariant_derive-3.15.2 \
+		zvariant_utils-1.0.1
+
+OPENSSLINC=	/usr/include
+OPENSSLLIB=	/usr/lib
+
+PROGS=		termusic \
+		termusic-server
+
+PLIST_FILES=	${PROGS:S/^/bin\//}
+
+do-install:
+	# workaround for error: found a virtual manifest at `xx` instead of a package manifest
+.for p in ${PROGS}
+	${INSTALL_PROGRAM} \
+		${WRKDIR}/target/release/${p} \
+		${STAGEDIR}${PREFIX}/bin
+.endfor
+
+.include <bsd.port.mk>
diff --git a/multimedia/termusic/distinfo b/multimedia/termusic/distinfo
new file mode 100644
index 000000000000..85c0d0219105
--- /dev/null
+++ b/multimedia/termusic/distinfo
@@ -0,0 +1,1307 @@
+TIMESTAMP = 1774585536
+SHA256 (rust/crates/addr2line-0.24.2.crate) = dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1
+SIZE (rust/crates/addr2line-0.24.2.crate) = 39015
+SHA256 (rust/crates/adler2-2.0.0.crate) = 512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627
+SIZE (rust/crates/adler2-2.0.0.crate) = 13529
+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.3.crate) = 8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916
+SIZE (rust/crates/aho-corasick-1.1.3.crate) = 183311
+SHA256 (rust/crates/aligned-vec-0.5.0.crate) = 4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1
+SIZE (rust/crates/aligned-vec-0.5.0.crate) = 8921
+SHA256 (rust/crates/allocator-api2-0.2.18.crate) = 5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f
+SIZE (rust/crates/allocator-api2-0.2.18.crate) = 62504
+SHA256 (rust/crates/alphanumeric-sort-1.5.3.crate) = d67c60c5f10f11c6ee04de72b2dd98bb9d2548cbc314d22a609bfa8bd9e87e8f
+SIZE (rust/crates/alphanumeric-sort-1.5.3.crate) = 6318
+SHA256 (rust/crates/alsa-0.9.1.crate) = ed7572b7ba83a31e20d1b48970ee402d2e3e0537dcfe0a3ff4d6eb7508617d43
+SIZE (rust/crates/alsa-0.9.1.crate) = 72824
+SHA256 (rust/crates/alsa-sys-0.3.1.crate) = db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527
+SIZE (rust/crates/alsa-sys-0.3.1.crate) = 32748
+SHA256 (rust/crates/android-tzdata-0.1.1.crate) = e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0
+SIZE (rust/crates/android-tzdata-0.1.1.crate) = 7674
+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/anes-0.1.6.crate) = 4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299
+SIZE (rust/crates/anes-0.1.6.crate) = 23857
+SHA256 (rust/crates/ansi_colours-1.2.3.crate) = 14eec43e0298190790f41679fe69ef7a829d2a2ddd78c8c00339e84710e435fe
+SIZE (rust/crates/ansi_colours-1.2.3.crate) = 21802
+SHA256 (rust/crates/anstream-0.6.15.crate) = 64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526
+SIZE (rust/crates/anstream-0.6.15.crate) = 29231
+SHA256 (rust/crates/anstyle-1.0.8.crate) = 1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1
+SIZE (rust/crates/anstyle-1.0.8.crate) = 15771
+SHA256 (rust/crates/anstyle-parse-0.2.5.crate) = eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb
+SIZE (rust/crates/anstyle-parse-0.2.5.crate) = 22680
+SHA256 (rust/crates/anstyle-query-1.1.1.crate) = 6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a
+SIZE (rust/crates/anstyle-query-1.1.1.crate) = 9891
+SHA256 (rust/crates/anstyle-wincon-3.0.4.crate) = 5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8
+SIZE (rust/crates/anstyle-wincon-3.0.4.crate) = 12234
+SHA256 (rust/crates/anyhow-1.0.99.crate) = b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100
+SIZE (rust/crates/anyhow-1.0.99.crate) = 53809
+SHA256 (rust/crates/arbitrary-1.3.2.crate) = 7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110
+SIZE (rust/crates/arbitrary-1.3.2.crate) = 32037
+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/arrayvec-0.7.6.crate) = 7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50
+SIZE (rust/crates/arrayvec-0.7.6.crate) = 31237
+SHA256 (rust/crates/async-broadcast-0.5.1.crate) = 7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b
+SIZE (rust/crates/async-broadcast-0.5.1.crate) = 20134
+SHA256 (rust/crates/async-channel-2.3.1.crate) = 89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a
+SIZE (rust/crates/async-channel-2.3.1.crate) = 14576
+SHA256 (rust/crates/async-compression-0.4.12.crate) = fec134f64e2bc57411226dfc4e52dec859ddfc7e711fc5e07b612584f000e4aa
+SIZE (rust/crates/async-compression-0.4.12.crate) = 109647
+SHA256 (rust/crates/async-executor-1.13.0.crate) = d7ebdfa2ebdab6b1760375fa7d6f382b9f486eac35fc994625a00e89280bdbb7
+SIZE (rust/crates/async-executor-1.13.0.crate) = 27974
+SHA256 (rust/crates/async-fs-1.6.0.crate) = 279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06
+SIZE (rust/crates/async-fs-1.6.0.crate) = 16506
+SHA256 (rust/crates/async-io-1.13.0.crate) = 0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af
+SIZE (rust/crates/async-io-1.13.0.crate) = 37191
+SHA256 (rust/crates/async-io-2.3.4.crate) = 444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8
+SIZE (rust/crates/async-io-2.3.4.crate) = 49145
+SHA256 (rust/crates/async-lock-2.8.0.crate) = 287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b
+SIZE (rust/crates/async-lock-2.8.0.crate) = 29944
+SHA256 (rust/crates/async-lock-3.4.0.crate) = ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18
+SIZE (rust/crates/async-lock-3.4.0.crate) = 34446
+SHA256 (rust/crates/async-process-1.8.1.crate) = ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88
+SIZE (rust/crates/async-process-1.8.1.crate) = 22758
+SHA256 (rust/crates/async-recursion-1.1.1.crate) = 3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11
+SIZE (rust/crates/async-recursion-1.1.1.crate) = 14874
+SHA256 (rust/crates/async-ringbuf-0.3.4.crate) = 5e2495ca646b600f2fb09278bdf28dd2227ad45cab155cd7a25d4fd2b7002952
+SIZE (rust/crates/async-ringbuf-0.3.4.crate) = 16519
+SHA256 (rust/crates/async-signal-0.2.10.crate) = 637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3
+SIZE (rust/crates/async-signal-0.2.10.crate) = 16970
+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.0.crate) = 8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994
+SIZE (rust/crates/atomic-0.6.0.crate) = 12919
+SHA256 (rust/crates/atomic-waker-1.1.2.crate) = 1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0
+SIZE (rust/crates/atomic-waker-1.1.2.crate) = 12422
+SHA256 (rust/crates/autocfg-1.3.0.crate) = 0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0
+SIZE (rust/crates/autocfg-1.3.0.crate) = 16524
+SHA256 (rust/crates/av1-grain-0.2.3.crate) = 6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf
+SIZE (rust/crates/av1-grain-0.2.3.crate) = 34703
+SHA256 (rust/crates/avif-serialize-0.8.2.crate) = e335041290c43101ca215eed6f43ec437eb5a42125573f600fc3fa42b9bddd62
+SIZE (rust/crates/avif-serialize-0.8.2.crate) = 11985
+SHA256 (rust/crates/axum-0.8.1.crate) = 6d6fd624c75e18b3b4c6b9caf42b1afe24437daaee904069137d8bab077be8b8
+SIZE (rust/crates/axum-0.8.1.crate) = 172586
+SHA256 (rust/crates/axum-core-0.5.0.crate) = df1362f362fd16024ae199c1970ce98f9661bf5ef94b9808fee734bc3698b733
+SIZE (rust/crates/axum-core-0.5.0.crate) = 26187
+SHA256 (rust/crates/backtrace-0.3.74.crate) = 8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a
+SIZE (rust/crates/backtrace-0.3.74.crate) = 88516
+SHA256 (rust/crates/base64-0.22.1.crate) = 72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6
+SIZE (rust/crates/base64-0.22.1.crate) = 81597
+SHA256 (rust/crates/bindgen-0.71.1.crate) = 5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3
+SIZE (rust/crates/bindgen-0.71.1.crate) = 237785
+SHA256 (rust/crates/bit_field-0.10.2.crate) = dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61
+SIZE (rust/crates/bit_field-0.10.2.crate) = 10568
+SHA256 (rust/crates/bitflags-1.3.2.crate) = bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a
+SIZE (rust/crates/bitflags-1.3.2.crate) = 23021
+SHA256 (rust/crates/bitflags-2.9.1.crate) = 1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967
+SIZE (rust/crates/bitflags-2.9.1.crate) = 47913
+SHA256 (rust/crates/bitstream-io-2.5.3.crate) = b81e1519b0d82120d2fd469d5bfb2919a9361c48b02d82d04befc1cdd2002452
+SIZE (rust/crates/bitstream-io-2.5.3.crate) = 38245
+SHA256 (rust/crates/block-0.1.6.crate) = 0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a
+SIZE (rust/crates/block-0.1.6.crate) = 4077
+SHA256 (rust/crates/block-buffer-0.10.4.crate) = 3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71
+SIZE (rust/crates/block-buffer-0.10.4.crate) = 10538
+SHA256 (rust/crates/blocking-1.6.1.crate) = 703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea
+SIZE (rust/crates/blocking-1.6.1.crate) = 17788
+SHA256 (rust/crates/bstr-1.10.0.crate) = 40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c
+SIZE (rust/crates/bstr-1.10.0.crate) = 380426
+SHA256 (rust/crates/built-0.7.5.crate) = c360505aed52b7ec96a3636c3f039d99103c37d1d9b4f7a8c743d3ea9ffcd03b
+SIZE (rust/crates/built-0.7.5.crate) = 22319
+SHA256 (rust/crates/bumpalo-3.16.0.crate) = 79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c
+SIZE (rust/crates/bumpalo-3.16.0.crate) = 85677
+SHA256 (rust/crates/bytemuck-1.17.0.crate) = 6fd4c6dcc3b0aea2f5c0b4b82c2b15fe39ddbc76041a310848f4706edf76bb31
+SIZE (rust/crates/bytemuck-1.17.0.crate) = 49872
+SHA256 (rust/crates/byteorder-1.5.0.crate) = 1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b
+SIZE (rust/crates/byteorder-1.5.0.crate) = 23288
+SHA256 (rust/crates/byteorder-lite-0.1.0.crate) = 8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495
+SIZE (rust/crates/byteorder-lite-0.1.0.crate) = 15909
+SHA256 (rust/crates/bytes-1.10.1.crate) = d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a
+SIZE (rust/crates/bytes-1.10.1.crate) = 76779
+SHA256 (rust/crates/bytesize-2.0.1.crate) = a3c8f83209414aacf0eeae3cf730b18d6981697fba62f200fcfb92b9f082acba
+SIZE (rust/crates/bytesize-2.0.1.crate) = 18922
+SHA256 (rust/crates/camino-1.1.9.crate) = 8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3
+SIZE (rust/crates/camino-1.1.9.crate) = 37552
+SHA256 (rust/crates/cassowary-0.3.0.crate) = df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53
+SIZE (rust/crates/cassowary-0.3.0.crate) = 22876
+SHA256 (rust/crates/cast-0.3.0.crate) = 37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5
+SIZE (rust/crates/cast-0.3.0.crate) = 11452
+SHA256 (rust/crates/castaway-0.2.3.crate) = 0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5
+SIZE (rust/crates/castaway-0.2.3.crate) = 11509
+SHA256 (rust/crates/cc-1.2.17.crate) = 1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a
+SIZE (rust/crates/cc-1.2.17.crate) = 105794
+SHA256 (rust/crates/cesu8-1.1.0.crate) = 6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c
+SIZE (rust/crates/cesu8-1.1.0.crate) = 10555
+SHA256 (rust/crates/cexpr-0.6.0.crate) = 6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766
+SIZE (rust/crates/cexpr-0.6.0.crate) = 17966
+SHA256 (rust/crates/cfg-expr-0.15.8.crate) = d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02
+SIZE (rust/crates/cfg-expr-0.15.8.crate) = 42108
+SHA256 (rust/crates/cfg-expr-0.16.0.crate) = 345c78335be0624ed29012dc10c49102196c6882c12dde65d9f35b02da2aada8
+SIZE (rust/crates/cfg-expr-0.16.0.crate) = 42802
+SHA256 (rust/crates/cfg-if-1.0.0.crate) = baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd
+SIZE (rust/crates/cfg-if-1.0.0.crate) = 7934
+SHA256 (rust/crates/cfg_aliases-0.2.1.crate) = 613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724
+SIZE (rust/crates/cfg_aliases-0.2.1.crate) = 6355
+SHA256 (rust/crates/chrono-0.4.41.crate) = c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d
+SIZE (rust/crates/chrono-0.4.41.crate) = 234621
+SHA256 (rust/crates/ciborium-0.2.2.crate) = 42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e
+SIZE (rust/crates/ciborium-0.2.2.crate) = 35611
+SHA256 (rust/crates/ciborium-io-0.2.2.crate) = 05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757
+SIZE (rust/crates/ciborium-io-0.2.2.crate) = 6697
+SHA256 (rust/crates/ciborium-ll-0.2.2.crate) = 57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9
+SIZE (rust/crates/ciborium-ll-0.2.2.crate) = 14695
+SHA256 (rust/crates/clang-sys-1.8.1.crate) = 0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4
+SIZE (rust/crates/clang-sys-1.8.1.crate) = 44009
+SHA256 (rust/crates/clap-4.5.46.crate) = 2c5e4fcf9c21d2e544ca1ee9d8552de13019a42aa7dbf32747fa7aaf1df76e57
+SIZE (rust/crates/clap-4.5.46.crate) = 58332
+SHA256 (rust/crates/clap_builder-4.5.46.crate) = fecb53a0e6fcfb055f686001bc2e2592fa527efaf38dbe81a6a9563562e57d41
+SIZE (rust/crates/clap_builder-4.5.46.crate) = 169831
+SHA256 (rust/crates/clap_derive-4.5.45.crate) = 14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6
+SIZE (rust/crates/clap_derive-4.5.45.crate) = 33545
+SHA256 (rust/crates/clap_lex-0.7.4.crate) = f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6
+SIZE (rust/crates/clap_lex-0.7.4.crate) = 12858
+SHA256 (rust/crates/cocoa-0.24.1.crate) = f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a
+SIZE (rust/crates/cocoa-0.24.1.crate) = 40445
+SHA256 (rust/crates/cocoa-foundation-0.1.2.crate) = 8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7
+SIZE (rust/crates/cocoa-foundation-0.1.2.crate) = 15028
+SHA256 (rust/crates/color_quant-1.1.0.crate) = 3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b
+SIZE (rust/crates/color_quant-1.1.0.crate) = 6649
+SHA256 (rust/crates/colorchoice-1.0.2.crate) = d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0
+SIZE (rust/crates/colorchoice-1.0.2.crate) = 7924
+SHA256 (rust/crates/colored-3.0.0.crate) = fde0e0ec90c9dfb3b4b1a0891a7dcd0e2bffde2f7efed5fe7c9bb00e5bfb915e
+SIZE (rust/crates/colored-3.0.0.crate) = 34497
+SHA256 (rust/crates/combine-4.6.7.crate) = ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd
+SIZE (rust/crates/combine-4.6.7.crate) = 134808
+SHA256 (rust/crates/compact_str-0.8.0.crate) = 6050c3a16ddab2e412160b31f2c871015704239bca62f72f6e5f0be631d3f644
+SIZE (rust/crates/compact_str-0.8.0.crate) = 70994
+SHA256 (rust/crates/concurrent-queue-2.5.0.crate) = 4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973
+SIZE (rust/crates/concurrent-queue-2.5.0.crate) = 22654
+SHA256 (rust/crates/console-0.15.8.crate) = 0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb
+SIZE (rust/crates/console-0.15.8.crate) = 36364
+SHA256 (rust/crates/convert_case-0.7.1.crate) = bb402b8d4c85569410425650ce3eddc7d698ed96d39a73f941b08fb63082f1e7
+SIZE (rust/crates/convert_case-0.7.1.crate) = 23816
+SHA256 (rust/crates/cookie-0.18.1.crate) = 4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747
+SIZE (rust/crates/cookie-0.18.1.crate) = 43551
+SHA256 (rust/crates/cookie_store-0.21.1.crate) = 2eac901828f88a5241ee0600950ab981148a18f2f756900ffba1b125ca6a3ef9
+SIZE (rust/crates/cookie_store-0.21.1.crate) = 34692
+SHA256 (rust/crates/core-foundation-0.9.4.crate) = 91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f
+SIZE (rust/crates/core-foundation-0.9.4.crate) = 27743
+SHA256 (rust/crates/core-foundation-sys-0.8.7.crate) = 773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b
+SIZE (rust/crates/core-foundation-sys-0.8.7.crate) = 37712
+SHA256 (rust/crates/core-graphics-0.22.3.crate) = 2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb
+SIZE (rust/crates/core-graphics-0.22.3.crate) = 29514
+SHA256 (rust/crates/core-graphics-types-0.1.3.crate) = 45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf
+SIZE (rust/crates/core-graphics-types-0.1.3.crate) = 7063
+SHA256 (rust/crates/coreaudio-rs-0.13.0.crate) = 1aae284fbaf7d27aa0e292f7677dfbe26503b0d555026f702940805a630eac17
+SIZE (rust/crates/coreaudio-rs-0.13.0.crate) = 42013
+SHA256 (rust/crates/cpal-0.16.0.crate) = cbd307f43cc2a697e2d1f8bc7a1d824b5269e052209e28883e5bc04d095aaa3f
+SIZE (rust/crates/cpal-0.16.0.crate) = 104465
+SHA256 (rust/crates/cpufeatures-0.2.13.crate) = 51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad
+SIZE (rust/crates/cpufeatures-0.2.13.crate) = 12999
+SHA256 (rust/crates/crc32fast-1.4.2.crate) = a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3
+SIZE (rust/crates/crc32fast-1.4.2.crate) = 38491
+SHA256 (rust/crates/criterion-0.7.0.crate) = e1c047a62b0cc3e145fa84415a3191f628e980b194c2755aa12300a4e6cbd928
+SIZE (rust/crates/criterion-0.7.0.crate) = 119908
+SHA256 (rust/crates/criterion-plot-0.6.0.crate) = 9b1bcc0dc7dfae599d84ad0b1a55f80cde8af3725da8313b528da95ef783e338
+SIZE (rust/crates/criterion-plot-0.6.0.crate) = 24495
+SHA256 (rust/crates/crossbeam-deque-0.8.5.crate) = 613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d
+SIZE (rust/crates/crossbeam-deque-0.8.5.crate) = 21726
+SHA256 (rust/crates/crossbeam-epoch-0.9.18.crate) = 5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e
+SIZE (rust/crates/crossbeam-epoch-0.9.18.crate) = 46875
+SHA256 (rust/crates/crossbeam-utils-0.8.20.crate) = 22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80
+SIZE (rust/crates/crossbeam-utils-0.8.20.crate) = 42487
+SHA256 (rust/crates/crossterm-0.28.1.crate) = 829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6
+SIZE (rust/crates/crossterm-0.28.1.crate) = 132275
+SHA256 (rust/crates/crossterm-0.29.0.crate) = d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b
+SIZE (rust/crates/crossterm-0.29.0.crate) = 136635
+SHA256 (rust/crates/crossterm_winapi-0.9.1.crate) = acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b
+SIZE (rust/crates/crossterm_winapi-0.9.1.crate) = 16027
+SHA256 (rust/crates/crunchy-0.2.2.crate) = 7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7
+SIZE (rust/crates/crunchy-0.2.2.crate) = 2995
+SHA256 (rust/crates/crypto-common-0.1.6.crate) = 1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3
+SIZE (rust/crates/crypto-common-0.1.6.crate) = 8760
+SHA256 (rust/crates/ctrlc-3.4.7.crate) = 46f93780a459b7d656ef7f071fe699c4d3d2cb201c4b24d085b6ddc505276e73
+SIZE (rust/crates/ctrlc-3.4.7.crate) = 14606
+SHA256 (rust/crates/dasp_sample-0.11.0.crate) = 0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f
+SIZE (rust/crates/dasp_sample-0.11.0.crate) = 11617
+SHA256 (rust/crates/data-encoding-2.6.0.crate) = e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2
+SIZE (rust/crates/data-encoding-2.6.0.crate) = 20769
+SHA256 (rust/crates/deranged-0.3.11.crate) = b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4
+SIZE (rust/crates/deranged-0.3.11.crate) = 18043
+SHA256 (rust/crates/derivative-2.2.0.crate) = fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b
+SIZE (rust/crates/derivative-2.2.0.crate) = 48076
+SHA256 (rust/crates/derive_more-2.0.1.crate) = 093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678
+SIZE (rust/crates/derive_more-2.0.1.crate) = 70127
+SHA256 (rust/crates/derive_more-impl-2.0.1.crate) = bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3
+SIZE (rust/crates/derive_more-impl-2.0.1.crate) = 78233
+SHA256 (rust/crates/diff-0.1.13.crate) = 56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8
+SIZE (rust/crates/diff-0.1.13.crate) = 46216
+SHA256 (rust/crates/digest-0.10.7.crate) = 9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292
+SIZE (rust/crates/digest-0.10.7.crate) = 19557
+SHA256 (rust/crates/dirs-6.0.0.crate) = c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e
+SIZE (rust/crates/dirs-6.0.0.crate) = 14190
+SHA256 (rust/crates/dirs-sys-0.5.0.crate) = e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab
+SIZE (rust/crates/dirs-sys-0.5.0.crate) = 10157
+SHA256 (rust/crates/discord-rich-presence-0.2.5.crate) = a75db747ecd252c01bfecaf709b07fcb4c634adf0edb5fed47bc9c3052e7076b
+SIZE (rust/crates/discord-rich-presence-0.2.5.crate) = 8863
+SHA256 (rust/crates/dispatch-0.2.0.crate) = bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b
+SIZE (rust/crates/dispatch-0.2.0.crate) = 10229
+SHA256 (rust/crates/dispatch2-0.3.0.crate) = 89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec
+SIZE (rust/crates/dispatch2-0.3.0.crate) = 54606
*** 1071 LINES SKIPPED ***