summaryrefslogtreecommitdiff
path: root/net-nntp
diff options
context:
space:
mode:
authorroot <root@alpha.trunkmasters.com>2026-06-12 19:09:37 -0500
committerroot <root@alpha.trunkmasters.com>2026-06-12 19:09:37 -0500
commitb590c8d7572b727d565cc0b8ff660d43569845de (patch)
tree06f7a4102ea4e845df8b66660f252920d52952f9 /net-nntp
parent24f9cbfc4c34fdb6a6e03311674414e881ceab47 (diff)
downloadbaldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.tar.gz
baldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.tar.xz
baldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.zip
Adding metadata
Diffstat (limited to 'net-nntp')
-rw-r--r--net-nntp/leafnode/Manifest2
-rw-r--r--net-nntp/leafnode/files/fetchnews.cron10
-rw-r--r--net-nntp/leafnode/files/leafnode-1.11.11-checkpeerlocal_ipv6_fix.patch19
-rw-r--r--net-nntp/leafnode/files/leafnode-1.11.11-configure.patch12
-rw-r--r--net-nntp/leafnode/files/leafnode.xinetd12
-rw-r--r--net-nntp/leafnode/files/texpire.cron10
-rw-r--r--net-nntp/leafnode/leafnode-1.11.11-r2.ebuild62
-rw-r--r--net-nntp/leafnode/leafnode-1.12.0-r1.ebuild57
-rw-r--r--net-nntp/leafnode/metadata.xml8
-rw-r--r--net-nntp/newspost/Manifest1
-rw-r--r--net-nntp/newspost/files/CAN-2005-0101.patch11
-rw-r--r--net-nntp/newspost/files/newspost-2.1.1-c23.patch309
-rw-r--r--net-nntp/newspost/files/newspost-2.1.1-glibc-2.10.patch53
-rw-r--r--net-nntp/newspost/files/newspost-2.1.1-nntp.patch69
-rw-r--r--net-nntp/newspost/metadata.xml5
-rw-r--r--net-nntp/newspost/newspost-2.1.1-r3.ebuild38
-rw-r--r--net-nntp/nzbget/Manifest8
-rw-r--r--net-nntp/nzbget/files/nzbget-24.6-build-with-par2-turbo-offline.patch17
-rw-r--r--net-nntp/nzbget/files/nzbget-25.3-build-with-par2-turbo-offline.patch17
-rw-r--r--net-nntp/nzbget/files/nzbget-26.0-fix-include-order.patch29
-rw-r--r--net-nntp/nzbget/files/nzbget-26.1-build-with-par2-turbo-offline.patch17
-rw-r--r--net-nntp/nzbget/files/nzbget-26.1-build-with-rapidyenc-offline.patch17
-rw-r--r--net-nntp/nzbget/files/nzbget-26.1-fix-include-order.patch13
-rw-r--r--net-nntp/nzbget/files/nzbget.confd15
-rw-r--r--net-nntp/nzbget/files/nzbget.initd-r128
-rw-r--r--net-nntp/nzbget/files/nzbget.service18
-rw-r--r--net-nntp/nzbget/metadata.xml19
-rw-r--r--net-nntp/nzbget/nzbget-25.0.ebuild120
-rw-r--r--net-nntp/nzbget/nzbget-25.4.ebuild120
-rw-r--r--net-nntp/nzbget/nzbget-26.0.ebuild122
-rw-r--r--net-nntp/nzbget/nzbget-26.1.ebuild129
-rw-r--r--net-nntp/sabnzbd/Manifest2
-rw-r--r--net-nntp/sabnzbd/files/sabnzbd-r1.ini12
-rw-r--r--net-nntp/sabnzbd/files/sabnzbd-r1.initd71
-rw-r--r--net-nntp/sabnzbd/files/sabnzbd.confd6
-rw-r--r--net-nntp/sabnzbd/files/sabnzbd_at.service10
-rw-r--r--net-nntp/sabnzbd/metadata.xml16
-rw-r--r--net-nntp/sabnzbd/sabnzbd-4.5.5.ebuild178
-rw-r--r--net-nntp/sabnzbd/sabnzbd-5.0.1.ebuild156
-rw-r--r--net-nntp/suck/Manifest1
-rw-r--r--net-nntp/suck/metadata.xml13
-rw-r--r--net-nntp/suck/suck-4.3.5.ebuild69
-rw-r--r--net-nntp/tin/Manifest1
-rw-r--r--net-nntp/tin/metadata.xml13
-rw-r--r--net-nntp/tin/tin-2.6.4.ebuild128
45 files changed, 2043 insertions, 0 deletions
diff --git a/net-nntp/leafnode/Manifest b/net-nntp/leafnode/Manifest
new file mode 100644
index 000000000000..3f782a13c138
--- /dev/null
+++ b/net-nntp/leafnode/Manifest
@@ -0,0 +1,2 @@
+DIST leafnode-1.11.11.tar.xz 453396 BLAKE2B 70471c7a68dd8c679d119bbca28c0073d78b3d577d3d64aa22540939125aa0bba464e161b6f24d78b6af771df2e0a8b9313c547e3469c4c9b406f7180a4564ec SHA512 a031306389c2c85777c6e9fc3c8529a5ef420e95be301ee60189f20db10cd8cf9328fac8adcd7f56b96d0e4a9c9c9a0c036775e604bd8f6749e5facc8e8228e7
+DIST leafnode-1.12.0.tar.xz 464572 BLAKE2B 25e86ed87e81fb8551fd7b613464d1989eef896bdad585b8d5a94b311402856f336e027c5d56a37a4f488f2a3d5531f8763add2ae4582f2c310e5581dd73de10 SHA512 99cc49b4cbfb6b6d5fdcb64fcc8b77aabd6b675cf6ea51e2aaf275830014171c408f21fd88729c5422b5845bcd27fcf9a1640f54e449f7fbe5d956a05afe10d7
diff --git a/net-nntp/leafnode/files/fetchnews.cron b/net-nntp/leafnode/files/fetchnews.cron
new file mode 100644
index 000000000000..cd4569e6d656
--- /dev/null
+++ b/net-nntp/leafnode/files/fetchnews.cron
@@ -0,0 +1,10 @@
+#!/bin/sh
+#
+# Uncomment the following if you want to regularly
+# fetch new messages from your news server.
+#
+#
+# This is part of the leafnode package.
+#
+
+#/usr/sbin/fetchnews
diff --git a/net-nntp/leafnode/files/leafnode-1.11.11-checkpeerlocal_ipv6_fix.patch b/net-nntp/leafnode/files/leafnode-1.11.11-checkpeerlocal_ipv6_fix.patch
new file mode 100644
index 000000000000..ef215e4c1857
--- /dev/null
+++ b/net-nntp/leafnode/files/leafnode-1.11.11-checkpeerlocal_ipv6_fix.patch
@@ -0,0 +1,19 @@
+diff -x '*~' -purN a/checkpeerlocal.c b/checkpeerlocal.c
+--- a/checkpeerlocal.c 2015-08-25 00:03:26.000000000 +0200
++++ b/checkpeerlocal.c 2017-07-14 20:12:26.109653383 +0200
+@@ -208,6 +208,7 @@ int checkpeerlocal(int sock)
+ }
+ #endif
+
++#ifdef HAVE_IPV6
+ if (IN6_IS_ADDR_V4MAPPED(&addr.sin6.sin6_addr)) {
+ /* map to IPv4 */
+ struct sockaddr_in si;
+@@ -216,6 +217,7 @@ int checkpeerlocal(int sock)
+ memcpy(&addr.sin, &si, sizeof(struct sockaddr_in));
+ D(pat(&addr.sa));
+ }
++#endif
+
+ if (getifaddrs(&ifap) != 0) {
+ D(printf("getifaddrs failed: %s\n", strerror(errno)));
diff --git a/net-nntp/leafnode/files/leafnode-1.11.11-configure.patch b/net-nntp/leafnode/files/leafnode-1.11.11-configure.patch
new file mode 100644
index 000000000000..bf27312579ce
--- /dev/null
+++ b/net-nntp/leafnode/files/leafnode-1.11.11-configure.patch
@@ -0,0 +1,12 @@
+Fix handwritten check for SIOCGIFALIAS on FreeBSD
+https://bugs.gentoo.org/900268
+--- a/configure.ac
++++ b/configure.ac
+@@ -413,6 +413,7 @@
+ #include <stddef.h>
+ #include <sys/types.h>
+ #include <sys/socket.h>
++ #include <sys/ioctl.h>
+ #ifdef HAVE_SYS_SOCKIO_H
+ #include <sys/sockio.h>
+ #endif
diff --git a/net-nntp/leafnode/files/leafnode.xinetd b/net-nntp/leafnode/files/leafnode.xinetd
new file mode 100644
index 000000000000..fc36ecaaaa03
--- /dev/null
+++ b/net-nntp/leafnode/files/leafnode.xinetd
@@ -0,0 +1,12 @@
+# default: off
+# description: Leafnode - accepts connections on port 119 (NNTP)
+
+service nntp
+{
+ socket_type = stream
+ protocol = tcp
+ wait = no
+ user = news
+ server = /usr/sbin/leafnode
+ disable = yes
+}
diff --git a/net-nntp/leafnode/files/texpire.cron b/net-nntp/leafnode/files/texpire.cron
new file mode 100644
index 000000000000..643da1ee9000
--- /dev/null
+++ b/net-nntp/leafnode/files/texpire.cron
@@ -0,0 +1,10 @@
+#!/bin/sh
+#
+# Uncomment the following if you want to
+# clean up your news spool regularly.
+#
+#
+# This is part of the leafnode package.
+#
+
+#/usr/sbin/texpire
diff --git a/net-nntp/leafnode/leafnode-1.11.11-r2.ebuild b/net-nntp/leafnode/leafnode-1.11.11-r2.ebuild
new file mode 100644
index 000000000000..2e28120642b1
--- /dev/null
+++ b/net-nntp/leafnode/leafnode-1.11.11-r2.ebuild
@@ -0,0 +1,62 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="A USENET software package designed for small sites"
+HOMEPAGE="http://leafnode.sourceforge.net/"
+SRC_URI="https://downloads.sourceforge.net/${PN}/${P}.tar.xz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 ppc x86"
+IUSE="ipv6"
+
+DEPEND=">=dev-libs/libpcre-3.9"
+RDEPEND="${DEPEND}
+ virtual/inetd"
+DOCS=( CREDITS ChangeLog FAQ.txt FAQ.pdf INSTALL NEWS README-daemontools \
+ UNINSTALL-daemontools README README-MAINTAINER README-FQDN )
+
+PATCHES=(
+ "${FILESDIR}/${P}-checkpeerlocal_ipv6_fix.patch"
+ "${FILESDIR}/${PN}-1.11.11-configure.patch"
+)
+
+src_prepare() {
+ default
+
+ # bug https://bugs.gentoo.org/900268
+ eautoreconf
+}
+
+src_configure() {
+ econf \
+ --sysconfdir=/etc/leafnode \
+ --localstatedir=/var \
+ --with-spooldir=/var/spool/news \
+ $(use_with ipv6)
+}
+
+src_install() {
+ default
+
+ keepdir \
+ /var/lib/news \
+ /var/spool/news/{failed.postings,interesting.groups,leaf.node,out.going,temp.files} \
+ /var/spool/news/message.id/{0,1,2,3,4,5,6,7,8,9}{0,1,2,3,4,5,6,7,8,9}{0,1,2,3,4,5,6,7,8,9}
+
+ fowners -R news:news /var/{lib,spool}/news
+
+ insinto /etc/xinetd.d
+ newins "${FILESDIR}"/leafnode.xinetd leafnode-nntp
+
+ exeinto /etc/cron.hourly
+ newexe "${FILESDIR}"/fetchnews.cron fetchnews
+ exeinto /etc/cron.daily
+ newexe "${FILESDIR}"/texpire.cron texpire
+
+ dodoc FAQ.html FAQ.xml README-FQDN.html
+}
diff --git a/net-nntp/leafnode/leafnode-1.12.0-r1.ebuild b/net-nntp/leafnode/leafnode-1.12.0-r1.ebuild
new file mode 100644
index 000000000000..3e7f21c21130
--- /dev/null
+++ b/net-nntp/leafnode/leafnode-1.12.0-r1.ebuild
@@ -0,0 +1,57 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="A USENET software package designed for small sites"
+HOMEPAGE="https://leafnode.sourceforge.io/"
+SRC_URI="https://downloads.sourceforge.net/${PN}/${P}.tar.xz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~x86"
+
+DEPEND=">=dev-libs/libpcre2-10"
+RDEPEND="${DEPEND}
+ virtual/inetd"
+DOCS=( CREDITS ChangeLog FAQ.txt FAQ.pdf INSTALL NEWS UNINSTALL-daemontools README README-MAINTAINER README-FQDN )
+
+PATCHES=( "${FILESDIR}/${PN}-1.11.11-configure.patch" )
+
+src_prepare() {
+ default
+
+ # bug https://bugs.gentoo.org/900268
+ eautoreconf
+}
+
+src_configure() {
+ econf \
+ --sysconfdir=/etc/leafnode \
+ --localstatedir=/var \
+ --with-spooldir=/var/spool/news \
+ --with-ipv6
+}
+
+src_install() {
+ default
+
+ keepdir \
+ /var/lib/news \
+ /var/spool/news/{failed.postings,interesting.groups,leaf.node,out.going,temp.files} \
+ /var/spool/news/message.id/{0,1,2,3,4,5,6,7,8,9}{0,1,2,3,4,5,6,7,8,9}{0,1,2,3,4,5,6,7,8,9}
+
+ fowners -R news:news /var/{lib,spool}/news
+
+ insinto /etc/xinetd.d
+ newins "${FILESDIR}"/leafnode.xinetd leafnode-nntp
+
+ exeinto /etc/cron.hourly
+ newexe "${FILESDIR}"/fetchnews.cron fetchnews
+ exeinto /etc/cron.daily
+ newexe "${FILESDIR}"/texpire.cron texpire
+
+ dodoc FAQ.html FAQ.xml README-FQDN.html
+}
diff --git a/net-nntp/leafnode/metadata.xml b/net-nntp/leafnode/metadata.xml
new file mode 100644
index 000000000000..3302b4427264
--- /dev/null
+++ b/net-nntp/leafnode/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:leafnode:leafnode</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-nntp/newspost/Manifest b/net-nntp/newspost/Manifest
new file mode 100644
index 000000000000..efbe5818568f
--- /dev/null
+++ b/net-nntp/newspost/Manifest
@@ -0,0 +1 @@
+DIST newspost-2.1.1.tar.gz 61412 BLAKE2B f5dad9ff397ed8536961c7364b9ade1e325bda8fa2fbd2e874c4db022112d45accb1d7800fd0c52eed5a17cc7e9298600b9ec6a6e95eccb560090f0c42d5de57 SHA512 d7f5b583ef5619a65e87f2ce2edbad307d60da7f29e5c6bef8eaa7c757f97f82f08654409a75ea7b28e5575fd267af57cbc170f467f6737f701bfbd6bd4b2f66
diff --git a/net-nntp/newspost/files/CAN-2005-0101.patch b/net-nntp/newspost/files/CAN-2005-0101.patch
new file mode 100644
index 000000000000..c81936be61ba
--- /dev/null
+++ b/net-nntp/newspost/files/CAN-2005-0101.patch
@@ -0,0 +1,11 @@
+--- a/base/socket.c
++++ b/base/socket.c
+@@ -126,7 +126,7 @@
+
+ i = 0;
+ pi = buffer;
+- while (TRUE) {
++ while (read_count < STRING_BUFSIZE - 1) {
+ retval = read(sockfd, pi, 1);
+ if(retval < 0)
+ ui_socket_error(errno);
diff --git a/net-nntp/newspost/files/newspost-2.1.1-c23.patch b/net-nntp/newspost/files/newspost-2.1.1-c23.patch
new file mode 100644
index 000000000000..a17e6b23f93b
--- /dev/null
+++ b/net-nntp/newspost/files/newspost-2.1.1-c23.patch
@@ -0,0 +1,309 @@
+file_entry_alloc takes no argument and most callers pass none. Also, add
+modern definitions.
+
+https://bugs.gentoo.org/944984
+--- a/base/newspost.c
++++ b/base/newspost.c
+@@ -108,7 +108,7 @@ static int encode_and_post(newspost_data *data, SList *file_list,
+ else {
+ /* post any sfv files... */
+ if (data->sfv != NULL) {
+- file_data = file_entry_alloc(file_data);
++ file_data = file_entry_alloc();
+ file_data->filename =
+ buff_create(file_data->filename, "%s", data->sfv->data);
+ if (stat(data->sfv->data, &file_data->fileinfo) == -1)
+--- a/base/nntp.c
++++ b/base/nntp.c
+@@ -73,7 +73,8 @@ boolean nntp_logon(newspost_data *data) {
+ return TRUE;
+ }
+
+-void nntp_logoff() {
++void
++nntp_logoff (void) {
+ char tmpbuffer[STRING_BUFSIZE];
+ nntp_issue_command("QUIT");
+ nntp_get_response(tmpbuffer);
+--- a/base/socket.c
++++ b/base/socket.c
+@@ -98,7 +98,8 @@ defined(__SVR4) || defined(__svr4__))
+ return 0;
+ }
+
+-void socket_close() {
++void
++socket_close (void) {
+ if (sockfd >= 0)
+ close(sockfd);
+ }
+--- a/parchive/md5.c
++++ b/parchive/md5.c
+@@ -102,9 +102,7 @@ static void md5_process_bytes (const void *buffer, size_t len,
+ resulting message digest number will be written into the 16 bytes
+ beginning at RESBLOCK. */
+ i64
+-md5_stream (stream, resblock)
+- FILE *stream;
+- void *resblock;
++md5_stream (FILE *stream, void *resblock)
+ {
+ /* Important: BLOCKSIZE must be a multiple of 64. */
+ #define BLOCKSIZE 4096
+@@ -165,10 +163,7 @@ md5_stream (stream, resblock)
+ output yields to the wanted ASCII representation of the message
+ digest. */
+ void *
+-md5_buffer (buffer, len, resblock)
+- const char *buffer;
+- size_t len;
+- void *resblock;
++md5_buffer (const char *buffer, size_t len, void *resblock)
+ {
+ struct md5_ctx ctx;
+
+@@ -189,9 +184,8 @@ md5_buffer (buffer, len, resblock)
+
+ /* Initialize structure containing state of computation.
+ (RFC 1321, 3.3: Step 3) */
+-static void
+-md5_init_ctx (ctx)
+- struct md5_ctx *ctx;
++static void
++md5_init_ctx (struct md5_ctx *ctx)
+ {
+ ctx->A = 0x67452301;
+ ctx->B = 0xefcdab89;
+@@ -208,9 +202,7 @@ md5_init_ctx (ctx)
+ IMPORTANT: On some systems it is required that RESBUF is correctly
+ aligned for a 32 bits value. */
+ static void *
+-md5_read_ctx (ctx, resbuf)
+- const struct md5_ctx *ctx;
+- void *resbuf;
++md5_read_ctx (const struct md5_ctx *ctx, void *resbuf)
+ {
+ u8 *rb = resbuf;
+ u32 v;
+@@ -241,9 +233,7 @@ md5_read_ctx (ctx, resbuf)
+ IMPORTANT: On some systems it is required that RESBUF is correctly
+ aligned for a 32 bits value. */
+ static void *
+-md5_finish_ctx (ctx, resbuf)
+- struct md5_ctx *ctx;
+- void *resbuf;
++md5_finish_ctx (struct md5_ctx *ctx, void *resbuf)
+ {
+ /* Take yet unprocessed bytes into account. */
+ u32 bytes = ctx->buflen;
+@@ -277,11 +267,8 @@ md5_finish_ctx (ctx, resbuf)
+ return md5_read_ctx (ctx, resbuf);
+ }
+
+-static void
+-md5_process_bytes (buffer, len, ctx)
+- const void *buffer;
+- size_t len;
+- struct md5_ctx *ctx;
++static void
++md5_process_bytes (const void *buffer, size_t len, struct md5_ctx *ctx)
+ {
+ /* When we already have some bits in our internal buffer concatenate
+ both inputs first. */
+@@ -334,11 +321,8 @@ md5_process_bytes (buffer, len, ctx)
+ /* Process LEN bytes of BUFFER, accumulating context into CTX.
+ It is assumed that LEN % 64 == 0. */
+
+-static void
+-md5_process_block (buffer, len, ctx)
+- const void *buffer;
+- size_t len;
+- struct md5_ctx *ctx;
++static void
++md5_process_block (const void *buffer, size_t len, struct md5_ctx *ctx)
+ {
+ u32 correct_words[16];
+ const u8 *words = buffer;
+--- a/ui/main.c
++++ b/ui/main.c
+@@ -31,7 +31,7 @@ boolean temporary_prefix = FALSE;
+
+ const char *EDITOR = NULL;
+
+-static void signal_handler();
++static void signal_handler(int signum);
+
+ int main(int argc, char **argv) {
+ newspost_data main_data;
+@@ -159,7 +159,7 @@ int main(int argc, char **argv) {
+ tmpdir_ptr = main_data.tmpdir;
+
+ if ((main_data.text == TRUE) && (file_list == NULL)) {
+- file_data = file_entry_alloc(file_data);
++ file_data = file_entry_alloc();
+ file_data->filename = buff_create(file_data->filename,
+ "%s/message", main_data.tmpdir->data);
+ command = buff_create(command, "%s %s",
+@@ -324,7 +324,7 @@ int main(int argc, char **argv) {
+ }
+ }
+
+-static void signal_handler() {
++static void signal_handler(int signum) {
+ Buff *command = NULL;
+
+ fprintf(stderr, "\nSignal received");
+--- a/ui/options.c
++++ b/ui/options.c
+@@ -890,7 +890,8 @@ void check_options(newspost_data *data) {
+ exit(EXIT_BAD_HEADER_LINE);
+ }
+
+-void print_help() {
++void
++print_help (void) {
+ version_info();
+ printf("\n\nUsage: newspost [OPTIONS [ARGUMENTS]]"
+ " file1 file2 file3...");
+@@ -1123,7 +1124,8 @@ static void parse_delay_option(const char *option) {
+ post_delay = 3;
+ }
+
+-static void version_info() {
++static void
++version_info (void) {
+ printf("\n" NEWSPOSTNAME " version " VERSION
+ "\nCopyright (C) 2001 - 2003 Jim Faulkner"
+ "\nThis is free software; see the source for"
+--- a/ui/ui.c
++++ b/ui/ui.c
+@@ -52,7 +52,8 @@ void ui_tmpdir_create_failed(const char *dirname, int error) {
+ dirname, strerror(error));
+ }
+
+-void ui_sfv_gen_start() {
++void
++ui_sfv_gen_start (void) {
+ printf("\nGenerating SFV file...");
+ fflush(stdout);
+ }
+@@ -68,12 +69,14 @@ void ui_sfv_gen_error(const char *filename, int error) {
+ (error == 0) ? strerror(error) : "", filename);
+ }
+
+-void ui_crc_start() {
++void
++ui_crc_start (void) {
+ printf("\nCalculating CRCs...");
+ fflush(stdout);
+ }
+
+-void ui_crc_done() {
++void
++ui_crc_done (void) {
+ printf(" done");
+ fflush(stdout);
+ }
+@@ -84,12 +87,14 @@ void ui_crc_error(const char *filename, int error) {
+ (error == 0) ? strerror(error) : "", filename);
+ }
+
+-void ui_par_gen_start() {
++void
++ui_par_gen_start (void) {
+ printf("\nAdding files to PAR archive...");
+ fflush(stdout);
+ }
+
+-void ui_par_gen_error() {
++void
++ui_par_gen_error (void) {
+ fprintf(stderr,
+ "\nWARNING: Error while creating PAR files");
+ }
+@@ -99,7 +104,8 @@ void ui_par_file_add_done(const char *filename) {
+ fflush(stdout);
+ }
+
+-void ui_par_volume_create_start() {
++void
++ui_par_volume_create_start (void) {
+ printf("\nCreating PAR volumes...");
+ fflush(stdout);
+ }
+@@ -244,7 +250,8 @@ void ui_socket_connect_start(const char *servername) {
+ }
+ }
+
+-void ui_socket_connect_done() {
++void
++ui_socket_connect_done (void) {
+ if (verbosity == TRUE) {
+ printf(" done.");
+ fflush(stdout);
+@@ -258,7 +265,8 @@ void ui_nntp_logon_start(const char *servername) {
+ }
+ }
+
+-void ui_nntp_logon_done() {
++void
++ui_nntp_logon_done (void) {
+ if (verbosity == TRUE) {
+ printf(" done.\n");
+ fflush(stdout);
+@@ -300,7 +308,8 @@ void ui_posting_prefix_start(const char *filename) {
+ fflush(stdout);
+ }
+
+-void ui_posting_prefix_done() {
++void
++ui_posting_prefix_done (void) {
+ files_posted++;
+ printf(" done.\n");
+ fflush(stdout);
+@@ -308,7 +317,8 @@ void ui_posting_prefix_done() {
+
+ /* when the prefix does not get posted
+ i.e. is the prefix a text file? */
+-void ui_posting_prefix_failed() {
++void
++ui_posting_prefix_failed (void) {
+ fprintf(stderr,
+ "\nWARNING: Posting failed. Is it really a text file?");
+ }
+@@ -404,7 +414,8 @@ void ui_nntp_posting_failed(const char *response) {
+ "\nWARNING: Posting failed: %s", response);
+ }
+
+-void ui_nntp_posting_retry() {
++void
++ui_nntp_posting_retry (void) {
+ fprintf(stderr,
+ "Retrying");
+ }
+@@ -490,11 +501,13 @@ void ui_posting_file_start(newspost_data *data, file_entry *filedata,
+ fflush(stdout);
+ }
+
+-void ui_posting_file_done() {
++void
++ui_posting_file_done (void) {
+ files_posted++;
+ }
+
+-void ui_post_done() {
++void
++ui_post_done (void) {
+ time_t totaltime = (time(NULL) - start_time);
+ long totalbps;
+
+@@ -525,7 +538,8 @@ void ui_generic_error(int error) {
+ "\nWARNING: %s", strerror(error));
+ }
+
+-void ui_too_many_failures() {
++void
++ui_too_many_failures (void) {
+ fprintf(stderr, "\nToo many failures."
+ "\nGiving up.\n");
+ exit(EXIT_POSTING_FAILED);
diff --git a/net-nntp/newspost/files/newspost-2.1.1-glibc-2.10.patch b/net-nntp/newspost/files/newspost-2.1.1-glibc-2.10.patch
new file mode 100644
index 000000000000..8778ab41c253
--- /dev/null
+++ b/net-nntp/newspost/files/newspost-2.1.1-glibc-2.10.patch
@@ -0,0 +1,53 @@
+--- a/base/newspost.c
++++ b/base/newspost.c
+@@ -342,7 +342,7 @@
+ file = fopen(filename, "r");
+ if (file != NULL) {
+ while (!feof(file)) {
+- line = getline(line, file);
++ line = get_line(line, file);
+ if(line == NULL){
+ text_buffer = buff_add(text_buffer, "\r\n");
+ continue;
+--- a/base/utils.c
++++ b/base/utils.c
+@@ -43,7 +43,7 @@
+ return NULL;
+ }
+
+-Buff * getline(Buff *buff, FILE *file){
++Buff * get_line(Buff *buff, FILE *file){
+ int c = fgetc(file);
+ buff = buff_free(buff);
+ while(TRUE){
+--- a/base/utils.h
++++ b/base/utils.h
+@@ -26,7 +26,7 @@
+ file_entry * file_entry_alloc();
+ file_entry * file_entry_free(file_entry *fe);
+
+-Buff * getline(Buff *buff, FILE *file);
++Buff * get_line(Buff *buff, FILE *file);
+ Buff *buff_add(Buff *buff, char *data, ... );
+ Buff * buff_free(Buff *buff);
+ Buff *buff_create(Buff *buff, char *data, ... );
+--- a/ui/options.c
++++ b/ui/options.c
+@@ -332,7 +332,7 @@
+ file = fopen(filename->data, "r");
+ if (file != NULL) {
+ while (!feof(file)) {
+- line = getline(line, file);
++ line = get_line(line, file);
+ linenum++;
+ if(line == NULL) continue;
+
+@@ -429,7 +429,7 @@
+ linenum = 0;
+ while (linenum < 8) {
+ linenum++;
+- line = getline(line, file);
++ line = get_line(line, file);
+ if(line == NULL) continue;
+
+ switch (linenum) {
diff --git a/net-nntp/newspost/files/newspost-2.1.1-nntp.patch b/net-nntp/newspost/files/newspost-2.1.1-nntp.patch
new file mode 100644
index 000000000000..7482d6203e0e
--- /dev/null
+++ b/net-nntp/newspost/files/newspost-2.1.1-nntp.patch
@@ -0,0 +1,69 @@
+--- a/base/nntp.c
++++ b/base/nntp.c
+@@ -26,6 +26,10 @@
+ *** Public Routines
+ **/
+
++int _nntp_post(const char *subject, newspost_data *data,
++ const char *buffer, long length,
++ boolean no_ui_updates);
++
+ boolean nntp_logon(newspost_data *data) {
+ char buffer[STRING_BUFSIZE];
+
+@@ -78,6 +82,35 @@
+ int nntp_post(const char *subject, newspost_data *data,
+ const char *buffer, long length,
+ boolean no_ui_updates) {
++ int retval = _nntp_post(subject, data, buffer, length, no_ui_updates);
++
++ if (retval == POSTING_FAILED-64) {
++ /* try log out then back in */
++ ui_nntp_posting_retry();
++ nntp_logoff();
++ socket_close();
++ sleep(5);
++
++ /* create the socket */
++ ui_socket_connect_start(data->address->data);
++ retval = socket_create(data->address->data, data->port);
++ if (retval < 0)
++ return retval;
++ ui_socket_connect_done();
++
++ ui_nntp_logon_start(data->address->data);
++ if (nntp_logon(data) == FALSE)
++ return POSTING_FAILED;
++ ui_nntp_logon_done();
++
++ retval = _nntp_post(subject, data, buffer, length, no_ui_updates);
++ }
++ return retval;
++}
++
++int _nntp_post(const char *subject, newspost_data *data,
++ const char *buffer, long length,
++ boolean no_ui_updates) {
+ char response[STRING_BUFSIZE];
+ const char *pi;
+ long i, chunksize;
+@@ -95,7 +128,7 @@
+ if (strncmp(response, NNTP_PROCEED_WITH_POST, 3) != 0) {
+ /* this shouldn't really happen */
+ ui_nntp_unknown_response(response);
+- return POSTING_FAILED;
++ return POSTING_FAILED-64;
+ }
+
+ buff = buff_add(buff, "From: %s\r\n", data->from->data);
+--- a/base/utils.c
++++ b/base/utils.c
+@@ -44,7 +44,7 @@
+ }
+
+ Buff * getline(Buff *buff, FILE *file){
+- char c = fgetc(file);
++ int c = fgetc(file);
+ buff = buff_free(buff);
+ while(TRUE){
+ if((c == '\n')
diff --git a/net-nntp/newspost/metadata.xml b/net-nntp/newspost/metadata.xml
new file mode 100644
index 000000000000..5f33304011d5
--- /dev/null
+++ b/net-nntp/newspost/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-nntp/newspost/newspost-2.1.1-r3.ebuild b/net-nntp/newspost/newspost-2.1.1-r3.ebuild
new file mode 100644
index 000000000000..f469d278ca68
--- /dev/null
+++ b/net-nntp/newspost/newspost-2.1.1-r3.ebuild
@@ -0,0 +1,38 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="usenet binary autoposter for unix"
+HOMEPAGE="http://newspost.unixcab.org/"
+SRC_URI="http://newspost.unixcab.org/download/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 ppc x86"
+
+PATCHES=(
+ # Should fix some problems with unexpected server replies, cf. bug 185468
+ "${FILESDIR}"/${P}-nntp.patch
+ "${FILESDIR}"/CAN-2005-0101.patch
+ "${FILESDIR}"/${P}-glibc-2.10.patch
+ "${FILESDIR}"/${P}-c23.patch
+)
+
+src_prepare() {
+ default
+
+ sed -e "/-strip newspost/d" -i Makefile || die
+}
+
+src_compile() {
+ emake CC="$(tc-getCC)" LIBS="${LDFLAGS}" main
+}
+
+src_install() {
+ dobin newspost
+ doman man/man1/newspost.1
+ dodoc CHANGES README
+}
diff --git a/net-nntp/nzbget/Manifest b/net-nntp/nzbget/Manifest
new file mode 100644
index 000000000000..5e184c18073b
--- /dev/null
+++ b/net-nntp/nzbget/Manifest
@@ -0,0 +1,8 @@
+DIST nzbget-25.0.tar.gz 7315774 BLAKE2B af116e68bd716402b5c55becf0d9ea89e959ddb0dd4f6359ac315a8d489d9351954b17784bdfd5bf134abe602a7a24574d74d2744f5d89f59c7e87dcea10db8b SHA512 0e265af8e20d2de585698750dd42ea84f7001f74b8ffab22929de4face27ed49ba64ef72afa167f0cca4e5db7f6bd6b5d2f4194e5311ffcbda39e613f7643450
+DIST nzbget-25.4.tar.gz 7333569 BLAKE2B ee4a70790a39b366bb3b023106fad92b1817a5a27947f66f24097d74a587093a628462d83c588edbc7cdc11e65a653f006537be7cb87342111dab1da2cab2920 SHA512 d60967b911d186c9e189ade9011c222852fc633094fff66002430139bef8795bd06d5e54220e81b402da6f7b2b87dae4767a58854098c92bc89844d2ee2baa5e
+DIST nzbget-26.0.tar.gz 7386372 BLAKE2B 189554c285da93521495041461dd4b4ad9fae302a6ecddfe65b060ae93e19d658db3475bd9991dcf264592d5f3d2a738f374a01191b3c035bbb8c810c0694ddb SHA512 9cac3a6f1a43e9d0879c44764288a088e8404fcd939acff8a441e83934ea310405835cd0ea381f822f0c078cfc2876f364f55fd72167213d667b15510719cea3
+DIST nzbget-26.1.tar.gz 7369685 BLAKE2B 59c28b53992c4e6109023f5b89ad1351df23bfd0d638ba77af09d876bb2f1db7ae54f1f128181a2e430e39e0403a632622ad8abcabbd8ee3136bc22ba7805373 SHA512 2060de94a75c0d9e73a4473a987c95b32134ab548b5064f5b2fd08ea0abc63f3788a159120584d447be7a6d9826319f7a465a79ca2ed6f782419abfc596c1f5b
+DIST nzbgetcom-par2turbo-1.2.0-nzbget-20250213.tar.gz 3964785 BLAKE2B 049771c21a5febe453d2866eebca3a91c145f5b054f2dfa8226d0b5245753506c184f1ad7739bd76eaad0343e87bc0e7abc2830b3cedd6e459bef64f596e3853 SHA512 fdf639759361440fef6948a61391ad579070575a2d9a62a39b0e5ff87beb365d4baab2a56fffb672e78a2094748fbf0d17abc50144914e5fb5ffe432e9c02a9d
+DIST nzbgetcom-par2turbo-1.3.0-20250808.tar.gz 3970409 BLAKE2B 5a851afa42c5540d49f7f5657ccdd47fa5ab45a2057075944b30d5cceabb5ef847984fe73cbdf849af2e98cc527d19dac9ac920ec481ae7802282af173f274bd SHA512 0bfdd05c5a7235a8ff1e7a6f46d852c3263141a80619496ebcdae227281729a6442029384aa498b268062717f40063a49d31c1b0d4b713ca6cb6ff15303dcfbe
+DIST nzbgetcom-par2turbo-1.4.0-20260323.tar.gz 3998503 BLAKE2B 9fb7d20d6528c7f78b11640aa3d396352dd91426b69da919bf59ac8d965cef9fd270d84ce042592e0fb8e77525ef0df2e24e3804310ca75b9a67a011128119aa SHA512 8408425f62191f5ee8d8b7826052f3cead468d3e3f5a2e265c8f2ae295488231d675aa8327e3794734d75edcbeea156cff9f78e0415020e08aa272e21d739fc8
+DIST nzbgetcom-rapidyenc-1.1.1-20260217.tar.gz 116309 BLAKE2B 56c5ffcc965375b0ab893f18a8d44bc3aec7ef5735589fa5a42655c964a4fbbdab15595d6e295e51d4cf2883b7c08f00f94bc01d197424f37c22d2a467072a23 SHA512 7b5bc009c7e9ae273969c1ca6faf2537448b4fe35aa52d81841af082e104a831cfcb80534058a0ca905dd47e528d708b21e786bf83470d374e824a40a7ebef5e
diff --git a/net-nntp/nzbget/files/nzbget-24.6-build-with-par2-turbo-offline.patch b/net-nntp/nzbget/files/nzbget-24.6-build-with-par2-turbo-offline.patch
new file mode 100644
index 000000000000..462e05aa96b2
--- /dev/null
+++ b/net-nntp/nzbget/files/nzbget-24.6-build-with-par2-turbo-offline.patch
@@ -0,0 +1,17 @@
+Patch the build system to support par2-turbo downloaded into the source
+directory.
+--- a/cmake/par2-turbo.cmake
++++ b/cmake/par2-turbo.cmake
+@@ -42,11 +42,7 @@ endif()
+ ExternalProject_add(
+ par2-turbo
+ PREFIX par2-turbo
+- GIT_REPOSITORY https://github.com/nzbgetcom/par2cmdline-turbo.git
+- GIT_TAG v1.2.0-nzbget-20250213
+- TLS_VERIFY TRUE
+- GIT_SHALLOW TRUE
+- GIT_PROGRESS TRUE
++ URL par2-turbo
+ DOWNLOAD_EXTRACT_TIMESTAMP TRUE
+ BUILD_BYPRODUCTS ${PAR2_LIBS}
+ CMAKE_ARGS ${CMAKE_ARGS}
diff --git a/net-nntp/nzbget/files/nzbget-25.3-build-with-par2-turbo-offline.patch b/net-nntp/nzbget/files/nzbget-25.3-build-with-par2-turbo-offline.patch
new file mode 100644
index 000000000000..4b6222f14ed0
--- /dev/null
+++ b/net-nntp/nzbget/files/nzbget-25.3-build-with-par2-turbo-offline.patch
@@ -0,0 +1,17 @@
+Patch the build system to support par2-turbo downloaded into the source
+directory.
+--- a/cmake/par2-turbo.cmake
++++ b/cmake/par2-turbo.cmake
+@@ -42,11 +42,7 @@ endif()
+ ExternalProject_add(
+ par2-turbo
+ PREFIX par2-turbo
+- GIT_REPOSITORY https://github.com/nzbgetcom/par2cmdline-turbo.git
+- GIT_TAG v1.3.0-20250808
+- TLS_VERIFY TRUE
+- GIT_SHALLOW TRUE
+- GIT_PROGRESS TRUE
++ URL par2-turbo
+ DOWNLOAD_EXTRACT_TIMESTAMP TRUE
+ BUILD_BYPRODUCTS ${PAR2_LIBS}
+ CMAKE_ARGS ${CMAKE_ARGS}
diff --git a/net-nntp/nzbget/files/nzbget-26.0-fix-include-order.patch b/net-nntp/nzbget/files/nzbget-26.0-fix-include-order.patch
new file mode 100644
index 000000000000..654b6a46377e
--- /dev/null
+++ b/net-nntp/nzbget/files/nzbget-26.0-fix-include-order.patch
@@ -0,0 +1,29 @@
+From 063e1cd82ee719b18a1dae40f65c0971de44edef Mon Sep 17 00:00:00 2001
+From: Louis Sautier <sautier.louis@gmail.com>
+Date: Sun, 15 Feb 2026 19:29:04 +0100
+Subject: [PATCH] Fix missing nzbget.h includes causing compilation errors
+ (#736)
+
+--- a/daemon/queue/UrlCoordinator.cpp
++++ b/daemon/queue/UrlCoordinator.cpp
+@@ -18,9 +18,8 @@
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+-
+-#include "Unpack.h"
+ #include "nzbget.h"
++#include "Unpack.h"
+
+ #include "UrlCoordinator.h"
+ #include "Options.h"
+--- a/daemon/systemhealth/PathsValidator.cpp
++++ b/daemon/systemhealth/PathsValidator.cpp
+@@ -17,6 +17,7 @@
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
++#include "nzbget.h"
+ #include "Options.h"
+ #include "Status.h"
+ #include "Validators.h"
diff --git a/net-nntp/nzbget/files/nzbget-26.1-build-with-par2-turbo-offline.patch b/net-nntp/nzbget/files/nzbget-26.1-build-with-par2-turbo-offline.patch
new file mode 100644
index 000000000000..1d7322862765
--- /dev/null
+++ b/net-nntp/nzbget/files/nzbget-26.1-build-with-par2-turbo-offline.patch
@@ -0,0 +1,17 @@
+Patch the build system to support par2-turbo downloaded into the source
+directory.
+--- a/cmake/par2-turbo.cmake
++++ b/cmake/par2-turbo.cmake
+@@ -42,11 +42,7 @@ endif()
+ ExternalProject_add(
+ par2-turbo
+ PREFIX par2-turbo
+- GIT_REPOSITORY https://github.com/nzbgetcom/par2cmdline-turbo.git
+- GIT_TAG v1.4.0-20260323
+- TLS_VERIFY TRUE
+- GIT_SHALLOW TRUE
+- GIT_PROGRESS TRUE
++ URL par2-turbo
+ DOWNLOAD_EXTRACT_TIMESTAMP TRUE
+ BUILD_BYPRODUCTS ${PAR2_LIBS}
+ CMAKE_ARGS ${CMAKE_ARGS}
diff --git a/net-nntp/nzbget/files/nzbget-26.1-build-with-rapidyenc-offline.patch b/net-nntp/nzbget/files/nzbget-26.1-build-with-rapidyenc-offline.patch
new file mode 100644
index 000000000000..c4e6b5e27119
--- /dev/null
+++ b/net-nntp/nzbget/files/nzbget-26.1-build-with-rapidyenc-offline.patch
@@ -0,0 +1,17 @@
+Patch the build system to support rapidyenc downloaded into the source
+directory.
+--- a/cmake/rapidyenc.cmake
++++ b/cmake/rapidyenc.cmake
+@@ -49,11 +49,7 @@ endif()
+ ExternalProject_add(
+ rapidyenc
+ PREFIX rapidyenc
+- GIT_REPOSITORY https://github.com/nzbgetcom/rapidyenc.git
+- GIT_TAG v1.1.1-20260217
+- TLS_VERIFY TRUE
+- GIT_SHALLOW TRUE
+- GIT_PROGRESS TRUE
++ URL rapidyenc
+ DOWNLOAD_EXTRACT_TIMESTAMP TRUE
+ BUILD_BYPRODUCTS ${RAPIDYENC_LIBS}
+ CMAKE_ARGS ${CMAKE_ARGS}
diff --git a/net-nntp/nzbget/files/nzbget-26.1-fix-include-order.patch b/net-nntp/nzbget/files/nzbget-26.1-fix-include-order.patch
new file mode 100644
index 000000000000..d6d3c0a1375d
--- /dev/null
+++ b/net-nntp/nzbget/files/nzbget-26.1-fix-include-order.patch
@@ -0,0 +1,13 @@
+Fix missing nzbget.h include before other headers in Cleanup.cpp,
+--- a/daemon/postprocess/Cleanup.cpp
++++ b/daemon/postprocess/Cleanup.cpp
+@@ -19,8 +19,8 @@
+ */
+
+
+-#include "DownloadInfo.h"
+ #include "nzbget.h"
++#include "DownloadInfo.h"
+ #include "Cleanup.h"
+ #include "Log.h"
+ #include "Util.h"
diff --git a/net-nntp/nzbget/files/nzbget.confd b/net-nntp/nzbget/files/nzbget.confd
new file mode 100644
index 000000000000..ee8f38c1aefd
--- /dev/null
+++ b/net-nntp/nzbget/files/nzbget.confd
@@ -0,0 +1,15 @@
+# Copyright 1999-2008 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+# /etc/conf.d/nzbget
+# Config file for nzbget init script
+
+# Which user to run nzbget as
+NZBGET_USER="nzbget"
+NZBGET_GROUP="nzbget"
+
+# Location of config file
+NZBGET_CONFIGFILE="/etc/nzbgetd.conf"
+
+# Other options
+NZBGET_OPTS=""
diff --git a/net-nntp/nzbget/files/nzbget.initd-r1 b/net-nntp/nzbget/files/nzbget.initd-r1
new file mode 100644
index 000000000000..2a9fae6c32b4
--- /dev/null
+++ b/net-nntp/nzbget/files/nzbget.initd-r1
@@ -0,0 +1,28 @@
+#!/sbin/openrc-run
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+extra_started_commands="reload"
+
+description="A command-line based binary newsgrabber supporting .nzb files"
+pidfile=/run/nzbget/nzbget.pid
+command=/usr/bin/nzbget
+command_args="--configfile \"${NZBGET_CONFIGFILE}\" \
+ --daemon --option LockFile=${pidfile} \
+ ${NZBGET_OPTS}"
+start_stop_daemon_args="--user \"${NZBGET_USER}\" \
+ --group \"${NZBGET_GROUP}\""
+
+depend() {
+ need localmount net
+}
+
+start_pre() {
+ checkpath -d -m 0755 -o "${NZBGET_USER}":"${NZBGET_GROUP}" /run/nzbget
+}
+
+reload() {
+ ebegin "Reloading ${RC_SVCNAME}"
+ ${command} --configfile "${NZBGET_CONFIGFILE}" --reload >/dev/null
+ eend $?
+}
diff --git a/net-nntp/nzbget/files/nzbget.service b/net-nntp/nzbget/files/nzbget.service
new file mode 100644
index 000000000000..031307e3efa4
--- /dev/null
+++ b/net-nntp/nzbget/files/nzbget.service
@@ -0,0 +1,18 @@
+[Unit]
+Description=NZBGet binary newsgrabber
+Documentation=https://nzbget.net/Documentation
+After=network.target
+
+[Service]
+User=nzbget
+Group=nzbget
+Type=forking
+PIDFile=/run/nzbget/nzbget.pid
+RuntimeDirectory=nzbget
+RuntimeDirectoryMode=0755
+ExecStart=/usr/bin/nzbget -c /etc/nzbgetd.conf -o LockFile=/run/nzbget/nzbget.pid -D
+ExecStop=/usr/bin/nzbget -c /etc/nzbgetd.conf -Q
+ExecReload=/usr/bin/nzbget -c /etc/nzbgetd.conf -O
+
+[Install]
+WantedBy=multi-user.target
diff --git a/net-nntp/nzbget/metadata.xml b/net-nntp/nzbget/metadata.xml
new file mode 100644
index 000000000000..26b0c29abb23
--- /dev/null
+++ b/net-nntp/nzbget/metadata.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>swegener@gentoo.org</email>
+ <name>Sven Wegener</name>
+ </maintainer>
+ <maintainer type="person">
+ <email>sbraz@gentoo.org</email>
+ <name>Louis Sautier</name>
+ </maintainer>
+ <use>
+ <flag name="parcheck">Enable support for checking PAR archives</flag>
+ </use>
+ <upstream>
+ <bugs-to>https://github.com/nzbgetcom/nzbget/issues</bugs-to>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-nntp/nzbget/nzbget-25.0.ebuild b/net-nntp/nzbget/nzbget-25.0.ebuild
new file mode 100644
index 000000000000..07a9a0d2b3db
--- /dev/null
+++ b/net-nntp/nzbget/nzbget-25.0.ebuild
@@ -0,0 +1,120 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake systemd
+
+PAR2_TURBO_VER="1.2.0-nzbget-20250213"
+DESCRIPTION="A command-line based binary newsgrabber supporting .nzb files"
+HOMEPAGE="https://nzbget.com/"
+SRC_URI="
+ parcheck? (
+ https://github.com/nzbgetcom/par2cmdline-turbo/archive/v${PAR2_TURBO_VER}.tar.gz
+ -> nzbgetcom-par2turbo-${PAR2_TURBO_VER}.tar.gz
+ )
+ https://github.com/nzbgetcom/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz
+"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="amd64 arm ~arm64 ppc x86"
+IUSE="ncurses +parcheck ssl test zlib"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ dev-libs/boost:=
+ dev-libs/libxml2:=
+ ncurses? ( sys-libs/ncurses:0= )
+ ssl? ( dev-libs/openssl:0=[-bindist(-)] )
+ zlib? ( virtual/zlib:= )"
+RDEPEND="
+ ${DEPEND}
+ acct-user/nzbget
+ acct-group/nzbget
+"
+BDEPEND="
+ test? (
+ || (
+ app-arch/rar
+ app-arch/unrar
+ )
+ )
+ virtual/pkgconfig
+"
+
+DOCS=( ChangeLog.md README.md nzbget.conf )
+
+PATCHES=(
+ # Required to use par2-turbo downloaded into the source directory
+ "${FILESDIR}/${PN}-24.6-build-with-par2-turbo-offline.patch"
+)
+
+src_prepare() {
+ if use parcheck; then
+ mv "${WORKDIR}/par2cmdline-turbo-${PAR2_TURBO_VER}" par2-turbo || die
+ fi
+ cmake_src_prepare
+
+ # Update the main configuration file with the correct paths
+ sed -i nzbget.conf \
+ -e "s:^WebDir=.*:WebDir=${EPREFIX}/usr/share/nzbget/webui:" \
+ -e "s:^ConfigTemplate=.*:ConfigTemplate=${EPREFIX}/usr/share/nzbget/nzbget.conf:" \
+ || die
+ # Update the daemon-specific configuration file (used by the OpenRC and
+ # systemd services)
+ sed nzbget.conf > nzbgetd.conf \
+ -e "s:^MainDir=.*:MainDir=${EPREFIX}/var/lib/nzbget:" \
+ -e "s:^LogFile=.*:LogFile=${EPREFIX}/var/log/nzbget/nzbget.log:" \
+ -e 's:^DaemonUsername=.*:DaemonUsername=nzbget:' \
+ || die
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DDISABLE_CURSES=$(usex !ncurses)
+ -DDISABLE_PARCHECK=$(usex !parcheck)
+ -DDISABLE_TLS=$(usex !ssl)
+ -DDISABLE_GZIP=$(usex !zlib)
+ -DENABLE_TESTS=$(usex test)
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+
+ insinto /etc
+ doins nzbget.conf
+ doins nzbgetd.conf
+
+ # The configuration file's "ConfigTemplate" option points to this, we must
+ # make sure it exists as the Web UI reads it. It is not installed by
+ # default, see the "install-conf" target in cmake/install.cmake.
+ insinto /usr/share/nzbget
+ doins nzbget.conf
+
+ keepdir /var/log/nzbget
+
+ newinitd "${FILESDIR}"/nzbget.initd-r1 nzbget
+ newconfd "${FILESDIR}"/nzbget.confd nzbget
+ systemd_dounit "${FILESDIR}"/nzbget.service
+}
+
+pkg_preinst() {
+ fowners nzbget:nzbget /var/log/nzbget
+ fperms 750 /var/log/nzbget
+
+ fowners nzbget:nzbget /etc/nzbgetd.conf
+ fperms 640 /etc/nzbgetd.conf
+}
+
+pkg_postinst() {
+ if [[ -z ${REPLACING_VERSIONS} ]] ; then
+ elog
+ elog "Please add users that you want to be able to use the system-wide"
+ elog "nzbget daemon to the nzbget group. To access the daemon, run nzbget"
+ elog "with the --configfile /etc/nzbgetd.conf option."
+ elog
+ fi
+}
diff --git a/net-nntp/nzbget/nzbget-25.4.ebuild b/net-nntp/nzbget/nzbget-25.4.ebuild
new file mode 100644
index 000000000000..111265d01c9c
--- /dev/null
+++ b/net-nntp/nzbget/nzbget-25.4.ebuild
@@ -0,0 +1,120 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake systemd
+
+PAR2_TURBO_VER="1.3.0-20250808"
+DESCRIPTION="A command-line based binary newsgrabber supporting .nzb files"
+HOMEPAGE="https://nzbget.com/"
+SRC_URI="
+ parcheck? (
+ https://github.com/nzbgetcom/par2cmdline-turbo/archive/v${PAR2_TURBO_VER}.tar.gz
+ -> nzbgetcom-par2turbo-${PAR2_TURBO_VER}.tar.gz
+ )
+ https://github.com/nzbgetcom/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz
+"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="amd64 arm ~arm64 ~ppc x86"
+IUSE="ncurses +parcheck ssl test zlib"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ dev-libs/boost:=
+ dev-libs/libxml2:=
+ ncurses? ( sys-libs/ncurses:0= )
+ ssl? ( dev-libs/openssl:0=[-bindist(-)] )
+ zlib? ( virtual/zlib:= )"
+RDEPEND="
+ ${DEPEND}
+ acct-user/nzbget
+ acct-group/nzbget
+"
+BDEPEND="
+ test? (
+ || (
+ app-arch/rar
+ app-arch/unrar
+ )
+ )
+ virtual/pkgconfig
+"
+
+DOCS=( ChangeLog.md README.md nzbget.conf )
+
+PATCHES=(
+ # Required to use par2-turbo downloaded into the source directory
+ "${FILESDIR}/${PN}-25.3-build-with-par2-turbo-offline.patch"
+)
+
+src_prepare() {
+ if use parcheck; then
+ mv "${WORKDIR}/par2cmdline-turbo-${PAR2_TURBO_VER}" par2-turbo || die
+ fi
+ cmake_src_prepare
+
+ # Update the main configuration file with the correct paths
+ sed -i nzbget.conf \
+ -e "s:^WebDir=.*:WebDir=${EPREFIX}/usr/share/nzbget/webui:" \
+ -e "s:^ConfigTemplate=.*:ConfigTemplate=${EPREFIX}/usr/share/nzbget/nzbget.conf:" \
+ || die
+ # Update the daemon-specific configuration file (used by the OpenRC and
+ # systemd services)
+ sed nzbget.conf > nzbgetd.conf \
+ -e "s:^MainDir=.*:MainDir=${EPREFIX}/var/lib/nzbget:" \
+ -e "s:^LogFile=.*:LogFile=${EPREFIX}/var/log/nzbget/nzbget.log:" \
+ -e 's:^DaemonUsername=.*:DaemonUsername=nzbget:' \
+ || die
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DDISABLE_CURSES=$(usex !ncurses)
+ -DDISABLE_PARCHECK=$(usex !parcheck)
+ -DDISABLE_TLS=$(usex !ssl)
+ -DDISABLE_GZIP=$(usex !zlib)
+ -DENABLE_TESTS=$(usex test)
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+
+ insinto /etc
+ doins nzbget.conf
+ doins nzbgetd.conf
+
+ # The configuration file's "ConfigTemplate" option points to this, we must
+ # make sure it exists as the Web UI reads it. It is not installed by
+ # default, see the "install-conf" target in cmake/install.cmake.
+ insinto /usr/share/nzbget
+ doins nzbget.conf
+
+ keepdir /var/log/nzbget
+
+ newinitd "${FILESDIR}"/nzbget.initd-r1 nzbget
+ newconfd "${FILESDIR}"/nzbget.confd nzbget
+ systemd_dounit "${FILESDIR}"/nzbget.service
+}
+
+pkg_preinst() {
+ fowners nzbget:nzbget /var/log/nzbget
+ fperms 750 /var/log/nzbget
+
+ fowners nzbget:nzbget /etc/nzbgetd.conf
+ fperms 640 /etc/nzbgetd.conf
+}
+
+pkg_postinst() {
+ if [[ -z ${REPLACING_VERSIONS} ]] ; then
+ elog
+ elog "Please add users that you want to be able to use the system-wide"
+ elog "nzbget daemon to the nzbget group. To access the daemon, run nzbget"
+ elog "with the --configfile /etc/nzbgetd.conf option."
+ elog
+ fi
+}
diff --git a/net-nntp/nzbget/nzbget-26.0.ebuild b/net-nntp/nzbget/nzbget-26.0.ebuild
new file mode 100644
index 000000000000..9096b2ab21b4
--- /dev/null
+++ b/net-nntp/nzbget/nzbget-26.0.ebuild
@@ -0,0 +1,122 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake systemd
+
+PAR2_TURBO_VER="1.3.0-20250808"
+DESCRIPTION="A command-line based binary newsgrabber supporting .nzb files"
+HOMEPAGE="https://nzbget.com/"
+SRC_URI="
+ parcheck? (
+ https://github.com/nzbgetcom/par2cmdline-turbo/archive/v${PAR2_TURBO_VER}.tar.gz
+ -> nzbgetcom-par2turbo-${PAR2_TURBO_VER}.tar.gz
+ )
+ https://github.com/nzbgetcom/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz
+"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~x86"
+IUSE="ncurses +parcheck ssl test zlib"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ dev-libs/boost:=
+ dev-libs/libxml2:=
+ ncurses? ( sys-libs/ncurses:0= )
+ ssl? ( dev-libs/openssl:0=[-bindist(-)] )
+ zlib? ( virtual/zlib:= )"
+RDEPEND="
+ ${DEPEND}
+ acct-user/nzbget
+ acct-group/nzbget
+"
+BDEPEND="
+ test? (
+ || (
+ app-arch/rar
+ app-arch/unrar
+ )
+ )
+ virtual/pkgconfig
+"
+
+DOCS=( ChangeLog.md README.md nzbget.conf )
+
+PATCHES=(
+ # Required to use par2-turbo downloaded into the source directory
+ "${FILESDIR}/${PN}-25.3-build-with-par2-turbo-offline.patch"
+ # Backported from https://github.com/nzbgetcom/nzbget/commit/063e1cd82ee719b18a1dae40f65c0971de44edef
+ "${FILESDIR}/${P}-fix-include-order.patch"
+)
+
+src_prepare() {
+ if use parcheck; then
+ mv "${WORKDIR}/par2cmdline-turbo-${PAR2_TURBO_VER}" par2-turbo || die
+ fi
+ cmake_src_prepare
+
+ # Update the main configuration file with the correct paths
+ sed -i nzbget.conf \
+ -e "s:^WebDir=.*:WebDir=${EPREFIX}/usr/share/nzbget/webui:" \
+ -e "s:^ConfigTemplate=.*:ConfigTemplate=${EPREFIX}/usr/share/nzbget/nzbget.conf:" \
+ || die
+ # Update the daemon-specific configuration file (used by the OpenRC and
+ # systemd services)
+ sed nzbget.conf > nzbgetd.conf \
+ -e "s:^MainDir=.*:MainDir=${EPREFIX}/var/lib/nzbget:" \
+ -e "s:^LogFile=.*:LogFile=${EPREFIX}/var/log/nzbget/nzbget.log:" \
+ -e 's:^DaemonUsername=.*:DaemonUsername=nzbget:' \
+ || die
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DDISABLE_CURSES=$(usex !ncurses)
+ -DDISABLE_PARCHECK=$(usex !parcheck)
+ -DDISABLE_TLS=$(usex !ssl)
+ -DDISABLE_GZIP=$(usex !zlib)
+ -DENABLE_TESTS=$(usex test)
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+
+ insinto /etc
+ doins nzbget.conf
+ doins nzbgetd.conf
+
+ # The configuration file's "ConfigTemplate" option points to this, we must
+ # make sure it exists as the Web UI reads it. It is not installed by
+ # default, see the "install-conf" target in cmake/install.cmake.
+ insinto /usr/share/nzbget
+ doins nzbget.conf
+
+ keepdir /var/log/nzbget
+
+ newinitd "${FILESDIR}"/nzbget.initd-r1 nzbget
+ newconfd "${FILESDIR}"/nzbget.confd nzbget
+ systemd_dounit "${FILESDIR}"/nzbget.service
+}
+
+pkg_preinst() {
+ fowners nzbget:nzbget /var/log/nzbget
+ fperms 750 /var/log/nzbget
+
+ fowners nzbget:nzbget /etc/nzbgetd.conf
+ fperms 640 /etc/nzbgetd.conf
+}
+
+pkg_postinst() {
+ if [[ -z ${REPLACING_VERSIONS} ]] ; then
+ elog
+ elog "Please add users that you want to be able to use the system-wide"
+ elog "nzbget daemon to the nzbget group. To access the daemon, run nzbget"
+ elog "with the --configfile /etc/nzbgetd.conf option."
+ elog
+ fi
+}
diff --git a/net-nntp/nzbget/nzbget-26.1.ebuild b/net-nntp/nzbget/nzbget-26.1.ebuild
new file mode 100644
index 000000000000..d040e5ec3e61
--- /dev/null
+++ b/net-nntp/nzbget/nzbget-26.1.ebuild
@@ -0,0 +1,129 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake systemd
+
+PAR2_TURBO_VER="1.4.0-20260323"
+RAPIDYENC_VER="1.1.1-20260217"
+DESCRIPTION="A command-line based binary newsgrabber supporting .nzb files"
+HOMEPAGE="https://nzbget.com/"
+SRC_URI="
+ parcheck? (
+ https://github.com/nzbgetcom/par2cmdline-turbo/archive/v${PAR2_TURBO_VER}.tar.gz
+ -> nzbgetcom-par2turbo-${PAR2_TURBO_VER}.tar.gz
+ )
+ https://github.com/nzbgetcom/rapidyenc/archive/v${RAPIDYENC_VER}.tar.gz
+ -> nzbgetcom-rapidyenc-${RAPIDYENC_VER}.tar.gz
+ https://github.com/nzbgetcom/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz
+"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~x86"
+IUSE="ncurses +parcheck ssl test zlib"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ dev-libs/boost:=
+ dev-libs/libxml2:=
+ ncurses? ( sys-libs/ncurses:0= )
+ ssl? ( dev-libs/openssl:0=[-bindist(-)] )
+ zlib? ( virtual/zlib:= )"
+RDEPEND="
+ ${DEPEND}
+ acct-user/nzbget
+ acct-group/nzbget
+"
+BDEPEND="
+ test? (
+ || (
+ app-arch/rar
+ app-arch/unrar
+ )
+ )
+ virtual/pkgconfig
+"
+
+DOCS=( ChangeLog.md README.md nzbget.conf )
+
+PATCHES=(
+ # Required to use par2-turbo downloaded into the source directory
+ "${FILESDIR}/${PN}-26.1-build-with-par2-turbo-offline.patch"
+ # Required to use rapidyenc downloaded into the source directory
+ "${FILESDIR}/${PN}-26.1-build-with-rapidyenc-offline.patch"
+ # Fix include order causing failures without precompiled headers, see
+ # https://github.com/nzbgetcom/nzbget/pull/782
+ "${FILESDIR}/${PN}-26.1-fix-include-order.patch"
+)
+
+src_prepare() {
+ if use parcheck; then
+ mv "${WORKDIR}/par2cmdline-turbo-${PAR2_TURBO_VER}" par2-turbo || die
+ fi
+ mv "${WORKDIR}/rapidyenc-${RAPIDYENC_VER}" rapidyenc || die
+ cmake_src_prepare
+
+ # Update the main configuration file with the correct paths
+ sed -i nzbget.conf \
+ -e "s:^WebDir=.*:WebDir=${EPREFIX}/usr/share/nzbget/webui:" \
+ -e "s:^ConfigTemplate=.*:ConfigTemplate=${EPREFIX}/usr/share/nzbget/nzbget.conf:" \
+ || die
+ # Update the daemon-specific configuration file (used by the OpenRC and
+ # systemd services)
+ sed nzbget.conf > nzbgetd.conf \
+ -e "s:^MainDir=.*:MainDir=${EPREFIX}/var/lib/nzbget:" \
+ -e "s:^LogFile=.*:LogFile=${EPREFIX}/var/log/nzbget/nzbget.log:" \
+ -e 's:^DaemonUsername=.*:DaemonUsername=nzbget:' \
+ || die
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DDISABLE_CURSES=$(usex !ncurses)
+ -DDISABLE_PARCHECK=$(usex !parcheck)
+ -DDISABLE_TLS=$(usex !ssl)
+ -DDISABLE_GZIP=$(usex !zlib)
+ -DENABLE_TESTS=$(usex test)
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+
+ insinto /etc
+ doins nzbget.conf
+ doins nzbgetd.conf
+
+ # The configuration file's "ConfigTemplate" option points to this, we must
+ # make sure it exists as the Web UI reads it. It is not installed by
+ # default, see the "install-conf" target in cmake/install.cmake.
+ insinto /usr/share/nzbget
+ doins nzbget.conf
+
+ keepdir /var/log/nzbget
+
+ newinitd "${FILESDIR}"/nzbget.initd-r1 nzbget
+ newconfd "${FILESDIR}"/nzbget.confd nzbget
+ systemd_dounit "${FILESDIR}"/nzbget.service
+}
+
+pkg_preinst() {
+ fowners nzbget:nzbget /var/log/nzbget
+ fperms 750 /var/log/nzbget
+
+ fowners nzbget:nzbget /etc/nzbgetd.conf
+ fperms 640 /etc/nzbgetd.conf
+}
+
+pkg_postinst() {
+ if [[ -z ${REPLACING_VERSIONS} ]] ; then
+ elog
+ elog "Please add users that you want to be able to use the system-wide"
+ elog "nzbget daemon to the nzbget group. To access the daemon, run nzbget"
+ elog "with the --configfile /etc/nzbgetd.conf option."
+ elog
+ fi
+}
diff --git a/net-nntp/sabnzbd/Manifest b/net-nntp/sabnzbd/Manifest
new file mode 100644
index 000000000000..5837dec445db
--- /dev/null
+++ b/net-nntp/sabnzbd/Manifest
@@ -0,0 +1,2 @@
+DIST SABnzbd-4.5.5-src.tar.gz 5240879 BLAKE2B 3e2e061e7cff3b020d8807b81c01ea70f6a06cef13e5f02f935d3141c2b5e72921974a02faf16df302639a33d567d180b114ef5b4115eba45f9d50578cd2a273 SHA512 c388b87c894baa8b791b0f14b855f3a3b9114dcf9d3a7f0daba392f71b02271ec7419c1f03d9ca8c4b58fea541d7bb710bed097632aa4ebea75c391b5937a9ea
+DIST SABnzbd-5.0.1-src.tar.gz 5300965 BLAKE2B 791544b944e42b158478bf4f13333cfa96cb256ac965959b2102b123810a46cb6dc96e90fe0b755dfe9569018a807aa039c81d647c2eaa7479cf153cf4933035 SHA512 940f997165eb7a511426512609e859ecd2b1474a6bf64d83f882de53beb73c5573f5d1f7ac645ada39dbd678e05b251df0d1429b13806aeaa96938ecc1769298
diff --git a/net-nntp/sabnzbd/files/sabnzbd-r1.ini b/net-nntp/sabnzbd/files/sabnzbd-r1.ini
new file mode 100644
index 000000000000..5ccd7e19ca37
--- /dev/null
+++ b/net-nntp/sabnzbd/files/sabnzbd-r1.ini
@@ -0,0 +1,12 @@
+__version__ = 19
+[misc]
+log_dir = /var/log/sabnzbd
+admin_dir = /var/lib/sabnzbd/admin
+cache_dir = /var/lib/sabnzbd/cache
+complete_dir = /var/lib/sabnzbd/complete
+download_dir = /var/lib/sabnzbd/download
+dirscan_dir = /var/lib/sabnzbd/dirscan
+nzb_backup_dir = /var/lib/sabnzbd/backup
+auto_browser = 0
+host = ::
+port = 8080
diff --git a/net-nntp/sabnzbd/files/sabnzbd-r1.initd b/net-nntp/sabnzbd/files/sabnzbd-r1.initd
new file mode 100644
index 000000000000..eff3352a90b4
--- /dev/null
+++ b/net-nntp/sabnzbd/files/sabnzbd-r1.initd
@@ -0,0 +1,71 @@
+#!/sbin/openrc-run
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+PIDFILE="/run/sabnzbd/sabnzbd.pid"
+
+depend() {
+ use dns
+}
+
+get_var() {
+ grep -P -o -m 1 "(?<=^${1} = ).*" "${SABNZBD_CONFIGFILE}" || echo 0
+}
+
+start() {
+ ebegin "Starting SABnzbd"
+
+ checkpath -q -d -o ${SABNZBD_USER}:${SABNZBD_GROUP} -m 0770 "$(dirname "${PIDFILE}")"
+
+ start-stop-daemon \
+ --quiet \
+ --start \
+ --user ${SABNZBD_USER} \
+ --group ${SABNZBD_GROUP} \
+ --pidfile "${PIDFILE}" \
+ --wait 1000 \
+ --exec /usr/share/sabnzbd/SABnzbd.py \
+ -- \
+ --config-file "${SABNZBD_CONFIGFILE}" \
+ --logging "${SABNZBD_LOGGING}" \
+ --daemon \
+ --pidfile "${PIDFILE}"
+
+ eend $?
+}
+
+stop() {
+ local protocol="http"
+ local host="$(get_var "host")"
+ local port="$(get_var "port")"
+
+ if [ $(get_var "enable_https") -eq 1 ]; then
+ protocol="https"
+ port="$(get_var "https_port")"
+ fi
+
+ case "${host}" in
+ *:*) host="[${host}]" ;;
+ esac
+
+ local url="${protocol}://${host}:${port}/sabnzbd/api?mode=shutdown"
+
+ if [ $(get_var "disable_api_key") -eq 0 ]; then
+ url="${url}&apikey=$(get_var "api_key")"
+ fi
+
+ local signals="TERM/1/KILL/1"
+
+ ebegin "Stopping SABnzbd"
+
+ if [ "$(wget -o /dev/null -t 1 -O - -T 10 "${url}")" = "ok" ]; then
+ signals="NULL/5/${signals}"
+ fi
+
+ start-stop-daemon \
+ --stop \
+ --pidfile "${PIDFILE}" \
+ --retry "${signals}"
+
+ eend $?
+}
diff --git a/net-nntp/sabnzbd/files/sabnzbd.confd b/net-nntp/sabnzbd/files/sabnzbd.confd
new file mode 100644
index 000000000000..c949355ec708
--- /dev/null
+++ b/net-nntp/sabnzbd/files/sabnzbd.confd
@@ -0,0 +1,6 @@
+SABNZBD_CONFIGFILE="/etc/sabnzbd/sabnzbd.ini"
+SABNZBD_USER="sabnzbd"
+SABNZBD_GROUP="sabnzbd"
+
+# 0 - error/warnings, 1 - info, 2 - debug
+SABNZBD_LOGGING="1"
diff --git a/net-nntp/sabnzbd/files/sabnzbd_at.service b/net-nntp/sabnzbd/files/sabnzbd_at.service
new file mode 100644
index 000000000000..92c5eb91f171
--- /dev/null
+++ b/net-nntp/sabnzbd/files/sabnzbd_at.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=SABnzbd binary newsreader
+
+[Service]
+ExecStart=/usr/share/sabnzbd/SABnzbd.py --logging 1 --browser 0
+User=sabnzbd
+Group=sabnzbd
+
+[Install]
+WantedBy=multi-user.target
diff --git a/net-nntp/sabnzbd/metadata.xml b/net-nntp/sabnzbd/metadata.xml
new file mode 100644
index 000000000000..085271e2aa70
--- /dev/null
+++ b/net-nntp/sabnzbd/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>joe@wt.gd</email>
+ <name>Joe Kappus</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:sabnzbd:sabnzbd</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-nntp/sabnzbd/sabnzbd-4.5.5.ebuild b/net-nntp/sabnzbd/sabnzbd-4.5.5.ebuild
new file mode 100644
index 000000000000..9c35201fb799
--- /dev/null
+++ b/net-nntp/sabnzbd/sabnzbd-4.5.5.ebuild
@@ -0,0 +1,178 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE="sqlite"
+
+inherit optfeature python-single-r1 systemd
+
+MY_PV="${PV/_alpha/Alpha}"
+MY_PV="${MY_PV/_beta/Beta}"
+MY_PV="${MY_PV/_rc/RC}"
+
+MY_P="SABnzbd-${MY_PV}"
+
+DESCRIPTION="Binary newsgrabber with web-interface"
+HOMEPAGE="https://sabnzbd.org/"
+SRC_URI="https://github.com/sabnzbd/sabnzbd/releases/download/${MY_PV}/${MY_P}-src.tar.gz"
+S="${WORKDIR}/${MY_P}"
+
+# Sabnzbd is GPL-2 but bundles software with the following licenses.
+LICENSE="GPL-2 BSD LGPL-2 MIT BSD-1"
+SLOT="0"
+KEYWORDS="amd64"
+IUSE="test"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+DEPEND="
+ acct-user/sabnzbd
+ acct-group/sabnzbd
+ ${PYTHON_DEPS}
+ $(python_gen_cond_dep '
+ >=dev-python/apprise-1.9.2[${PYTHON_USEDEP}]
+ dev-python/chardet[${PYTHON_USEDEP}]
+ >=dev-python/cheetah3-3.4.0[${PYTHON_USEDEP}]
+ dev-python/cherrypy[${PYTHON_USEDEP}]
+ dev-python/configobj[${PYTHON_USEDEP}]
+ dev-python/cryptography[${PYTHON_USEDEP}]
+ >=dev-python/feedparser-6.0.11[${PYTHON_USEDEP}]
+ >=dev-python/guessit-3.8.0[${PYTHON_USEDEP}]
+ dev-python/notify2[${PYTHON_USEDEP}]
+ dev-python/portend[${PYTHON_USEDEP}]
+ dev-python/puremagic[${PYTHON_USEDEP}]
+ ~dev-python/rarfile-4.2[${PYTHON_USEDEP}]
+ ~dev-python/sabctools-8.2.6[${PYTHON_USEDEP}]
+ ')
+"
+RDEPEND="
+ ${DEPEND}
+ || (
+ >=app-arch/par2cmdline-0.8
+ >=app-arch/par2cmdline-turbo-1.1.0
+ )
+ net-misc/wget
+"
+BDEPEND="
+ test? (
+ $(python_gen_cond_dep '
+ dev-python/flaky[${PYTHON_USEDEP}]
+ >=dev-python/lxml-4.5.0[${PYTHON_USEDEP}]
+ >=dev-python/pyfakefs-5.6.0[${PYTHON_USEDEP}]
+ dev-python/pytest-asyncio[${PYTHON_USEDEP}]
+ dev-python/pytest-httpbin[${PYTHON_USEDEP}]
+ dev-python/pytest-httpserver[${PYTHON_USEDEP}]
+ dev-python/pytest-mock[${PYTHON_USEDEP}]
+ dev-python/pytest[${PYTHON_USEDEP}]
+ dev-python/requests[${PYTHON_USEDEP}]
+ dev-python/selenium[${PYTHON_USEDEP}]
+ dev-python/tavalidate[${PYTHON_USEDEP}]
+ >=dev-python/tavern-2[${PYTHON_USEDEP}]
+ dev-python/werkzeug[${PYTHON_USEDEP}]
+ dev-python/xmltodict[${PYTHON_USEDEP}]
+ ')
+ app-arch/7zip
+ app-arch/unrar
+ app-arch/unzip
+ www-apps/chromedriver-bin
+ )
+"
+
+src_test() {
+ local EPYTEST_IGNORE=(
+ # network sandbox
+ tests/test_getipaddress.py
+ tests/test_rss.py
+ tests/test_urlgrabber.py
+ tests/test_utils/test_happyeyeballs.py
+ tests/test_utils/test_internetspeed.py
+ )
+ local EPYTEST_DESELECT=(
+ # network sandbox
+ 'tests/test_cfg.py::TestValidators::test_validate_host'
+ 'tests/test_consistency.py::TestWiki'
+ 'tests/test_newswrapper.py::TestNewsWrapper'
+ 'tests/test_happyeyeballs.py::TestHappyEyeballs'
+ 'tests/test_internetspeed.py::TestInternetSpeed'
+ 'tests/test_get_addrinfo.py'
+ # Just plain fails
+ 'tests/test_newsunpack.py::TestPar2Repair::test_basic'
+ # Does not work with pytest-8.x
+ 'tests/test_functional_api.py'
+ # Chromedriver tests don't want to behave in portage
+ 'tests/test_functional_config.py::TestBasicPages::test_base_pages'
+ 'tests/test_functional_config.py::TestBasicPages::test_base_submit_pages'
+ 'tests/test_functional_config.py::TestConfigLogin::test_login'
+ 'tests/test_functional_config.py::TestConfigCategories::test_page'
+ 'tests/test_functional_config.py::TestConfigRSS::test_rss_basic_flow'
+ 'tests/test_functional_config.py::TestConfigServers::test_add_and_remove_server'
+ 'tests/test_functional_downloads.py::TestDownloadFlow::test_download_basic_rar5'
+ 'tests/test_functional_downloads.py::TestDownloadFlow::test_download_zip'
+ 'tests/test_functional_downloads.py::TestDownloadFlow::test_download_7zip'
+ 'tests/test_functional_downloads.py::TestDownloadFlow::test_download_passworded'
+ 'tests/test_functional_downloads.py::TestDownloadFlow::test_download_fully_obfuscated'
+ 'tests/test_functional_downloads.py::TestDownloadFlow::test_download_unicode_rar'
+ 'tests/test_functional_misc.py::TestExtractPot::test_extract_pot'
+ 'tests/test_functional_misc.py::TestShowLogging::test_showlog'
+ 'tests/test_functional_misc.py::TestQueueRepair::test_queue_repair'
+ 'tests/test_functional_misc.py::TestDaemonizing::test_daemonizing'
+ 'tests/test_functional_sorting.py::TestDownloadSorting'
+ )
+
+ # The test suite is prone to being broken by random plugins that happen
+ # to be installed, so disable autoloading.
+ local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
+ # Use PYTEST_PLUGINS instead of args to 'epytest' because the test suite
+ # calls pytest itself and the args would get lost. To get the list of plugins,
+ # if stuck, comment out the AUTOLOAD line above, look at the list of loaded
+ # plugins at the top of the pytest output, then translate those into module names
+ # by e.g. checking equery f.
+ local -x PYTEST_PLUGINS=pytest_mock,tavern,tavern._core.pytest,pyfakefs.pytest_plugin,pytest_asyncio.plugin
+
+ epytest -s
+}
+
+src_install() {
+ insinto /usr/share/${PN}
+ doins -r email icons interfaces locale po sabnzbd scripts tools
+
+ exeinto /usr/share/${PN}
+ doexe SABnzbd.py
+
+ python_fix_shebang "${ED}"/usr/share/${PN}
+ python_optimize "${ED}"/usr/share/${PN}
+
+ newinitd "${FILESDIR}"/${PN}-r1.initd ${PN}
+ newconfd "${FILESDIR}"/${PN}.confd ${PN}
+
+ diropts -o ${PN} -g ${PN}
+ dodir /etc/${PN}
+ keepdir /var/log/${PN}
+
+ insinto "/etc/${PN}"
+ insopts -m 0600 -o "${PN}" -g "${PN}"
+ newins "${FILESDIR}"/${PN}-r1.ini ${PN}.ini
+
+ dodoc ISSUES.txt README.mkd
+
+ systemd_newunit "${FILESDIR}"/sabnzbd_at.service 'sabnzbd@.service'
+}
+
+pkg_postinst() {
+ if [[ -z "${REPLACING_VERSIONS}" ]]; then
+ # This is a new installation
+ einfo "Default directory: /var/lib/${PN}"
+ einfo
+ einfo "To add a user to the sabnzbd group so it can edit SABnzbd+ files, run:"
+ einfo
+ einfo " usermod -a -G sabnzbd <user>"
+ einfo
+ einfo "By default, SABnzbd will listen on TCP port 8080."
+ fi
+
+ optfeature "7z archive support" app-arch/7zip
+ optfeature "rar archive support" app-arch/unrar app-arch/rar
+ optfeature "zip archive support" app-arch/unzip
+}
diff --git a/net-nntp/sabnzbd/sabnzbd-5.0.1.ebuild b/net-nntp/sabnzbd/sabnzbd-5.0.1.ebuild
new file mode 100644
index 000000000000..5fd9736b476c
--- /dev/null
+++ b/net-nntp/sabnzbd/sabnzbd-5.0.1.ebuild
@@ -0,0 +1,156 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE="sqlite"
+
+inherit optfeature python-single-r1 systemd
+
+MY_PV="${PV/_alpha/Alpha}"
+MY_PV="${MY_PV/_beta/Beta}"
+MY_PV="${MY_PV/_rc/RC}"
+
+MY_P="SABnzbd-${MY_PV}"
+
+DESCRIPTION="Binary newsgrabber with web-interface"
+HOMEPAGE="https://sabnzbd.org/"
+SRC_URI="https://github.com/sabnzbd/sabnzbd/releases/download/${MY_PV}/${MY_P}-src.tar.gz"
+S="${WORKDIR}/${MY_P}"
+
+# SABnzbd is GPL-2+ but bundles JS/CSS libraries and Python modules
+# with their own licenses (Bootstrap, jQuery, Knockout, rarfile, etc).
+LICENSE="GPL-2+ Apache-2.0 CC-BY-3.0 ISC LGPL-2.1+ MIT"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="test"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+DEPEND="
+ acct-user/sabnzbd
+ acct-group/sabnzbd
+ ${PYTHON_DEPS}
+ $(python_gen_cond_dep '
+ >=dev-python/apprise-1.9.2[${PYTHON_USEDEP}]
+ dev-python/chardet[${PYTHON_USEDEP}]
+ >=dev-python/cheetah3-3.4.0[${PYTHON_USEDEP}]
+ dev-python/cherrypy[${PYTHON_USEDEP}]
+ dev-python/configobj[${PYTHON_USEDEP}]
+ dev-python/cryptography[${PYTHON_USEDEP}]
+ >=dev-python/feedparser-6.0.11[${PYTHON_USEDEP}]
+ >=dev-python/guessit-3.8.0[${PYTHON_USEDEP}]
+ dev-python/notify2[${PYTHON_USEDEP}]
+ dev-python/portend[${PYTHON_USEDEP}]
+ dev-python/puremagic[${PYTHON_USEDEP}]
+ ~dev-python/rarfile-4.2[${PYTHON_USEDEP}]
+ ~dev-python/sabctools-9.4.0[${PYTHON_USEDEP}]
+ ')
+"
+RDEPEND="
+ ${DEPEND}
+ || (
+ >=app-arch/par2cmdline-0.8
+ >=app-arch/par2cmdline-turbo-1.1.0
+ )
+ net-misc/wget
+"
+BDEPEND="
+ test? (
+ $(python_gen_cond_dep '
+ dev-python/flaky[${PYTHON_USEDEP}]
+ dev-python/lxml[${PYTHON_USEDEP}]
+ dev-python/pyfakefs[${PYTHON_USEDEP}]
+ dev-python/pytest-asyncio[${PYTHON_USEDEP}]
+ dev-python/pytest-httpbin[${PYTHON_USEDEP}]
+ dev-python/pytest-httpserver[${PYTHON_USEDEP}]
+ dev-python/pytest-mock[${PYTHON_USEDEP}]
+ dev-python/pytest[${PYTHON_USEDEP}]
+ dev-python/requests[${PYTHON_USEDEP}]
+ dev-python/selenium[${PYTHON_USEDEP}]
+ dev-python/tavalidate[${PYTHON_USEDEP}]
+ >=dev-python/tavern-3[${PYTHON_USEDEP}]
+ dev-python/werkzeug[${PYTHON_USEDEP}]
+ dev-python/xmltodict[${PYTHON_USEDEP}]
+ ')
+ app-arch/7zip
+ app-arch/unrar
+ app-arch/unzip
+ )
+"
+
+src_test() {
+ local EPYTEST_IGNORE=(
+ # network sandbox
+ tests/test_get_addrinfo.py
+ tests/test_getipaddress.py
+ tests/test_internetspeed.py
+ # Requires chromedriver
+ tests/test_functional_config.py
+ tests/test_functional_downloads.py
+ tests/test_functional_sorting.py
+ )
+ local EPYTEST_DESELECT=(
+ # bug #973599
+ 'tests/test_downloader.py::TestConnectionStateMachine::test_failed_connect_allows_retry'
+ # network sandbox
+ 'tests/test_cfg.py::TestValidators::test_validate_host'
+ 'tests/test_consistency.py::TestWiki'
+ 'tests/test_rss.py::TestRSS::test_rss_newznab_parser'
+ 'tests/test_rss.py::TestRSS::test_rss_nzedb_parser'
+ 'tests/test_urlgrabber.py::TestBuildRequest::test_http_basic'
+ 'tests/test_urlgrabber.py::TestBuildRequest::test_https_basic'
+ # Requires chromedriver
+ 'tests/test_functional_misc.py::TestShowLogging::test_showlog'
+ 'tests/test_functional_misc.py::TestQueueRepair::test_queue_repair'
+ 'tests/test_functional_misc.py::TestDaemonizing::test_daemonizing'
+ # Runs extract_pot.py which needs the git repo
+ 'tests/test_functional_misc.py::TestExtractPot::test_extract_pot'
+ )
+
+ epytest -s
+}
+
+src_install() {
+ insinto /usr/share/${PN}
+ doins -r email icons interfaces locale po sabnzbd scripts tools
+
+ exeinto /usr/share/${PN}
+ doexe SABnzbd.py
+
+ python_fix_shebang "${ED}"/usr/share/${PN}
+ python_optimize "${ED}"/usr/share/${PN}
+
+ newinitd "${FILESDIR}"/${PN}-r1.initd ${PN}
+ newconfd "${FILESDIR}"/${PN}.confd ${PN}
+
+ diropts -o ${PN} -g ${PN}
+ dodir /etc/${PN}
+ keepdir /var/log/${PN}
+
+ insinto "/etc/${PN}"
+ insopts -m 0600 -o "${PN}" -g "${PN}"
+ newins "${FILESDIR}"/${PN}-r1.ini ${PN}.ini
+
+ dodoc ISSUES.txt README.mkd
+
+ systemd_newunit "${FILESDIR}"/sabnzbd_at.service 'sabnzbd@.service'
+}
+
+pkg_postinst() {
+ if [[ -z "${REPLACING_VERSIONS}" ]]; then
+ # This is a new installation
+ einfo "Default directory: /var/lib/${PN}"
+ einfo
+ einfo "To add a user to the sabnzbd group so it can edit SABnzbd+ files, run:"
+ einfo
+ einfo " usermod -a -G sabnzbd <user>"
+ einfo
+ einfo "By default, SABnzbd will listen on TCP port 8080."
+ fi
+
+ optfeature "7z archive support" app-arch/7zip
+ optfeature "rar archive support" app-arch/unrar app-arch/rar
+ optfeature "zip archive support" app-arch/unzip
+}
diff --git a/net-nntp/suck/Manifest b/net-nntp/suck/Manifest
new file mode 100644
index 000000000000..54abbc71bd4b
--- /dev/null
+++ b/net-nntp/suck/Manifest
@@ -0,0 +1 @@
+DIST suck-4.3.5.tar.gz 153874 BLAKE2B ecc7d20f8844890acae94bb154583ace66b02c594514e925500cb9337aa1678622622286aaefedda066e73236d136e2383a846f0013f7e65f657757ae6cee818 SHA512 7bf7196db62416800c040ff9afd545c8a62e50a7f8dcb914aef1105d4bdc57ec4c198b1a42d5ad4e3c9455ddca3d516a55ca9cc62c88e010e8ba8eb4fcbeb275
diff --git a/net-nntp/suck/metadata.xml b/net-nntp/suck/metadata.xml
new file mode 100644
index 000000000000..1c44d249d208
--- /dev/null
+++ b/net-nntp/suck/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>contact@hacktivis.me</email>
+ <name>Haelwenn (lanodan) Monnier</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-nntp/suck/suck-4.3.5.ebuild b/net-nntp/suck/suck-4.3.5.ebuild
new file mode 100644
index 000000000000..115936d713ca
--- /dev/null
+++ b/net-nntp/suck/suck-4.3.5.ebuild
@@ -0,0 +1,69 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit autotools
+
+DESCRIPTION="Grab news from a remote NNTP server and feed them to another"
+HOMEPAGE="https://lazarus-pkgs.github.io/lazarus-pkgs/suck.html"
+SRC_URI="https://github.com/lazarus-pkgs/suck/archive/${PV}.tar.gz -> ${P}.tar.gz"
+LICENSE="public-domain"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~x86"
+IUSE="perl selinux ssl"
+
+RDEPEND="
+ sys-libs/gdbm:=
+ ssl? (
+ dev-libs/openssl:0=
+ )
+"
+DEPEND="${RDEPEND}
+ sys-libs/db
+ perl? ( dev-lang/perl )
+"
+RDEPEND+=" selinux? ( sec-policy/selinux-inn )"
+
+src_prepare() {
+ default
+
+ rm java/*.class || die
+
+ # Fix paths to the locations in Gentoo
+ sed -i \
+ -e 's:/usr/bin/rnews:/usr/$(get_libdir)/news/bin/rnews:' \
+ -e 's:/var/lib/news/history:/var/spool/news/db/history:' \
+ suck_config.h || die "path adaption sed failed"
+
+ eautoreconf
+}
+
+src_configure() {
+ if use ssl; then
+ sed -i -e 's/^SSL_/#SSL_/' Makefile.in || die "ssl sed failed"
+ fi
+
+ if use perl; then
+ sed -i -e 's/^PERL_/#PERL_/' Makefile.in || die "perl sed failed"
+ fi
+
+ econf --without-inn-lib --without-inn-include
+}
+
+src_compile() {
+ emake phrases.h
+ emake all lpost
+}
+
+src_install() {
+ dobin lmove lpost rpost suck testhost
+ doman man/*
+ dodoc CHANGELOG CONTENTS README*
+ docinto java
+ dodoc java/*
+ docinto perl
+ dodoc perl/*
+ docinto sample
+ dodoc sample/*
+}
diff --git a/net-nntp/tin/Manifest b/net-nntp/tin/Manifest
new file mode 100644
index 000000000000..d74d8a23b157
--- /dev/null
+++ b/net-nntp/tin/Manifest
@@ -0,0 +1 @@
+DIST tin-2.6.4.tar.xz 1640064 BLAKE2B 7a9ec66a55db282b2b3b7c977dfafd47cb72224873369ebbce05865a92719253f59a17d1b79fcee98c1c10a88e323eddcd88d40ea6719be96a407ed361aa4107 SHA512 63d7d8bf9d00644b05f128ab78960a1a1ccbeebbec9721517dc4971d07459d0a547adfd4eb8446a695d7303b43f45168a203c29f318b66fc79e4aba80cf8cc97
diff --git a/net-nntp/tin/metadata.xml b/net-nntp/tin/metadata.xml
new file mode 100644
index 000000000000..f3c5a987b09d
--- /dev/null
+++ b/net-nntp/tin/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <upstream>
+ <doc>http://www.tin.org/bin/man.cgi?section=1&amp;topic=tin</doc>
+ </upstream>
+ <use>
+ <flag name="cancel-locks">Enable Cancel-Lock header functionality</flag>
+ <flag name="gpg">Enable <pkg>app-crypt/gnupg</pkg> support</flag>
+ <flag name="libtls" restrict="&gt;=net-nntp/tin-2.6.2">Prefer <pkg>dev-libs/libretls</pkg> as SSL/TLS provider (ineffective with USE=-ssl)</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-nntp/tin/tin-2.6.4.ebuild b/net-nntp/tin/tin-2.6.4.ebuild
new file mode 100644
index 000000000000..95930a5eacdf
--- /dev/null
+++ b/net-nntp/tin/tin-2.6.4.ebuild
@@ -0,0 +1,128 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit optfeature toolchain-funcs
+
+DESCRIPTION="A threaded NNTP and spool based UseNet newsreader"
+HOMEPAGE="http://www.tin.org/"
+SRC_URI="ftp://ftp.tin.org/pub/news/clients/tin/stable/${P}.tar.xz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="amd64 arm ppc x86"
+IUSE="cancel-locks debug gnutls gpg libtls nls sasl socks5 ssl"
+
+RDEPEND="
+ dev-libs/icu:=
+ dev-libs/libpcre2:=
+ >=dev-libs/uriparser-0.9.8
+ dev-libs/uulib
+ net-dns/libidn2:=
+ sys-libs/ncurses:=
+ virtual/zlib:=
+ virtual/libiconv
+ cancel-locks? ( >=net-libs/canlock-3.0:= )
+ gpg? ( app-crypt/gnupg )
+ nls? ( virtual/libintl )
+ sasl? ( net-misc/gsasl[client] )
+ socks5? ( net-proxy/dante )
+ ssl? (
+ gnutls? ( net-libs/gnutls:= )
+ !gnutls? (
+ libtls? ( dev-libs/libretls:= )
+ !libtls? ( dev-libs/openssl:= )
+ )
+ )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ app-alternatives/yacc
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ # Windows only (bug #900278)
+ memset_s
+
+ # checking if the socks library uses socks4 prefix
+ Rinit
+ init
+)
+
+DOCS=(
+ README{,.MAC,.WIN}
+ doc/{CHANGES{,.old},CREDITS,TODO,WHATSNEW,filtering}
+)
+
+src_configure() {
+ tc-export AR CC RANLIB
+ tc-export_build_env
+
+ # The build incorrectly discards its local -I if $CPPFLAGS is set.
+ if [[ -n ${BUILD_CPPFLAGS} ]]; then
+ BUILD_CPPFLAGS+=' -I$(INCDIR)'
+ fi
+
+ local myeconfargs=(
+ $(use_enable cancel-locks)
+ $(use_with cancel-locks canlock)
+
+ $(use_enable debug)
+ $(use_enable gpg pgp-gpg)
+ $(use_enable nls)
+ $(use_with socks5)
+ --disable-mime-strict-charset
+ --enable-nntp
+ --enable-prototypes
+ --without-pcre
+ --with-pcre2-config
+ --with-coffee # easter egg :)
+ --with-nntp-default-server="${TIN_DEFAULT_SERVER:-${NNTPSERVER:-news.gmane.io}}"
+ --with-screen=ncursesw
+ )
+
+ if use ssl; then
+ if use gnutls; then
+ myeconfargs+=( --with-nntps=gnutls )
+ elif use libtls; then
+ myeconfargs+=( --with-nntps=libtls )
+ else
+ myeconfargs+=( --with-nntps=openssl )
+ fi
+ fi
+
+ myeconfargs+=(
+ # set default paths for utilities
+ --with-editor="${EPREFIX}"/usr/libexec/editor
+ --with-gpg="${EPREFIX}"/usr/bin/gpg
+ --with-ispell="${EPREFIX}"/usr/bin/aspell
+ --with-mailer="${EPREFIX}"/bin/mail
+
+ # set default paths for directories
+ --with-libdir="${EPREFIX}"/var/lib/news
+ --with-spooldir="${EPREFIX}"/var/spool/news
+ )
+
+ econf "${myeconfargs[@]}"
+}
+
+src_compile() {
+ # To build from the root dir you have to call `make build`, not just `make`.
+ emake build
+}
+
+src_install() {
+ default
+
+ emake DESTDIR="${D}" install_sysdefs
+ emake -C src DESTDIR="${D}" install_nls_man
+
+ dodoc doc/{*.sample,*.txt}
+}
+
+pkg_postinst() {
+ optfeature "spell checker support" app-text/aspell
+}