git: 793dd0c71831 - main - misc/ttfx: New port: Terminal text effects, a Rust port of terminaltexteffects

From: Hiroki Tagato <tagattie_at_FreeBSD.org>
Date: Tue, 20 Oct 2026 23:53:10 UTC
The branch main has been updated by tagattie:

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

commit 793dd0c71831ddcb9b7fbb71c10fa2ac716027f3
Author:     Jordan Hubbard <jkh@FreeBSD.org>
AuthorDate: 2026-10-01 18:38:15 +0000
Commit:     Hiroki Tagato <tagattie@FreeBSD.org>
CommitDate: 2026-10-20 23:52:47 +0000

    misc/ttfx: New port: Terminal text effects, a Rust port of terminaltexteffects
    
    ttfx renders terminal text effects (decrypt, beams, matrix, and many
    more) from text piped on standard input. It is a Rust port of
    TerminalTextEffects (TTE) shipped as a single binary with no runtime
    dependencies.
    
    WWW: https://github.com/omacom/ttfx
    
    Reported by:    jkh (new maintainer)
    Pull Request:   https://github.com/freebsd/freebsd-ports/pull/630
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
---
 misc/Makefile             |  1 +
 misc/ttfx/Makefile        | 29 +++++++++++++++++++++++
 misc/ttfx/Makefile.crates | 28 ++++++++++++++++++++++
 misc/ttfx/distinfo        | 59 +++++++++++++++++++++++++++++++++++++++++++++++
 misc/ttfx/pkg-descr       |  3 +++
 5 files changed, 120 insertions(+)

diff --git a/misc/Makefile b/misc/Makefile
index be0a515297b8..7e6a689dc098 100644
--- a/misc/Makefile
+++ b/misc/Makefile
@@ -825,6 +825,7 @@
     SUBDIR += toilet
     SUBDIR += translate
     SUBDIR += trurl
+    SUBDIR += ttfx
     SUBDIR += ttyrec
     SUBDIR += tudu
     SUBDIR += tvbrowser
diff --git a/misc/ttfx/Makefile b/misc/ttfx/Makefile
new file mode 100644
index 000000000000..35ef70f14906
--- /dev/null
+++ b/misc/ttfx/Makefile
@@ -0,0 +1,29 @@
+PORTNAME=	ttfx
+DISTVERSIONPREFIX=	v
+DISTVERSION=	0.5.0
+CATEGORIES=	misc
+
+MAINTAINER=	jkh@FreeBSD.org
+COMMENT=	Terminal text effects, a Rust port of terminaltexteffects
+WWW=		https://github.com/omacom/ttfx
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+USES=		cargo
+USE_GITHUB=	yes
+GH_ACCOUNT=	omacom
+
+PLIST_FILES=	bin/${PORTNAME} \
+		share/bash-completion/completions/${PORTNAME} \
+		share/zsh/site-functions/_${PORTNAME}
+
+post-install:
+	@${MKDIR} ${STAGEDIR}${PREFIX}/share/bash-completion/completions \
+		${STAGEDIR}${PREFIX}/share/zsh/site-functions
+	${STAGEDIR}${PREFIX}/bin/${PORTNAME} --print-completion bash > \
+		${STAGEDIR}${PREFIX}/share/bash-completion/completions/${PORTNAME}
+	${STAGEDIR}${PREFIX}/bin/${PORTNAME} --print-completion zsh > \
+		${STAGEDIR}${PREFIX}/share/zsh/site-functions/_${PORTNAME}
+
+.include <bsd.port.mk>
diff --git a/misc/ttfx/Makefile.crates b/misc/ttfx/Makefile.crates
new file mode 100644
index 000000000000..8db287eb95a9
--- /dev/null
+++ b/misc/ttfx/Makefile.crates
@@ -0,0 +1,28 @@
+CARGO_CRATES=	anstream-1.0.0 \
+		anstyle-1.0.14 \
+		anstyle-parse-1.0.0 \
+		anstyle-query-1.1.5 \
+		anstyle-wincon-3.0.11 \
+		bitflags-2.13.1 \
+		clap-4.6.6 \
+		clap_builder-4.6.6 \
+		clap_complete-4.6.9 \
+		clap_derive-4.6.4 \
+		clap_lex-1.1.0 \
+		colorchoice-1.0.5 \
+		errno-0.3.14 \
+		heck-0.5.0 \
+		is_terminal_polyfill-1.70.2 \
+		libc-0.2.189 \
+		linux-raw-sys-0.12.1 \
+		once_cell_polyfill-1.70.2 \
+		proc-macro2-1.0.107 \
+		quote-1.0.47 \
+		rustix-1.1.4 \
+		strsim-0.11.1 \
+		syn-3.0.3 \
+		terminal_size-0.4.4 \
+		unicode-ident-1.0.24 \
+		utf8parse-0.2.2 \
+		windows-link-0.2.1 \
+		windows-sys-0.61.2
diff --git a/misc/ttfx/distinfo b/misc/ttfx/distinfo
new file mode 100644
index 000000000000..4be6f6c6916f
--- /dev/null
+++ b/misc/ttfx/distinfo
@@ -0,0 +1,59 @@
+TIMESTAMP = 1790687926
+SHA256 (rust/crates/anstream-1.0.0.crate) = 824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d
+SIZE (rust/crates/anstream-1.0.0.crate) = 28916
+SHA256 (rust/crates/anstyle-1.0.14.crate) = 940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000
+SIZE (rust/crates/anstyle-1.0.14.crate) = 17787
+SHA256 (rust/crates/anstyle-parse-1.0.0.crate) = 52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e
+SIZE (rust/crates/anstyle-parse-1.0.0.crate) = 22042
+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/bitflags-2.13.1.crate) = b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da
+SIZE (rust/crates/bitflags-2.13.1.crate) = 51395
+SHA256 (rust/crates/clap-4.6.6.crate) = 473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca
+SIZE (rust/crates/clap-4.6.6.crate) = 64815
+SHA256 (rust/crates/clap_builder-4.6.6.crate) = 7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889
+SIZE (rust/crates/clap_builder-4.6.6.crate) = 171756
+SHA256 (rust/crates/clap_complete-4.6.9.crate) = 3be2ad0423bdbbb0e25bc89add796f3559706d4a95e1bc98e4d9662a957b6a19
+SIZE (rust/crates/clap_complete-4.6.9.crate) = 51920
+SHA256 (rust/crates/clap_derive-4.6.4.crate) = d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061
+SIZE (rust/crates/clap_derive-4.6.4.crate) = 33533
+SHA256 (rust/crates/clap_lex-1.1.0.crate) = c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9
+SIZE (rust/crates/clap_lex-1.1.0.crate) = 13470
+SHA256 (rust/crates/colorchoice-1.0.5.crate) = 1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570
+SIZE (rust/crates/colorchoice-1.0.5.crate) = 8187
+SHA256 (rust/crates/errno-0.3.14.crate) = 39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb
+SIZE (rust/crates/errno-0.3.14.crate) = 12002
+SHA256 (rust/crates/heck-0.5.0.crate) = 2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea
+SIZE (rust/crates/heck-0.5.0.crate) = 11517
+SHA256 (rust/crates/is_terminal_polyfill-1.70.2.crate) = a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695
+SIZE (rust/crates/is_terminal_polyfill-1.70.2.crate) = 7548
+SHA256 (rust/crates/libc-0.2.189.crate) = 3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2
+SIZE (rust/crates/libc-0.2.189.crate) = 851502
+SHA256 (rust/crates/linux-raw-sys-0.12.1.crate) = 32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53
+SIZE (rust/crates/linux-raw-sys-0.12.1.crate) = 3006116
+SHA256 (rust/crates/once_cell_polyfill-1.70.2.crate) = 384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe
+SIZE (rust/crates/once_cell_polyfill-1.70.2.crate) = 7448
+SHA256 (rust/crates/proc-macro2-1.0.107.crate) = 985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9
+SIZE (rust/crates/proc-macro2-1.0.107.crate) = 59588
+SHA256 (rust/crates/quote-1.0.47.crate) = 1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001
+SIZE (rust/crates/quote-1.0.47.crate) = 31622
+SHA256 (rust/crates/rustix-1.1.4.crate) = b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190
+SIZE (rust/crates/rustix-1.1.4.crate) = 425241
+SHA256 (rust/crates/strsim-0.11.1.crate) = 7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f
+SIZE (rust/crates/strsim-0.11.1.crate) = 14266
+SHA256 (rust/crates/syn-3.0.3.crate) = 53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3
+SIZE (rust/crates/syn-3.0.3.crate) = 312999
+SHA256 (rust/crates/terminal_size-0.4.4.crate) = 230a1b821ccbd75b185820a1f1ff7b14d21da1e442e22c0863ea5f08771a8874
+SIZE (rust/crates/terminal_size-0.4.4.crate) = 10022
+SHA256 (rust/crates/unicode-ident-1.0.24.crate) = e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75
+SIZE (rust/crates/unicode-ident-1.0.24.crate) = 49298
+SHA256 (rust/crates/utf8parse-0.2.2.crate) = 06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821
+SIZE (rust/crates/utf8parse-0.2.2.crate) = 13499
+SHA256 (rust/crates/windows-link-0.2.1.crate) = f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5
+SIZE (rust/crates/windows-link-0.2.1.crate) = 6133
+SHA256 (rust/crates/windows-sys-0.61.2.crate) = ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc
+SIZE (rust/crates/windows-sys-0.61.2.crate) = 2517186
+SHA256 (omacom-ttfx-v0.5.0_GH0.tar.gz) = 2882c7e47011a95f4d136303f7320da71613299840f67f88fd1385ef53d5f2a0
+SIZE (omacom-ttfx-v0.5.0_GH0.tar.gz) = 5876786
diff --git a/misc/ttfx/pkg-descr b/misc/ttfx/pkg-descr
new file mode 100644
index 000000000000..b9ba28dcab85
--- /dev/null
+++ b/misc/ttfx/pkg-descr
@@ -0,0 +1,3 @@
+ttfx renders terminal text effects (decrypt, beams, matrix, and many more)
+from text piped on standard input. It is a Rust port of TerminalTextEffects
+(TTE) shipped as a single binary with no runtime dependencies.