projects/guix·blob python-team · refs

1304 lines · 48.8 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2013 Cyril Roelandt <[email protected]>
3;;; Copyright © 2014 Kevin Lemonnier <[email protected]>
4;;; Copyright © 2015, 2017 Ludovic Courtès <[email protected]>
5;;; Copyright © 2015-2023 Efraim Flashner <[email protected]>
6;;; Copyright © 2016 Nikita <[email protected]>
7;;; Copyright © 2017 Marius Bakke <[email protected]>
8;;; Copyright © 2017–2023 Tobias Geerinckx-Rice <[email protected]>
9;;; Copyright © 2020 Oleg Pykhalov <[email protected]>
10;;; Copyright © 2020, 2021, 2022 Vinicius Monego <[email protected]>
11;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
12;;; Copyright © 2020 Brett Gilio <[email protected]>
13;;; Copyright © 2021 WinterHound <[email protected]>
14;;; Copyright © 2022 Jai Vetrivelan <[email protected]>
15;;; Copyright © 2022 jgart <[email protected]>
16;;; Copyright © 2023, 2025 Janneke Nieuwenhuizen <[email protected]>
17;;; Copyright © 2024-2026 Ashish SHUKLA <[email protected]>
18;;; Copyright © 2024 Christian Miller <[email protected]>
19;;; Copyright © 2024 Ricardo Wurmus <[email protected]>
20;;; Copyright © 2025 Zheng Junjie <[email protected]>
21;;; Copyright © 2026 Daniel Littlewood <[email protected]>
22;;;
23;;; This file is part of GNU Guix.
24;;;
25;;; GNU Guix is free software; you can redistribute it and/or modify it
26;;; under the terms of the GNU General Public License as published by
27;;; the Free Software Foundation; either version 3 of the License, or (at
28;;; your option) any later version.
29;;;
30;;; GNU Guix is distributed in the hope that it will be useful, but
31;;; WITHOUT ANY WARRANTY; without even the implied warranty of
32;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
33;;; GNU General Public License for more details.
34;;;
35;;; You should have received a copy of the GNU General Public License
36;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
37
38(define-module (gnu packages irc)
39 #:use-module (guix gexp)
40 #:use-module ((guix licenses) #:prefix license:)
41 #:use-module (guix download)
42 #:use-module (guix git-download)
43 #:use-module (guix packages)
44 #:use-module (guix utils)
45 #:use-module (guix build-system cmake)
46 #:use-module (guix build-system gnu)
47 #:use-module (guix build-system go)
48 #:use-module (guix build-system guile)
49 #:use-module (guix build-system haskell)
50 #:use-module (guix build-system meson)
51 #:use-module (guix build-system pyproject)
52 #:use-module (guix build-system qt)
53 #:use-module (gnu packages)
54 #:use-module (gnu packages admin)
55 #:use-module (gnu packages aspell)
56 #:use-module (gnu packages autogen)
57 #:use-module (gnu packages autotools)
58 #:use-module (gnu packages base)
59 #:use-module (gnu packages bash)
60 #:use-module (gnu packages backup)
61 #:use-module (gnu packages boost)
62 #:use-module (gnu packages check)
63 #:use-module (gnu packages code)
64 #:use-module (gnu packages compression)
65 #:use-module (gnu packages curl)
66 #:use-module (gnu packages cyrus-sasl)
67 #:use-module (gnu packages databases)
68 #:use-module (gnu packages documentation)
69 #:use-module (gnu packages enchant)
70 #:use-module (gnu packages file)
71 #:use-module (gnu packages gettext)
72 #:use-module (gnu packages geo)
73 #:use-module (gnu packages glib)
74 #:use-module (gnu packages gnome)
75 #:use-module (gnu packages gnupg)
76 #:use-module (gnu packages golang)
77 #:use-module (gnu packages golang-build)
78 #:use-module (gnu packages golang-check)
79 #:use-module (gnu packages golang-web)
80 #:use-module (gnu packages golang-xyz)
81 #:use-module (gnu packages graphviz)
82 #:use-module (gnu packages gtk)
83 #:use-module (gnu packages guile)
84 #:use-module (gnu packages guile-xyz)
85 #:use-module (gnu packages haskell-check)
86 #:use-module (gnu packages haskell-crypto)
87 #:use-module (gnu packages haskell-xyz)
88 #:use-module (gnu packages javascript)
89 #:use-module (gnu packages lua)
90 #:use-module (gnu packages lxqt)
91 #:use-module (gnu packages man)
92 #:use-module (gnu packages messaging)
93 #:use-module (gnu packages ncurses)
94 #:use-module (gnu packages openldap)
95 #:use-module (gnu packages kde-frameworks)
96 #:use-module (gnu packages kde-internet)
97 #:use-module (gnu packages password-utils)
98 #:use-module (gnu packages pcre)
99 #:use-module (gnu packages perl)
100 #:use-module (gnu packages pkg-config)
101 #:use-module (gnu packages prometheus)
102 #:use-module (gnu packages python)
103 #:use-module (gnu packages python-build)
104 #:use-module (gnu packages python-crypto)
105 #:use-module (gnu packages python-xyz)
106 #:use-module (gnu packages regex)
107 #:use-module (gnu packages ruby)
108 #:use-module (gnu packages ruby-xyz)
109 #:use-module (gnu packages sphinx)
110 #:use-module (gnu packages sqlite)
111 #:use-module (gnu packages qt)
112 #:use-module (gnu packages tcl)
113 #:use-module (gnu packages textutils)
114 #:use-module (gnu packages time)
115 #:use-module (gnu packages tls)
116 #:use-module (gnu packages web)
117 #:use-module (srfi srfi-1)
118 #:use-module (srfi srfi-26))
119
120(define-public glirc
121 (package
122 (name "glirc")
123 (version "2.41") ; inherited by glirc-* extensions below
124 (source
125 (origin
126 (method url-fetch)
127 (uri (hackage-uri "glirc" version))
128 (sha256
129 (base32 "1sigh9154jxsisszj4sm3zbjja0mgqk9hrv7a4rr2c976pqri9yb"))))
130 (build-system haskell-build-system)
131 (arguments
132 (list
133 #:phases
134 #~(modify-phases %standard-phases
135 (add-before 'configure 'update-constraints
136 (lambda _
137 (substitute* "glirc.cabal"
138 (("vty\\s+\\^>=6.2") "vty"))))
139 (add-after 'install 'install-extra-documentation
140 (lambda _
141 (install-file "glirc.1"
142 (string-append #$output "/share/man/man1"))
143 ;; The man page is very terse and punts to the GitHub wiki for real
144 ;; information. Some of that is also in the README, so install it.
145 (install-file "README.md"
146 (string-append #$output "/share/doc/"
147 #$name "-" #$version)))))))
148 (native-inputs
149 (list ghc-hunit))
150 (inputs
151 (list ghc-async
152 ghc-attoparsec
153 ghc-base64-bytestring
154 ghc-config-schema
155 ghc-config-value
156 ghc-curve25519
157 ghc-free
158 ghc-githash
159 ghc-hashable
160 ghc-hookup
161 ghc-hsopenssl
162 ghc-irc-core
163 ghc-kan-extensions
164 ghc-lens
165 ghc-network
166 ghc-psqueues
167 ghc-random
168 ghc-regex-tdfa
169 ghc-split
170 ghc-typed-process
171 ghc-unordered-containers
172 ghc-vector
173 ghc-vty
174 ghc-vty-unix))
175 (home-page "https://github.com/glguy/irc-core")
176 (synopsis "Console IRC client")
177 (description
178 "Glirc is a console IRC client that focuses on providing both high-detail
179and concise views of an IRC connection. All views and transformation are
180dynamic and don't change the underlying model. It also provides advanced
181line-editing features including syntax-highlighting, multi-line buffering,
182and argument placeholders.")
183 (license license:isc)))
184
185(define-public glirc-lua
186 (package
187 (name "glirc-lua")
188 (version (package-version glirc))
189 (source
190 (origin
191 (method git-fetch)
192 (uri (git-reference
193 (url "https://github.com/glguy/irc-core")
194 (commit (string-append "v" version))))
195 (file-name (git-file-name name version))
196 (sha256
197 (base32 "1hadxsahl30jhgk8vvcg7lwndzc282iybcjam87xx5c0lh0mfzan"))))
198 (build-system meson-build-system)
199 (arguments
200 (list
201 #:modules
202 '((guix build meson-build-system)
203 (guix build utils)
204 (ice-9 match))
205 #:phases
206 #~(modify-phases %standard-phases
207 (add-after 'unpack 'enter-subdirectory
208 (lambda _
209 (chdir "lua-extension")))
210 (replace 'install
211 (lambda _
212 (install-file "glirc-lua.so" (string-append #$output "/lib"))))
213 (add-after 'install 'document
214 (lambda _
215 (with-directory-excursion "../lua-extension/doc"
216 ;; Guix's ldoc command is a shell script without a shebang.
217 (invoke "sh" "ldoc" ".")
218 (let ((doc (string-append #$output "/share/doc/" #$name)))
219 (mkdir-p doc)
220 (copy-recursively "api" doc)))))
221 (add-after 'document 'leave-subdirectory
222 ;; Let default phases like 'install-license-files do their thing.
223 (lambda _
224 (chdir ".."))))))
225 (native-inputs
226 (list pkg-config
227 ;; For building the API documentation.
228 lua lua-filesystem lua-ldoc lua-penlight))
229 (inputs
230 (list lua))
231 (home-page (package-home-page glirc))
232 (synopsis "Lua scripting extension to the glirc IRC client")
233 (description
234 "This extension lets you script the glirc IRC client using Lua.
235To use it, you must tell @command{glirc} exactly where to find
236@file{glirc-lua.so} by adding something like this to your
237@file{~/.config/glirc/config}:
238
239@example
240extensions:
241 * path: \"../../.guix-profile/lib/glirc-lua.so\"
242 args: [\"example.lua\", @dots{}]
243@end example
244
245Also ensure that @file{example.lua} finds any Lua libraries it needs, e.g., by
246setting @env{LUA_PATH} and @env{LUA_CPATH} in glirc's run-time environment.")
247 (license (package-license glirc))))
248
249(define-public quassel
250 (package
251 (name "quassel")
252 (version "0.14.0")
253 (source
254 (origin
255 (method url-fetch)
256 (uri (string-append "https://quassel-irc.org/pub/quassel-"
257 version ".tar.xz"))
258 (sha256
259 (base32
260 "042fzssydvv35jjknziph8iyyjsyrsb2hp3d0ix0bqbagbrpf1q9"))
261 (modules '((guix build utils)))
262 ;; We don't want to install the bundled inxi script.
263 (snippet
264 '(begin
265 (delete-file "data/scripts/inxi")))))
266 (build-system qt-build-system)
267 (arguments
268 ;; The three binaries are not mutually exlusive, and are all built
269 ;; by default.
270 '(#:configure-flags '(;;"-DWANT_QTCLIENT=OFF"
271 ;;"-DWANT_CORE=OFF"
272 ;;"-DWANT_MONO=OFF"
273 "-DWITH_KDE=OFF"
274 "-DWITH_BUNDLED_ICONS=ON"
275 "-DWITH_OXYGEN_ICONS=ON"
276 ;; This disables link previews.
277 "-DWITH_WEBENGINE=OFF")
278 #:phases
279 (modify-phases %standard-phases
280 (add-after 'unpack 'patch-inxi-reference
281 (lambda* (#:key inputs #:allow-other-keys)
282 (let ((inxi (search-input-file inputs "/bin/inxi")))
283 (symlink inxi "data/scripts/inxi")))))))
284 (native-inputs
285 (list extra-cmake-modules pkg-config qttools-5))
286 (inputs
287 (list boost
288 inxi-minimal
289 libdbusmenu-qt
290 perl
291 qca
292 qtbase-5
293 qtmultimedia-5
294 qtscript-5
295 qtsvg-5
296 qtwayland-5
297 sonnet
298 zlib))
299 (home-page "https://quassel-irc.org/")
300 (synopsis "Distributed IRC client")
301 (description "Quassel is a distributed IRC client, meaning that one or more
302clients can attach to and detach from the central core. It resembles the
303popular combination of screen and a text-based IRC client such as WeeChat or
304irssi, but graphical.")
305 (license (list license:gpl2 license:gpl3)))) ;; dual licensed
306
307(define-public irssi
308 (package
309 (name "irssi")
310 (version "1.4.5")
311 (source (origin
312 (method url-fetch)
313 (uri (string-append "https://github.com/irssi/irssi/"
314 "releases/download/" version "/irssi-"
315 version ".tar.xz"))
316 (sha256
317 (base32
318 "0qp05z2qfqhp5wawxqz7qwv2fh9sb801z032i5d7h8nn1b5m3abj"))))
319 (build-system gnu-build-system)
320 (arguments
321 `(#:phases
322 (modify-phases %standard-phases
323 (replace 'configure
324 (lambda* (#:key inputs outputs #:allow-other-keys)
325 (let ((out (assoc-ref outputs "out")))
326 (setenv "CONFIG_SHELL" (which "bash"))
327 (invoke "./configure"
328 (string-append "--prefix=" out)
329 (string-append "--enable-true-color")
330 (string-append "--with-proxy")
331 (string-append "--with-socks")))))
332 (add-before 'check 'set-home
333 (lambda _
334 (setenv "HOME" (getcwd)))))))
335 (inputs
336 (list glib ncurses openssl perl utf8proc))
337 (native-inputs
338 (list pkg-config))
339 (home-page "https://irssi.org/")
340 (synopsis "Extensible terminal-based IRC client")
341 (description
342 "Irssi is a text terminal-based @acronym{IRC, Internet relay chat} client.
343It is completely themable and extensible through Perl scripts, of which many
344have already been written by the community.
345
346Plug-ins add support for other protocols like @acronym{SILC, Secure Internet Live
347Conferencing} and @acronym{ICB, Internet Citizen's Band}.")
348 (license license:gpl2+)))
349
350(define-public weechat
351 (package
352 (name "weechat")
353 (version "4.10.1")
354 (source (origin
355 (method git-fetch)
356 (uri (git-reference
357 (url "https://github.com/weechat/weechat")
358 (commit (string-append "v" version))))
359 (file-name (git-file-name name version))
360 (sha256
361 (base32
362 "0zih0ipvvrhdcwpkyqym4c1y1dxrxdi25bvbwvadxcx3jcq41f8l"))))
363 (build-system cmake-build-system)
364 (outputs '("out" "doc"))
365 (native-inputs
366 (append (list gettext-minimal pkg-config)
367 (if (target-x86?)
368 (list ruby-asciidoctor/minimal)
369 '())))
370 (inputs
371 (list aspell
372 curl
373 gnutls
374 libgcrypt
375 ncurses
376 zlib
377 (list zstd "lib")
378 ;; Scripting language plug-ins.
379 guile-3.0
380 lua
381 perl
382 python
383 ruby
384 tcl
385 cjson))
386 (arguments
387 (list #:configure-flags
388 #~(list "-DENABLE_PHP=OFF"
389 #$@(if (target-x86?)
390 #~("-DENABLE_MAN=ON"
391 "-DENABLE_DOC=ON"
392 "-DENABLE_DOC_INCOMPLETE=ON")
393 #~()))
394 #:phases
395 #~(modify-phases %standard-phases
396 #$@(if (target-x86?)
397 #~((add-after 'install 'move-doc
398 (lambda _
399 (let ((from (string-append #$output
400 "/share/doc/weechat"))
401 (to (string-append #$output:doc
402 "/share/doc/weechat")))
403 (mkdir-p (string-append #$output:doc
404 "/share/doc"))
405 (rename-file from to)))))
406 #~()))))
407 (synopsis "Extensible chat client")
408 (description "WeeChat (Wee Enhanced Environment for Chat) is an
409@dfn{Internet Relay Chat} (IRC) client, which is designed to be light and fast.
410The client uses a curses frontend, and there are remote interfaces for Web,
411Qt, Android, and Emacs.
412
413Everything in WeeChat can be done with the keyboard, though it also supports
414using a mouse. It is customizable and extensible with plugins and scripts.")
415 (home-page "https://weechat.org/")
416 (license license:gpl3)))
417
418(define-public srain
419 (package
420 (name "srain")
421 (version "1.8.1")
422 (source
423 (origin
424 (method git-fetch)
425 (uri (git-reference
426 (url "https://github.com/SrainApp/srain")
427 (commit version)))
428 (file-name (git-file-name name version))
429 (sha256
430 (base32 "105z2kbj9ar6zk6i1qrbysrp9vbz692kbl2dwdxcwly0yh4cbd0p"))))
431 (build-system meson-build-system)
432 (arguments
433 (list
434 #:configure-flags #~(list "-Dapp_indicator=false")
435 #:tests? #f ;there are no tests
436 #:glib-or-gtk? #t))
437 (native-inputs
438 (list gettext-minimal
439 `(,glib "bin")
440 pkg-config
441 python-wrapper
442 python-sphinx))
443 (inputs
444 (list glib-networking
445 gsettings-desktop-schemas
446 gtk+
447 libconfig
448 libsecret
449 libsoup-minimal
450 openssl))
451 (home-page "https://srain.silverrainz.me")
452 (synopsis "Modern IRC client written in GTK")
453 (description
454 "Srain is an IRC client written in GTK. It aims to be modern and easy to
455use while still remaining useful to power users. It also has partial support
456for the IRCv3 protocol.")
457 (license license:gpl3+)))
458
459(define-public ircii
460 (package
461 (name "ircii")
462 (version "20210314")
463 (source (origin
464 (method url-fetch)
465 (uri (string-append "https://ircii.warped.com/"
466 name "-" version ".tar.gz"))
467 (sha256
468 (base32
469 "04jczayv1vdn21fcf5zkfaa98sy7d6ydrv2sns2i67gvya2z28j3"))))
470 (build-system gnu-build-system)
471 ;; TODO: We should package a small socks4/5 library/server to configure
472 ;; ircii with socks client. `ghc-socks' pulls in lots of haskell, which
473 ;; is too big.
474 (arguments
475 `(#:tests? #f
476 #:configure-flags (list
477 "--enable-ipv6"
478 "--with-emacs-meta-keys"
479 (string-append "--with-openssl="
480 (assoc-ref %build-inputs "openssl")))
481 #:phases
482 (modify-phases %standard-phases
483 (add-after 'unpack 'patch-bsdinstall-absolute-path-bins
484 (lambda* (#:key inputs #:allow-other-keys)
485 (substitute* "bsdinstall"
486 (("/bin/strip") "strip")
487 (("/bin/cp") "cp")
488 (("/bin/chmod") "chmod")
489 (("/etc/chown") "chown")
490 (("/bin/chgrp") "chgrp")
491 (("/bin/mkdir") "mkdir")
492 (("/bin/rm") "rm")
493 (("/bin/mv") "mv")))))))
494 (inputs
495 (list ncurses openssl))
496 (native-inputs
497 (list pkg-config perl))
498 (home-page "http://www.eterna.com.au/ircii/")
499 (synopsis "Terminal-based IRC and ICB client")
500 (description
501 "ircII is a terminal based IRC and ICB client for UNIX systems.")
502 (license license:bsd-3)))
503
504(define-public catgirl
505 (package
506 (name "catgirl")
507 (version "2.2a")
508 (source
509 (origin
510 (method git-fetch)
511 (uri (git-reference
512 (url "https://git.causal.agency/catgirl")
513 (commit version)))
514 (file-name (git-file-name name version))
515 (sha256
516 (base32 "0fvjx4a523bf2m522ya8r94ikhs8d864hrd85jn6bm414sga877p"))))
517 (build-system gnu-build-system)
518 (arguments
519 (list
520 #:tests? #f ; no tests
521 #:make-flags
522 #~(list (string-append "prefix=" #$output)
523 (string-append "CC=" #$(cc-for-target)))))
524 (native-inputs
525 (list universal-ctags pkg-config))
526 (inputs
527 (list libressl ncurses))
528 (home-page "https://git.causal.agency/catgirl")
529 (synopsis "TLS-only terminal IRC client")
530 (description
531 "@command{catgirl} is a TLS-only terminal IRC client.
532
533Notable features include:
534@itemize
535@item Tab complete: most recently seen or mentioned nicks are completed first.
536 Commas are inserted between multiple nicks.
537@item Prompt: the prompt clearly shows whether input will be interpreted as a
538command or sent as a message.
539@item Split scroll: keeps the latest messages in view while scrolling.
540@item URL detection: recent URLs from a particular user or matching a
541substring can be opened or copied.
542@item Nick coloring: color generation based on usernames remains stable across
543nick changes. Mentions of users in messages are colored.
544@item Topic diffing: the modified portion of a channel topic change is
545highlighted.
546@end itemize")
547 (license license:gpl3+)))
548
549(define-public ii
550 (package
551 (name "ii")
552 (version "2.0")
553 (source (origin
554 (method url-fetch)
555 (uri (string-append "http://dl.suckless.org/tools/"
556 name "-" version ".tar.gz"))
557 (sha256
558 (base32
559 "0ns2wpzkk7qzhv7addgr0w5as0m7jwag5nxai2dr61wc436syrsg"))))
560 (build-system gnu-build-system)
561 (arguments
562 (list #:tests? #f ; no tests
563 #:make-flags
564 #~(list (string-append "PREFIX=" #$output)
565 (string-append "CC=" #$(cc-for-target)))
566 #:phases
567 #~(modify-phases %standard-phases
568 (delete 'configure)))) ; no configure script
569 (home-page "https://tools.suckless.org/ii/")
570 (synopsis "FIFO and file system based IRC client")
571 (description
572 "ii (Irc it) is a minimalist FIFO and file system based IRC client.")
573 (license license:expat)))
574
575(define-public sic
576 (package
577 (name "sic")
578 (version "1.3")
579 (source (origin
580 (method url-fetch)
581 (uri (string-append "http://dl.suckless.org/tools/"
582 name "-" version ".tar.gz"))
583 (sha256
584 (base32
585 "1lk57mrrqgky37bjsnp72s8libywzsrbbjq8bpmz4xdw7smqyirh"))))
586 (build-system gnu-build-system)
587 (arguments
588 `(#:tests? #f ; no tests
589 #:make-flags (list ,(string-append "CC=" (cc-for-target))
590 (string-append "PREFIX=" %output))
591 #:phases
592 (modify-phases %standard-phases
593 (delete 'configure)))) ; no configure
594 (home-page "https://tools.suckless.org/sic/")
595 (synopsis "Simple IRC client")
596 (description
597 "sic is a simple IRC client, even more minimalistic than ii.")
598 (license license:expat)))
599
600(define-public kirc
601 (package
602 (name "kirc")
603 (version "1.2.2")
604 (source (origin
605 (method git-fetch)
606 (uri (git-reference
607 (url "https://github.com/mcpcpc/kirc")
608 (commit version)))
609 (file-name (git-file-name name version))
610 (sha256
611 (base32 "01z69h67j53myzlzy7lqxdhm0knwz51lyw8kqlhf6064ryrq83fh"))))
612 (build-system gnu-build-system)
613 (arguments
614 `(#:tests? #f ; no tests
615 #:make-flags
616 (list (string-append "CC=" ,(cc-for-target))
617 (string-append "PREFIX=" %output))
618 #:phases
619 (modify-phases %standard-phases
620 (delete 'configure)))) ; No ./configure script
621 (home-page "https://kirc.dev/")
622 (synopsis "IRC client written in POSIX C99")
623 (description "Kirc is an Internet Relay Chat (IRC) client. It includes
624support for Simple Authentication and Security Layer (SASL), the
625client-to-client (CTCP) protocol, simple chat history logging, synchronous
626message handling, multi-channel joining at server connection, full support for
627all RFC 2812 commands, and customized color scheme definitions.")
628 (license license:expat)))
629
630(define-public kvirc
631 (package
632 (name "kvirc")
633 (version "5.2.8")
634 (source
635 (origin
636 (method git-fetch)
637 (uri (git-reference
638 (url "https://github.com/kvirc/KVIrc")
639 (commit version)))
640 (file-name (git-file-name name version))
641 (sha256
642 (base32 "0rrf50pha0f2h17icyrxps5ld7lm4r8mzvczyywwa15ki64kr7np"))))
643 (build-system qt-build-system)
644 (arguments
645 (list
646 #:qtbase qtbase
647 #:tests? #f)) ;no tests
648 (native-inputs
649 (list doxygen
650 graphviz
651 pkg-config))
652 (inputs
653 (list enchant
654 gettext-minimal
655 openssl
656 perl
657 python
658 qt5compat
659 qtmultimedia
660 qtsvg
661 qtwebengine
662 qtwayland
663 zlib))
664 (home-page "https://www.kvirc.net/")
665 (synopsis "IRC client based on QT GUI toolkit")
666 (description
667 "KVIrc is a IRC client based on the Qt GUI toolkit.")
668 ;; doc/LICENSE-OPENSSL
669 ;; doc/LICENSE-AMIP
670 ;; GPL2+ mentioned in README
671 (license (list license:gpl2+ license:openssl))))
672
673(define-public limnoria
674 (package
675 (name "limnoria")
676 (version "2025.5.3")
677 (source
678 (origin
679 (method url-fetch)
680 (uri (pypi-uri "limnoria" version))
681 (sha256
682 (base32 "0azwakngdksmi86i0yd00gqzkakqxcagldzksl6cbpphz58kd7hi"))))
683 (build-system pyproject-build-system)
684 (arguments
685 (list
686 #:phases
687 #~(modify-phases %standard-phases
688 (replace 'check
689 (lambda* (#:key tests? #:allow-other-keys)
690 (when tests?
691 (setenv "PATH" (string-append #$output "/bin:" (getenv "PATH")))
692 (invoke "supybot-test" "test" "-v" "--no-network")))))))
693 (native-inputs
694 (list python-setuptools
695 python-wheel))
696 (inputs
697 (list python-pytz
698 python-chardet
699 python-dateutil
700 python-gnupg
701 python-feedparser
702 python-sqlalchemy
703 python-socksipy-branch
704 python-ecdsa))
705 (home-page "https://github.com/ProgVal/Limnoria")
706 (synopsis "Modified version of Supybot (an IRC bot and framework)")
707 (description
708 "Modified version of Supybot with Python 3 and IRCv3 support,
709embedded web server, translations (fr, fi, it, hu, de), and many
710other enhancements and bug fixes.")
711 (license license:bsd-3)))
712
713(define-public epic5
714 (package
715 (name "epic5")
716 (version "3.0.3")
717 (source
718 (origin
719 (method url-fetch)
720 (uri (string-append "http://ftp.epicsol.org/pub/"
721 "epic/EPIC5-PRODUCTION/"
722 name
723 "-"
724 version
725 ".tar.xz"))
726 (sha256
727 (base32 "09nkg66rbkz107xrhqhg2xgda8vm1zqsya6pnmjhn10lbhhi3933"))))
728 (build-system gnu-build-system)
729 (arguments
730 (list
731 ;; XXX: No test-target, altough some tests in regress/
732 ;; The authors claim they run tests manually.
733 #:tests? #f
734 #:phases
735 #~(modify-phases %standard-phases
736 (add-after 'unpack 'patch-perl
737 (lambda* (#:key inputs #:allow-other-keys)
738 (substitute* "regress/crash-irc"
739 (("perl5")
740 (search-input-file inputs "bin/perl")))))
741 (replace 'configure
742 (lambda* (#:key inputs #:allow-other-keys)
743 ;; The tarball uses a very old version of autconf. It does not
744 ;; understand extra flags like `--enable-fast-install', so
745 ;; we need to invoke it with just what it understands.
746 ;; 'configure' doesn't understand '--host'.
747 #$@(if (%current-target-system)
748 `((setenv "CHOST"
749 ,(%current-target-system)))
750 '())
751 (setenv "CONFIG_SHELL"
752 (search-input-file inputs "bin/bash"))
753 (setenv "SHELL"
754 (search-input-file inputs "bin/bash"))
755 (invoke "./configure"
756 (string-append "--prefix="
757 #$output)
758 "--with-ipv6"
759 "--with-libarchive"
760 ;; We use libressl because openssl does not come
761 ;; with the lib/libssl.a which is needed for epic5.
762 ;; XXX: No matter which implementation is chosen,
763 ;; epic5 fails to connect to tls ports of roundrobin
764 ;; irc networks. This however is believed to be an
765 ;; protocol issue at epic5 related to ircd.
766 (string-append "--with-ssl="
767 #$(this-package-input "libressl"))
768 (string-append "--with-tcl="
769 (search-input-file inputs
770 "/lib/tclConfig.sh"))))))))
771 (inputs (list libressl
772 ncurses
773 libarchive ;CHANGELOG: "Support for loading zip files"
774 perl
775 tcl
776 ruby))
777 (native-inputs (list pkg-config))
778 (home-page "http://epicsol.org")
779 (synopsis "IRC Client")
780 (description
781 "EPIC is a IRC client that has been under active development for
782over 20 years. It is stable and mature, and offers an excellent ircII
783interface for those who are accustomed to the ircII way of doing things.")
784 (license (list license:bsd-3
785 license:isc
786 license:bsd-4
787 ;; The epic license is equal to the standard three-clause
788 ;; BSD license except that you are not permitted to remove the
789 ;; "Redistribution is permitted" clause of the license if you
790 ;; distribute binaries.
791 (license:non-copyleft "http://epicsol.org/copyright")))))
792
793(define-public python-girc
794 (package
795 (name "python-girc")
796 (version "0.4.0")
797 (source
798 (origin
799 (method url-fetch)
800 (uri (pypi-uri "girc" version))
801 (sha256
802 (base32 "0gbx64j8782m1x2w9dkiynvshj43m0y4i0xnsiz0gsmyfl0jk8jl"))
803 (snippet
804 #~(begin (use-modules (guix build utils))
805 (substitute* '("girc/utils.py"
806 "girc/imapping.py")
807 (("collections.MutableSequence")
808 "collections.abc.MutableSequence")
809 (("collections.MutableMapping")
810 "collections.abc.MutableMapping")
811 (("collections.Mapping")
812 "collections.abc.Mapping"))))))
813 (build-system pyproject-build-system)
814 (arguments
815 (list
816 #:phases
817 '(modify-phases %standard-phases
818 (add-after 'unpack 'delete-some-tests
819 ;; This file depends on python-irc-parser-tests, which depends on
820 ;; this package.
821 (lambda _ (delete-file "tests/test_parse.py"))))))
822 (propagated-inputs (list python-docopt))
823 (native-inputs (list python-pytest python-setuptools))
824 (home-page "https://github.com/DanielOaks/girc")
825 (synopsis "IRC library for Python")
826 (description
827 "This package provides an IRC library for Python, based on asyncio.")
828 (license license:isc)))
829
830(define-public python-ircmatch
831 (package
832 (name "python-ircmatch")
833 (version "1.2")
834 (source
835 (origin
836 (method url-fetch)
837 (uri (pypi-uri "ircmatch" version))
838 (sha256
839 (base32 "1bn92bnk958c097jhwkas24i4a07h905hifix7bg111npc48536l"))))
840 (build-system pyproject-build-system)
841 (arguments
842 (list #:test-backend #~'custom
843 #:test-flags #~(list "example.py")))
844 (native-inputs (list python-setuptools))
845 (home-page "https://pypi.org/project/ircmatch/")
846 (synopsis "Library for matching IRC masks based on atheme")
847 (description "This is a python extension which provides string comparison
848and matching functions from Atheme. They are hand-optimized for high
849performance when matching IRC hostmasks.")
850 (license license:isc)))
851
852(define-public python-irc-parser-tests
853 (package
854 (name "python-irc-parser-tests")
855 (version "0.0.4")
856 (source
857 (origin
858 (method git-fetch) ; PyPI has a broken tests and data locations
859 (uri (git-reference
860 (url "https://github.com/ircdocs/parser-tests")
861 (commit (string-append "v" version))))
862 (file-name (git-file-name name version))
863 (sha256
864 (base32 "0x0psq31f43d88b8jhaqwd9f1ykiqm4j13i8nxgcgkgp992cw002"))))
865 (build-system pyproject-build-system)
866 (arguments
867 (list #:test-backend #~'custom
868 #:test-flags #~(list "test.py")))
869 (propagated-inputs (list python-pyyaml))
870 (native-inputs
871 (list python-girc
872 python-ircmatch
873 python-setuptools))
874 (home-page "https://github.com/ircdocs/parser-tests")
875 (synopsis "Tests for various IRC protocol parsers")
876 (description
877 "This package provides a library of tests for various IRC protocol
878parsers")
879 (license (list license:cc0
880 license:public-domain))))
881
882(define-public go-gopkg-in-irc-v3
883 (package
884 (name "go-gopkg-in-irc-v3")
885 (version "3.1.4")
886 (source
887 (origin
888 (method git-fetch)
889 (uri (git-reference
890 (url "https://gopkg.in/irc.v3")
891 (commit (string-append "v" version))))
892 (file-name (git-file-name name version))
893 (sha256
894 (base32 "0f2vv947yf9ygy8ylwqkd9yshybfdsbsp9pffjyvm7l7rnq5da60"))))
895 (build-system go-build-system)
896 (arguments
897 (list
898 #:import-path "gopkg.in/irc.v3"
899 #:phases
900 #~(modify-phases %standard-phases
901 ;; Testscases is a git submodule to
902 ;; <https://github.com/go-irc/irc-parser-tests> which is an
903 ;; unmaintained clone of <https://github.com/ircdocs/parser-tests>
904 ;; which is packed in Guix as python-irc-parser-tests. Tests data
905 ;; (YAML files) are distributed as Python package and located in
906 ;; <lib/python3.11/site-packages/parser_tests/data/>.
907 (add-before 'check 'install-testcases-data
908 (lambda* (#:key import-path #:allow-other-keys)
909 (with-directory-excursion (string-append "src/" import-path)
910 (mkdir-p "./testcases/tests")
911 (for-each
912 (lambda (file)
913 (install-file file "./testcases/tests"))
914 (find-files
915 #$(this-package-native-input "python-irc-parser-tests") "\\.yaml$"))))))))
916 (native-inputs
917 (list go-github-com-stretchr-testify python-irc-parser-tests))
918 (propagated-inputs
919 (list go-gopkg-in-yaml-v2))
920 (home-page "https://gopkg.in/irc.v3")
921 (synopsis "Low-level IRC library for Go")
922 (description "Package irc provides a simple IRC library meant as a
923building block for other projects.")
924 (license license:expat)))
925
926(define-public go-gopkg-in-irc-v4
927 (package
928 (inherit go-gopkg-in-irc-v3)
929 (name "go-gopkg-in-irc-v4")
930 (version "4.0.0")
931 (source
932 (origin
933 (method git-fetch)
934 (uri (git-reference
935 (url "https://gopkg.in/irc.v4")
936 (commit (string-append "v" version))))
937 (file-name (git-file-name name version))
938 (sha256
939 (base32 "1yr7m1vz7fj0jbmk8njg54nyc9hx4kv24k13sjc4zj5fyqljj0p2"))))
940 (build-system go-build-system)
941 (arguments
942 (list
943 #:import-path "gopkg.in/irc.v4"
944 #:phases
945 #~(modify-phases %standard-phases
946 ;; testcases is renamed to _testcases in v4 for some reason.
947 (add-before 'check 'adjust-testcases-data
948 (lambda* (#:key import-path #:allow-other-keys)
949 (with-directory-excursion (string-append "src/" import-path)
950 (mkdir-p "./_testcases/tests")
951 (for-each
952 (lambda (file)
953 (install-file file "./_testcases/tests"))
954 (find-files
955 #$(this-package-native-input "python-irc-parser-tests") "\\.yaml$"))))))))
956 (propagated-inputs
957 (modify-inputs propagated-inputs
958 (append go-golang-org-x-time)))))
959
960(define-public chathistorysync
961 (package
962 (name "chathistorysync")
963 (version "0.2.1")
964 (source
965 (origin
966 (method git-fetch)
967 (uri (git-reference
968 (url "https://git.sr.ht/~emersion/chathistorysync")
969 (commit (string-append "v" version))))
970 (file-name (git-file-name name version))
971 (sha256
972 (base32 "00l4nba7bdv53g85qc07x32fkyc4n6lzag9xkkk58f61ljja5ill"))))
973 (build-system go-build-system)
974 (arguments
975 (list #:import-path "git.sr.ht/~emersion/chathistorysync"
976 #:install-source? #f ; chathistorysync is an end-user application.
977 #:phases
978 #~(modify-phases %standard-phases
979 (add-after 'build 'doc
980 (lambda _
981 (with-directory-excursion
982 "src/git.sr.ht/~emersion/chathistorysync"
983 (invoke "sh" "-c"
984 "scdoc <chathistorysync.1.scd >chathistorysync.1"))))
985 (add-after 'install 'install-doc
986 (lambda* (#:key outputs #:allow-other-keys)
987 (let* ((out (assoc-ref outputs "out")))
988 (with-directory-excursion
989 "src/git.sr.ht/~emersion/chathistorysync"
990 (install-file
991 "chathistorysync.1"
992 (string-append out "/share/man/man1")))))))))
993 (native-inputs
994 (list go-golang-org-x-term
995 go-gopkg-in-irc-v3
996 scdoc))
997 (home-page "https://git.sr.ht/~emersion/chathistorysync")
998 (synopsis "Synchronization tool for IRC chat history")
999 (description
1000 "This package provides a synchronization tool for IRC chat history.")
1001 (license license:agpl3)))
1002
1003(define-public litterbox
1004 (package
1005 (name "litterbox")
1006 (version "1.9")
1007 (source
1008 (origin
1009 (method url-fetch)
1010 (uri (string-append "https://git.causal.agency/litterbox/snapshot/litterbox-"
1011 version ".tar.gz"))
1012 (sha256
1013 (base32 "1ag5x7h71pxjaaf4b561rwdqr05zzywkc0p3jf2yhg3lbjkjrc7z"))))
1014 (build-system gnu-build-system)
1015 (arguments
1016 (list #:tests? #f ; There are no tests.
1017 #:make-flags
1018 #~(list
1019 (string-append "CC=" #$(cc-for-target))
1020 (string-append "PREFIX=" #$output))))
1021 (native-inputs
1022 (list pkg-config universal-ctags))
1023 (inputs
1024 (list libressl sqlite))
1025 (home-page "https://code.causal.agency/june/litterbox")
1026 (synopsis "TLS-only IRC logger")
1027 (description
1028"@command{litterbox} is a TLS-only IRC logger. It logs
1029events from IRC in a SQLite database, indexing messages for full-text
1030search. It is intended for use with the IRC bouncer @command{pounce},
1031but can also be used independently as a logging bot.")
1032 (license license:gpl3+)))
1033
1034(define-public scooper
1035 (package
1036 (name "scooper")
1037 (version "1.3")
1038 (source
1039 (origin
1040 (method git-fetch)
1041 (uri (git-reference
1042 (url "https://git.causal.agency/scooper")
1043 (commit version)))
1044 (file-name (git-file-name name version))
1045 (sha256
1046 (base32 "0sqb8hg402il38pjhwa3lfyrskf1yr6yjd5fswqvk3d15v1jq4m8"))))
1047 (build-system gnu-build-system)
1048 (arguments
1049 (list #:tests? #f ; There are no tests.
1050 #:make-flags
1051 #~(list
1052 (string-append "CC=" #$(cc-for-target))
1053 (string-append "PREFIX=" #$output))))
1054 (native-inputs
1055 (list pkg-config universal-ctags))
1056 (inputs
1057 (list kcgi
1058 libressl
1059 litterbox
1060 sqlite))
1061 (home-page "https://code.causal.agency/june/scooper")
1062 (synopsis "Web interface for the litterbox IRC logger")
1063 (description
1064 "@command{scooper} is a CGI and FastCGI web interface that also provides
1065IRC log listings and full-text search.")
1066 (license license:gpl3+)))
1067
1068(define-public inspircd
1069 (package
1070 (name "inspircd")
1071 (version "3.12.0")
1072 (source
1073 (origin
1074 (method git-fetch)
1075 (uri (git-reference
1076 (url "https://github.com/inspircd/inspircd")
1077 (commit (string-append "v" version))))
1078 (file-name (git-file-name name version))
1079 (sha256
1080 (base32 "0xlfs269iaw7dfryzl6vjzqsn2g4nqh6kpf5xfgk3zbjhqaczknx"))))
1081 (build-system gnu-build-system)
1082 (arguments
1083 (list #:configure-flags
1084 #~(map (lambda (module)
1085 (string-append "--enable-extras=" module))
1086 '("m_argon2.cpp"
1087 "m_geo_maxmind.cpp"
1088 "m_ldap.cpp"
1089 "m_mysql.cpp"
1090 "m_pgsql.cpp"
1091 "m_regex_pcre.cpp"
1092 "m_regex_posix.cpp"
1093 "m_regex_stdlib.cpp"
1094 "m_regex_re2.cpp"
1095 "m_regex_tre.cpp"
1096 "m_sqlite3.cpp"
1097 "m_ssl_gnutls.cpp"
1098 "m_ssl_openssl.cpp"
1099 "m_ssl_mbedtls.cpp"
1100 "m_sslrehashsignal.cpp"))
1101 #:tests? #f ; XXX figure out later
1102 #:phases
1103 #~(modify-phases %standard-phases
1104 (add-before 'configure 'module-configure
1105 (lambda* (#:key configure-flags #:allow-other-keys)
1106 (apply invoke "./configure"
1107 configure-flags)))
1108 (replace 'configure
1109 (lambda _
1110 (let ((lib (string-append #$output "/lib/"))
1111 (bin (string-append #$output "/bin/"))
1112 (etc (string-append #$output "/etc/"))
1113 (name "inspircd"))
1114 (invoke "./configure"
1115 (string-append "--prefix=" lib name)
1116 (string-append "--binary-dir=" bin)
1117 (string-append "--module-dir=" lib name "/modules/")
1118 (string-append "--config-dir=" etc name))))))))
1119 (native-inputs
1120 (list pkg-config))
1121 (inputs
1122 (list argon2
1123 gnutls
1124 libmaxminddb
1125 mbedtls-lts
1126 (list mariadb "dev")
1127 openldap
1128 openssl
1129 `(,pcre "bin")
1130 perl
1131 postgresql
1132 re2
1133 sqlite
1134 tre))
1135 (synopsis "Modular IRC server written in C++")
1136 (description "InspIRCd is a modular Internet Relay Chat
1137server written in C++ for Unix-like operating systems.")
1138 (home-page "https://www.inspircd.org/")
1139 (license license:gpl2)))
1140
1141(define-public snuik
1142 (package
1143 (name "snuik")
1144 (version "0.2")
1145 (source
1146 (origin
1147 (method url-fetch)
1148 (uri (string-append "https://dezyne.org/download/snuik/"
1149 name "-" version ".tar.gz"))
1150 (sha256
1151 (base32 "1hqhni5xgm7jg8md305clix1r3dbxkq6fw93kxzar1nv7wvy7z38"))))
1152 (native-inputs (list guile-3.0
1153 ngircd)) ;for live test
1154 (inputs
1155 (list bash-minimal guile-3.0 guile-fibers guile-gnutls guile-goblins))
1156 (build-system guile-build-system)
1157 (arguments
1158 (list
1159 #:not-compiled-file-regexp "(guix|guix/.*)[.]scm$"
1160 #:modules '((srfi srfi-1)
1161 (ice-9 popen)
1162 (guix build guile-build-system)
1163 (guix build utils))
1164 #:phases
1165 #~(modify-phases %standard-phases
1166 #$@(if (%current-target-system)
1167 #~()
1168 #~((add-after 'build 'check
1169 (lambda _
1170 (let* ((tests (find-files "test" "[.]scm$"))
1171 (guile #$(this-package-input "guile"))
1172 (guile (string-append guile "/bin/guile")))
1173 (fold (lambda (test result)
1174 (and
1175 result
1176 (invoke guile "--no-auto-compile" test)))
1177 #t
1178 tests))))))
1179 (add-after 'build 'install-script
1180 (lambda _
1181 (let* ((bash #$(this-package-input "bash-minimal"))
1182 (bash (string-append bash "/bin/bash"))
1183 (guile #$(this-package-input "guile"))
1184 (guile (string-append guile "/bin/guile"))
1185 (build-guile #$(this-package-native-input "guile"))
1186 (build-guile (string-append build-guile "/bin/guile"))
1187 (guile-fibers #$(this-package-input "guile-fibers"))
1188 (guile-gnutls #$(this-package-input "guile-gnutls"))
1189 (guile-goblins #$(this-package-input "guile-goblins"))
1190 (out #$output)
1191 (bin (string-append out "/bin"))
1192 (effective (read
1193 (open-pipe* OPEN_READ
1194 build-guile "-c"
1195 "(write (effective-version))")))
1196 (path (list (string-append guile "/bin")))
1197 (scm-dir (string-append "/share/guile/site/" effective))
1198 (scm-path (list (string-append out scm-dir)
1199 (string-append guile-fibers scm-dir)
1200 (string-append guile-gnutls scm-dir)
1201 (string-append guile-goblins scm-dir)))
1202 (go-dir (string-append "/lib/guile/" effective
1203 "/site-ccache/"))
1204 (go-path (list (string-append out go-dir)
1205 (string-append guile-fibers go-dir)
1206 (string-append guile-gnutls go-dir)
1207 (string-append guile-goblins go-dir))))
1208 (mkdir-p "bin")
1209 (with-output-to-file "bin/snuik"
1210 (lambda _
1211 (display "\
1212#!@GUILE@ --no-auto-compile
1213!#
1214(set! %load-path (append '(\"@guilemoduledir@\") %load-path))
1215(set! %load-compiled-path (append '(\"@guileobjectdir@\") %load-compiled-path))
1216((@ (snuik) main) (command-line)) ")))
1217 (chmod "bin/snuik" #o755)
1218 (substitute* "bin/snuik"
1219 (("@GUILE@") guile)
1220 (("@guilemoduledir@") (string-append #$output "/" scm-dir))
1221 (("@guileobjectdir@") (string-append #$output "/" go-dir)))
1222 (chmod "snuik" #o755)
1223 (install-file "bin/snuik" bin)
1224 (wrap-program (string-append #$output "/bin/snuik")
1225 `("PATH" ":" prefix ,path)
1226 `("GUILE_AUTO_COMPILE" ":" = ("0"))
1227 `("GUILE_LOAD_PATH" ":" prefix ,scm-path)
1228 `("GUILE_LOAD_COMPILED_PATH" ":" prefix ,go-path))))))))
1229 (home-page "https://gitlab.com/janneke/snuik")
1230 (synopsis "IRC bot using Guile-goblins")
1231 (description "@code{Snuik} is an IRC bot in Guile Goblins. It has
1232some basic functionality only, such as greeting, feed, identify, info,
1233seen, tell, and what.")
1234 (license license:gpl3+)))
1235
1236(define-public soju
1237 (package
1238 (name "soju")
1239 (version "0.10.1")
1240 (source
1241 (origin
1242 (method git-fetch)
1243 (uri (git-reference
1244 (url "https://codeberg.org/emersion/soju")
1245 (commit (string-append "v" version))))
1246 (file-name (git-file-name name version))
1247 (sha256
1248 (base32 "1hl6djraalpyn6dkf748g2564lbz1lrp8nqddnyjdy3bah87prch"))))
1249 (build-system go-build-system)
1250 (arguments
1251 (list
1252 #:install-source? #f
1253 #:import-path "codeberg.org/emersion/soju"
1254 #:build-flags
1255 #~(list "GOFLAGS=-v -x -trimpath -tags=pam -tags=libsqlite3"
1256 (string-append "SYSCONFDIR=" (string-append #$output "/etc"))
1257 (string-append "PREFIX=" #$output))
1258 #:phases
1259 #~(modify-phases %standard-phases
1260 (add-after 'unpack 'adjust-makefile
1261 (lambda* (#:key import-path #:allow-other-keys)
1262 (with-directory-excursion (string-append "src/" import-path)
1263 (substitute* "Makefile"
1264 ;; Do not set default config path.
1265 ((".*config_path.*:.*") "")
1266 (("-X.*=.*config_path.*' ") "")
1267 ((".*cp -f.*config_path.*") "")
1268 ;; Prevent creating /var/lib/soju.
1269 ((".*sharedstatedir.*") "")))))
1270 (replace 'build
1271 (lambda* (#:key import-path build-flags #:allow-other-keys)
1272 (with-directory-excursion (string-append "src/" import-path)
1273 (apply invoke "make" build-flags))))
1274 (replace 'install
1275 (lambda* (#:key import-path build-flags #:allow-other-keys)
1276 (with-directory-excursion (string-append "src/" import-path)
1277 (apply invoke "make" "install" build-flags)))))))
1278 (native-inputs
1279 (list go-codeberg-org-emersion-go-scfg
1280 go-codeberg-org-emersion-go-sqlite3-fts5
1281 go-git-sr-ht-sircmpwn-go-bare
1282 go-github-com-coder-websocket
1283 go-github-com-emersion-go-sasl
1284 go-github-com-lib-pq
1285 go-github-com-mattn-go-sqlite3
1286 go-github-com-msteinert-pam-v2
1287 go-github-com-pires-go-proxyproto
1288 go-github-com-prometheus-client-golang
1289 go-github-com-sherclockholmes-webpush-go
1290 go-golang-org-x-crypto
1291 go-golang-org-x-time
1292 go-gopkg-in-irc-v4
1293 go-modernc-org-sqlite
1294 scdoc
1295 sqlite))
1296 (home-page "https://soju.im/")
1297 (synopsis "User-friendly IRC bouncer")
1298 (description
1299 "Connects to upstream IRC servers on behalf of the user to provide
1300extra functionality. soju supports many features
1301such as multiple users, numerous @@url{https://ircv3.net/,IRCv3} extensions,
1302chat history playback and detached channels. It is well-suited for both small
1303and large deployments.")
1304 (license license:agpl3)))