1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
3 ;;; Copyright © 2014, 2017 Julien Lepiller <julien@lepiller.eu>
4 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
5 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
6 ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
7 ;;; Copyright © 2015, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
8 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
9 ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
10 ;;; Copyright © 2016, 2017, 2018, 2019 Clément Lassieur <clement@lassieur.org>
11 ;;; Copyright © 2017 Mekeor Melire <mekeor.melire@gmail.com>
12 ;;; Copyright © 2017, 2018, 2020 Arun Isaac <arunisaac@systemreboot.net>
13 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
14 ;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org>
15 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
16 ;;; Copyright © 2018 Leo Famulari <leo@famulari.name>
17 ;;; Copyright © 2018 Pierre-Antoine Rouby <contact@parouby.fr>
18 ;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
19 ;;; Copyright © 2019, 2020 Brett Gilio <brettg@gnu.org>
20 ;;; Copyright © 2019, 2020 Timotej Lazar <timotej.lazar@araneo.si>
21 ;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
22 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
23 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
24 ;;; Copyright © 2020 Reza Alizadeh Majd <r.majd@pantherx.org>
25 ;;; Copyright © 2020 Jonathan Brielmaier <jonathan.brielmaier@web.de>
26 ;;; Copyright © 2020 Mason Hock <chaosmonk@riseup.net>
27 ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
28 ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
29 ;;; Copyright © 2020, 2021 Robert Karszniewicz <avoidr@posteo.de>
30 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
32 ;;; This file is part of GNU Guix.
34 ;;; GNU Guix is free software; you can redistribute it and/or modify it
35 ;;; under the terms of the GNU General Public License as published by
36 ;;; the Free Software Foundation; either version 3 of the License, or (at
37 ;;; your option) any later version.
39 ;;; GNU Guix is distributed in the hope that it will be useful, but
40 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
41 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
42 ;;; GNU General Public License for more details.
44 ;;; You should have received a copy of the GNU General Public License
45 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
47 (define-module (gnu packages messaging)
48 #:use-module (gnu packages)
49 #:use-module (gnu packages admin)
50 #:use-module (gnu packages aidc)
51 #:use-module (gnu packages aspell)
52 #:use-module (gnu packages audio)
53 #:use-module (gnu packages autotools)
54 #:use-module (gnu packages avahi)
55 #:use-module (gnu packages base)
56 #:use-module (gnu packages bash)
57 #:use-module (gnu packages bison)
58 #:use-module (gnu packages boost)
59 #:use-module (gnu packages check)
60 #:use-module (gnu packages compression)
61 #:use-module (gnu packages cpp)
62 #:use-module (gnu packages crypto)
63 #:use-module (gnu packages curl)
64 #:use-module (gnu packages cyrus-sasl)
65 #:use-module (gnu packages databases)
66 #:use-module (gnu packages docbook)
67 #:use-module (gnu packages documentation)
68 #:use-module (gnu packages enchant)
69 #:use-module (gnu packages fontutils)
70 #:use-module (gnu packages freedesktop)
71 #:use-module (gnu packages gettext)
72 #:use-module (gnu packages glib)
73 #:use-module (gnu packages gnome)
74 #:use-module (gnu packages gnupg)
75 #:use-module (gnu packages gperf)
76 #:use-module (gnu packages graphviz)
77 #:use-module (gnu packages gstreamer)
78 #:use-module (gnu packages gtk)
79 #:use-module (gnu packages guile)
80 #:use-module (gnu packages icu4c)
81 #:use-module (gnu packages image)
82 #:use-module (gnu packages kde)
83 #:use-module (gnu packages kerberos)
84 #:use-module (gnu packages less)
85 #:use-module (gnu packages libcanberra)
86 #:use-module (gnu packages libidn)
87 #:use-module (gnu packages libreoffice)
88 #:use-module (gnu packages linux)
89 #:use-module (gnu packages logging)
90 #:use-module (gnu packages lua)
91 #:use-module (gnu packages man)
92 #:use-module (gnu packages markup)
93 #:use-module (gnu packages matrix)
94 #:use-module (gnu packages mono)
95 #:use-module (gnu packages mpd)
96 #:use-module (gnu packages ncurses)
97 #:use-module (gnu packages networking)
98 #:use-module (gnu packages nss)
99 #:use-module (gnu packages pcre)
100 #:use-module (gnu packages perl)
101 #:use-module (gnu packages photo)
102 #:use-module (gnu packages php)
103 #:use-module (gnu packages pkg-config)
104 #:use-module (gnu packages protobuf)
105 #:use-module (gnu packages python)
106 #:use-module (gnu packages python-check)
107 #:use-module (gnu packages python-crypto)
108 #:use-module (gnu packages python-web)
109 #:use-module (gnu packages python-xyz)
110 #:use-module (gnu packages qt)
111 #:use-module (gnu packages readline)
112 #:use-module (gnu packages ruby)
113 #:use-module (gnu packages sphinx)
114 #:use-module (gnu packages sqlite)
115 #:use-module (gnu packages tcl)
116 #:use-module (gnu packages texinfo)
117 #:use-module (gnu packages textutils)
118 #:use-module (gnu packages tls)
119 #:use-module (gnu packages video)
120 #:use-module (gnu packages web)
121 #:use-module (gnu packages xdisorg)
122 #:use-module (gnu packages xiph)
123 #:use-module (gnu packages xml)
124 #:use-module (gnu packages xorg)
125 #:use-module (guix build-system cmake)
126 #:use-module (guix build-system glib-or-gtk)
127 #:use-module (guix build-system gnu)
128 #:use-module (guix build-system meson)
129 #:use-module (guix build-system perl)
130 #:use-module (guix build-system python)
131 #:use-module (guix build-system qt)
132 #:use-module (guix build-system trivial)
133 #:use-module (guix download)
134 #:use-module (guix git-download)
135 #:use-module (guix hg-download)
136 #:use-module ((guix licenses) #:prefix license:)
137 #:use-module (guix packages)
138 #:use-module (guix utils))
148 (string-append "mirror://sourceforge/psi/Psi/"
149 version "/psi-" version ".tar.xz"))
150 (modules '((guix build utils)))
153 (delete-file-recursively "3rdparty")))
155 (base32 "1dxmm1d1zr0pfs51lba732ipm6hm2357jlfb934lvarzsh7karri"))))
156 (build-system qt-build-system)
158 `(#:tests? #f ; No target
164 (modify-phases %standard-phases
165 (add-after 'unpack 'patch-cmake
167 (substitute* "cmake/modules/FindHunspell.cmake"
172 `(("pkg-config" ,pkg-config)
173 ("python" ,python-wrapper)
177 ("enchant" ,enchant-1.6)
178 ("hunspell" ,hunspell)
182 ("qtmultimedia" ,qtmultimedia)
184 ("qtwebkit" ,qtwebkit)
185 ("qtx11extras" ,qtx11extras)
190 (synopsis "Qt-based XMPP Client")
191 (description "Psi is a capable XMPP client aimed at experienced users.
192 Its design goals are simplicity and stability.")
193 (home-page "https://psi-im.org")
194 (license license:gpl2+)))
196 (define-public libgnt
204 (string-append "mirror://sourceforge/pidgin/libgnt/"
205 version "/libgnt-" version ".tar.xz"))
207 (base32 "1n2bxg0ignn53c08cp69pj4sdg53kwlqn23rincyjmpr327fdhsy"))))
208 (build-system meson-build-system)
209 (outputs '("out" "doc"))
211 `(#:glib-or-gtk? #t ; To wrap binaries and/or compile schemas
213 (modify-phases %standard-phases
214 (add-after 'unpack 'patch-ncurses-path
215 (lambda* (#:key inputs #:allow-other-keys)
216 (substitute* "meson.build"
219 (assoc-ref inputs "ncurses")
222 (add-before 'configure 'patch-docbook-xml
223 (lambda* (#:key inputs #:allow-other-keys)
224 (with-directory-excursion "doc"
225 (substitute* "libgnt-docs.xml"
226 (("http://www.oasis-open.org/docbook/xml/4.1.2/")
227 (string-append (assoc-ref inputs "docbook-xml")
228 "/xml/dtd/docbook/"))))
230 (add-after 'install 'move-doc
231 (lambda* (#:key outputs #:allow-other-keys)
232 (let* ((out (assoc-ref outputs "out"))
233 (doc (assoc-ref outputs "doc")))
234 (mkdir-p (string-append doc "/share"))
236 (string-append out "/share/gtk-doc")
237 (string-append doc "/share/gtk-doc"))
240 `(("docbook-xml" ,docbook-xml-4.1.2)
241 ("glib:bin" ,glib "bin")
242 ("gobject-introspection" ,gobject-introspection)
244 ("pkg-config" ,pkg-config)))
246 `(("ncurses" ,ncurses)))
250 ("python" ,python-2)))
251 (synopsis "GLib Ncurses Toolkit")
252 (description "GNT is an ncurses toolkit for creating text-mode graphical
253 user interfaces in a fast and easy way. It is based on GLib and ncurses.")
254 (home-page "https://keep.imfreedom.org/libgnt/libgnt")
255 (license license:gpl2+)))
257 (define-public libgadu
266 (url "https://github.com/wojtekka/libgadu.git")
269 (git-file-name name version))
271 (base32 "1s16cripy5w9k12534qb012iwc5m9qcjyrywgsziyn3kl3i0aa8h"))))
272 (build-system gnu-build-system)
278 (modify-phases %standard-phases
279 (add-after 'unpack 'patch-shebangs
280 (lambda* (#:key inputs #:allow-other-keys)
281 (substitute* "protobufgen.sh"
283 (string-append (assoc-ref inputs "bash")
287 `(("autoconf" ,autoconf)
288 ("automake" ,automake)
293 ("pkg-config" ,pkg-config)))
297 ("libprotobuf-c" ,protobuf-c)
302 `(("gnutls" ,gnutls)))
303 (synopsis "Library for handling the protocol of Gadu-Gadu")
304 (description "LibGadu is library for handling Gadu-Gadu instant messenger
305 protocol. The library is written in C and aims to be operating system and
306 environment independent.")
307 (home-page "https://libgadu.net/index.en.html")
308 (license license:lgpl2.1+)))
310 (define-public silc-toolkit
312 (name "silc-toolkit")
318 (string-append "mirror://sourceforge/silc/silc/toolkit/sources/silc-toolkit-"
321 (base32 "0mnvf9n7qriadg0p7a8qmvcayhnns2g9fhmcymavlm0v8xrky33y"))))
322 (build-system gnu-build-system)
328 "--enable-stack-trace")
330 (modify-phases %standard-phases
331 (add-after 'unpack 'trigger-bootstrap
333 (delete-file "configure")
334 (delete-file "Makefile.in")
337 `(("autoconf" ,autoconf)
338 ("automake" ,automake)
341 ("pkg-config" ,pkg-config)))
342 (synopsis "SILC ToolKit")
343 (description "SILC (Secure Internet Live Conferencing) is a modern and secure
344 conferencing protocol. It provides all the common conferencing services like
345 private messages, instant messages, channels and groups, and video and audio
347 (home-page "https://silc.github.io/info")
354 (define-public meanwhile
363 (url "https://github.com/obriencj/meanwhile.git")
365 (string-append "v" version))))
367 (git-file-name name version))
369 (base32 "1k1gvmx1ikm0y1mdmm495rzkb00pl170jfaf2dy0n5aiiknkk7q3"))))
370 (build-system glib-or-gtk-build-system)
372 `(("autoconf" ,autoconf)
373 ("automake" ,automake)
376 ("pkg-config" ,pkg-config)))
379 (synopsis "Library for Lotus Instant Messaging")
380 (description "Meanwhile is a library for connecting to a LIM (Lotus Instant
381 Messaging, formerly Lotus Sametime, formerly VPBuddy) community. It uses a
382 protocol based in part off of the IMPP draft(*1), and in part off of traces of
383 TCP sessions from existing clients.")
384 (home-page "https://github.com/obriencj/meanwhile")
385 (license license:lgpl3)))
387 (define-public poezio
396 (url "https://lab.louiz.org/poezio/poezio.git")
398 (string-append "v" version))))
400 (git-file-name name version))
402 (base32 "041y61pcbdb86s04qwp8s1g6bp84yskc7vdizwpi2hz18y01x5fy"))))
403 (build-system python-build-system)
406 (modify-phases %standard-phases
407 (add-after 'unpack 'patch
409 (substitute* "setup.py"
414 `(("pkg-config" ,pkg-config)
415 ("python-setuptools" ,python-setuptools)
416 ("python-sphinx" ,python-sphinx)))
418 `(("python-mpd2" ,python-mpd2)
419 ("python-potr" ,python-potr)
420 ("python-pyasn1" ,python-pyasn1)
421 ("python-pyasn1-modules" ,python-pyasn1-modules)
422 ("python-pygments" ,python-pygments)
423 ("python-pyinotify" ,python-pyinotify)
425 ("python-qrcode" ,python-qrcode)
426 ("python-slixmpp" ,python-slixmpp)))
427 (synopsis "Console Jabber/XMPP Client")
428 (description "Poezio is a free console XMPP client (the protocol on which
429 the Jabber IM network is built).
430 Its goal is to let you connect very easily (no account creation needed) to the
431 network and join various chatrooms, immediately. It tries to look like the
432 most famous IRC clients (weechat, irssi, etc). Many commands are identical and
433 you won't be lost if you already know these clients. Configuration can be
434 made in a configuration file or directly from the client.
435 You'll find the light, fast, geeky and anonymous spirit of IRC while using a
436 powerful, standard and open protocol.")
437 (home-page "https://poez.io/en/")
438 (license license:zlib)))
440 (define-public libotr
447 (uri (string-append "https://otr.cypherpunks.ca/libotr-"
450 (base32 "1x8rliydhbibmzwdbyr7pd7n87m2jmxnqkpvaalnf4154hj1hfwb"))
452 (search-patches "libotr-test-auth-fix.patch"))))
453 (build-system gnu-build-system)
455 `(("perl" ,perl))) ; for the test suite
457 `(("libgpg-error" ,libgpg-error)))
459 `(("libgcrypt" ,libgcrypt))) ; libotr headers include gcrypt.h
460 (synopsis "Off-the-Record (OTR) Messaging Library and Toolkit")
461 (description "OTR allows you to have private conversations over instant
462 messaging by providing: (1) Encryption: No one else can read your instant
463 messages. (2) Authentication: You are assured the correspondent is who you
464 think it is. (3) Deniability: The messages you send do not have digital
465 signatures that are checkable by a third party. Anyone can forge messages
466 after a conversation to make them look like they came from you. However,
467 during a conversation, your correspondent is assured the messages he sees are
468 authentic and unmodified. (4) Perfect forward secrecy: If you lose control of
469 your private keys, no previous conversation is compromised.")
470 (home-page "https://otr.cypherpunks.ca/")
478 (define-public libsignal-protocol-c
480 (name "libsignal-protocol-c")
485 (url "https://github.com/WhisperSystems/libsignal-protocol-c")
486 (commit (string-append "v" version))))
487 (file-name (git-file-name name version))
490 "1qj2w4csy6j9jg1jy66n1qwysx7hgjywk4n35hlqcnh1kpa14k3p"))))
492 `(;; Required for proper linking and for tests to run.
493 #:configure-flags '("-DBUILD_SHARED_LIBS=on" "-DBUILD_TESTING=1")))
494 (build-system cmake-build-system)
495 (inputs `( ;; Required for tests:
497 ("openssl" ,openssl)))
498 (native-inputs `(("pkg-config" ,pkg-config)))
499 (home-page "https://github.com/WhisperSystems/libsignal-protocol-c")
500 (synopsis "Implementation of a ratcheting forward secrecy protocol")
501 (description "libsignal-protocol-c is an implementation of a ratcheting
502 forward secrecy protocol that works in synchronous and asynchronous
503 messaging environments. It can be used with messaging software to provide
504 end-to-end encryption.")
505 (license license:gpl3+)))
507 (define-public bitlbee
513 (uri (string-append "https://get.bitlbee.org/src/bitlbee-"
516 (base32 "0zhhcbcr59sx9h4maf8zamzv2waya7sbsl7w74gbyilvy93dw5cz"))))
517 (build-system gnu-build-system)
518 (native-inputs `(("pkg-config" ,pkg-config)
519 ;; Note: Change to 'check' for versions > 3.6.
520 ("check" ,check-0.12)))
521 (inputs `(("glib" ,glib)
528 (modify-phases %standard-phases
529 (add-before 'configure 'set-python
530 (lambda _ (setenv "PYTHON" (which "python3")) #t))
531 (add-after 'install 'install-etc
532 (lambda* (#:key (make-flags '()) #:allow-other-keys)
533 (apply invoke "make" "install-etc" make-flags)))
534 (add-after 'install-etc 'install-lib
535 (lambda* (#:key (make-flags '()) #:allow-other-keys)
536 (apply invoke "make" "install-dev" make-flags)))
538 ;; bitlbee's configure script does not tolerate many of the
539 ;; variable settings that Guix would pass to it.
540 (lambda* (#:key outputs #:allow-other-keys)
541 (invoke "./configure"
542 (string-append "--prefix="
543 (assoc-ref outputs "out"))
545 (synopsis "IRC to instant messaging gateway")
546 (description "BitlBee brings IM (instant messaging) to IRC clients, for
547 people who have an IRC client running all the time and don't want to run an
548 additional IM client. BitlBee currently supports XMPP/Jabber (including
549 Google Talk), MSN Messenger, Yahoo! Messenger, AIM and ICQ, and the Twitter
550 microblogging network (plus all other Twitter API compatible services like
551 identi.ca and status.net).")
552 (home-page "https://www.bitlbee.org/")
553 (license (list license:gpl2+ license:bsd-2))))
555 (define-public bitlbee-purple
556 ;; This variant uses libpurple, which provides support for more protocols at
557 ;; the expense of a much bigger closure.
558 (package/inherit bitlbee
559 (name "bitlbee-purple")
560 (synopsis "IRC to instant messaging gateway (using Pidgin's libpurple)")
561 (inputs `(("purple" ,pidgin)
562 ,@(package-inputs bitlbee)))
564 (substitute-keyword-arguments (package-arguments bitlbee)
565 ((#:phases phases '%standard-phases)
566 `(modify-phases ,phases
567 (replace 'configure ;add "--purple=1"
568 (lambda* (#:key outputs #:allow-other-keys)
569 (invoke "./configure"
570 (string-append "--prefix="
571 (assoc-ref outputs "out"))
572 "--otr=1" "--purple=1")))))
574 ;; XXX: Tests fail to link, and ./configure says that it's "supported
575 ;; on a best-effort basis" anyway.
578 (define-public bitlbee-discord
580 (name "bitlbee-discord")
586 (url "https://github.com/sm00th/bitlbee-discord")
588 (file-name (git-file-name name version))
590 (base32 "02pigk2vbz0jdz11f96sygdvp1j762yjn62h124fkcsc070g7a2f"))))
591 (build-system gnu-build-system)
594 (modify-phases %standard-phases
595 (add-after 'unpack 'patch-autogen
597 (let ((sh (which "sh")))
598 (substitute* "autogen.sh" (("/bin/sh") sh))
599 (setenv "CONFIG_SHELL" sh))
602 (lambda* (#:key inputs outputs #:allow-other-keys)
603 (invoke "./configure"
604 (string-append "--with-plugindir="
605 (assoc-ref outputs "out")
606 "/lib/bitlbee/")))))))
607 (inputs `(("glib" ,glib)))
608 (native-inputs `(("pkg-config" ,pkg-config)
609 ("autoconf" ,autoconf)
610 ("automake" ,automake)
613 ("bitlbee" ,bitlbee) ; needs bitlbee headers
615 (synopsis "Discord plugin for Bitlbee")
616 (description "Bitlbee-discord is a plugin for Bitlbee which provides
617 access to servers running the Discord protocol.")
618 (home-page "https://github.com/sm00th/bitlbee-discord/")
619 (license license:gpl2+)))
621 (define-public purple-mattermost
622 ;; The latest release (1.2) only supports Mattermost's /api/v3. Choose a
623 ;; commit that supports /api/v4.
624 (let ((commit "158ce2052af9aaf3d1f6f045f0cfba276e0e91cf")
627 (name "purple-mattermost")
628 (version (git-version "1.2" revision commit))
629 (home-page "https://github.com/EionRobb/purple-mattermost")
632 (uri (git-reference (url home-page)
634 (file-name (git-file-name name version))
637 "1481zm20pnfq52ncg7hxayjq8cw3a6yh9m4jm1m5s8chsq04015l"))))
638 (build-system gnu-build-system)
640 `(#:phases (modify-phases %standard-phases
642 (lambda* (#:key inputs outputs #:allow-other-keys)
643 ;; Adjust the makefile to install files in the right
645 (let ((out (assoc-ref outputs "out")))
646 (substitute* "Makefile"
647 (("MATTERMOST_DEST = .*")
648 (string-append "MATTERMOST_DEST = " out
649 "/lib/purple-2\n")) ;XXX: hardcoded
650 (("MATTERMOST_ICONS_DEST = .*")
651 (string-append "MATTERMOST_ICONS_DEST = "
653 "/share/pixmaps/pidgin/protocols\n")))
655 #:make-flags (list "CC=gcc"
656 ,(string-append "PLUGIN_VERSION=" version))
658 (inputs `(("glib" ,glib)
659 ("json-glib" ,json-glib)
660 ("discount" ,discount)
662 (native-inputs `(("pkg-config" ,pkg-config)))
663 (synopsis "Purple plug-in to access Mattermost instant messaging")
665 "Purple-Mattermost is a plug-in for Purple, the instant messaging library
666 used by Pidgin and Bitlbee, among others, to access
667 @uref{https://mattermost.com/, Mattermost} servers.")
668 (license license:gpl3+))))
670 (define-public hexchat
676 (uri (string-append "https://dl.hexchat.net/hexchat/hexchat-"
680 "10p829jm1r6kidkgf5lhqhyqc5mxdcq96q3zhadsckasvc9rs6lh"))))
681 (build-system meson-build-system)
682 (native-inputs `(("gettext" ,gettext-minimal)
683 ("glib:bin" ,glib "bin") ;need glib-genmarshal
685 ("pkg-config" ,pkg-config)))
686 (inputs `(("dbus-glib" ,dbus-glib)
690 ("libcanberra" ,libcanberra)
691 ("libnotify" ,libnotify)
692 ("libproxy" ,libproxy)
695 ;; Bindings for add-on scripts.
697 ("perl-xml-parser" ,perl-xml-parser)
698 ("python-2" ,python-2)))
701 (modify-phases %standard-phases
702 (add-after 'unpack 'skip-desktop-database-updates
704 ;; The build scripts update icon and desktop file databases when
705 ;; DESTDIR is not set. We can't update these databases from
706 ;; within the build chroot, but we also don't set DESTDIR. So, we
707 ;; just skip this code.
708 (substitute* "meson_post_install.py"
709 (("if 'DESTDIR' not in os.environ:")
712 (synopsis "Graphical IRC client")
714 "HexChat lets you connect to multiple IRC networks at once. The main
715 window shows the list of currently connected networks and their channels, the
716 current conversation and the list of users. It uses colors to differentiate
717 between users and to highlight messages. It checks spelling using available
718 dictionaries. HexChat can be extended with multiple addons.")
719 (home-page "https://hexchat.net/")
720 (license license:gpl2+)))
722 (define-public ngircd
728 (uri (string-append "https://arthur.barton.de/pub/ngircd/ngircd-"
732 "0m32v0c7mq96rshws4h6d0pi4bm0hynfzx3x01mgrxh9c396zham"))
733 (patches (search-patches "ngircd-handle-zombies.patch"))))
734 (build-system gnu-build-system)
735 ;; Needed for the test suite.
736 (native-inputs `(("procps" ,procps)
738 ("inetutils" ,inetutils)
739 ("openssl" ,openssl)))
741 (inputs `(("zlib" ,zlib)
742 ("libwrap" ,tcp-wrappers)
744 ,@(if (string-suffix? "-linux"
745 (or (%current-target-system)
747 `(("linux-pam" ,linux-pam))
751 '("--with-gnutls" "--with-iconv" "--enable-ipv6" "--with-tcp-wrappers"
752 ,@(if (string-suffix? "-linux"
753 (or (%current-target-system)
758 (modify-phases %standard-phases
759 ;; Necessary for the test suite.
760 (add-after 'configure 'post-configure
762 (substitute* "src/ngircd/Makefile"
763 (("/bin/sh") (which "sh")))
764 ;; The default getpid.sh does a sloppy grep over 'ps -ax' output,
765 ;; which fails arbitrarily.
766 (with-output-to-file "src/testsuite/getpid.sh"
770 "#!" (which "sh") "\n"
771 "ps -C \"$1\" -o pid=\n"))))
772 ;; Our variant of getpid.sh does not match interpreter names
773 ;; when the script's shebang is invoked directly as "./foo".
774 ;; Patch cases where the test suite relies on this.
775 (substitute* "src/testsuite/start-server.sh"
776 ;; It runs 'getpid.sh sh' to test if it works at all. Run it on
778 (("getpid.sh sh") "getpid.sh make")))))))
779 (home-page "https://ngircd.barton.de/")
780 (synopsis "Lightweight Internet Relay Chat server for small networks")
782 "ngIRCd is a lightweight @dfn{Internet Relay Chat} (IRC) server for small
783 or private networks. It is easy to configure, can cope with dynamic IP
784 addresses, and supports IPv6, SSL-protected connections, as well as PAM for
786 (license license:gpl2+)))
788 (define-public pidgin
796 (string-append "mirror://sourceforge/pidgin/Pidgin/"
797 version "/pidgin-" version ".tar.gz"))
799 (base32 "0vdfnm96m1kh4gm6xn6i7s9c5zjh1p18jg4595k4p5bplvd6fmm8"))
801 (search-patches "pidgin-add-search-path.patch"))
802 (modules '((guix build utils)))
805 ;; Remove stale generated file after applying patches.
806 (delete-file "configure")
808 (build-system glib-or-gtk-build-system)
810 `(("autoconf" ,autoconf) ;; For bootstrap
811 ("automake" ,automake) ;; For bootstrap
815 ("intltool" ,intltool)
816 ("libtool" ,libtool) ;; For bootstrap
817 ("pkg-config" ,pkg-config)))
820 ("cyrus-sasl" ,cyrus-sasl)
822 ("dbus-glib" ,dbus-glib)
823 ;; ("evolution-data-server" ,evolution-data-server)
824 ("farstream" ,farstream)
826 ("gstreamer" ,gstreamer)
827 ;; ("gtkspell2" ,gtkspell2)
829 ("libgcrypt" ,libgcrypt)
838 ("libxscrnsaver" ,libxscrnsaver)
840 ;; ("libzephyr" ,libzephyr)
841 ("meanwhile" ,meanwhile)
844 ("network-manager" ,network-manager)
850 ("python2-dbus" ,python2-dbus)
851 ("silc" ,silc-toolkit)
853 ("startup-notification" ,startup-notification)
862 (string-append "CFLAGS=-I"
863 (assoc-ref %build-inputs "gst-plugins-base")
864 "/include/gstreamer-1.0")
866 ;; "--enable-gevolution"
869 "--enable-cyrus-sasl"
870 (string-append "--with-ncurses-headers="
871 (assoc-ref %build-inputs "ncurses")
873 (string-append "--with-tclconfig="
874 (assoc-ref %build-inputs "tcl")
876 (string-append "--with-tkconfig="
877 (assoc-ref %build-inputs "tk")
880 (modify-phases %standard-phases
881 (add-before 'check 'eat-leftovers
882 ;; XXX Remove when updating beyond 2.14.3. Equivalent to
883 ;; <https://keep.imfreedom.org/pidgin/pidgin/rev/d4d72fde60c2>.
885 ;; Remove a lingering [broken] oscar reference.
886 (substitute* "libpurple/tests/check_libpurple.c"
887 ((".*oscar_util_suite.*") "")))))))
890 (search-path-specification
891 (variable "PURPLE_PLUGIN_PATH")
894 (string-append "lib/purple-"
895 (version-major version))
897 (home-page "https://www.pidgin.im/")
898 (synopsis "Graphical multi-protocol instant messaging client")
899 (description "Pidgin is a modular instant messaging client that supports
900 many popular chat protocols.")
903 license:gpl2+ ; Most of the code
904 license:lgpl2.1 ; GG protocol plugin (libpurple/protocols/gg/lib)
905 license:lgpl2.0+ ; OSCAR protocol plugin (libpurple/protocols/oscar)
906 ;; The following licenses cover the zephyr protocol plugin:
907 (license:non-copyleft
908 "file://libpurple/protocols/zephyr/mit-copyright.h"
909 "See libpurple/protocols/zephyr/mit-copyright.h in the distribution.")
910 (license:non-copyleft
911 "file://libpurple/protocols/zephyr/mit-sipb-copyright.h"
912 "See libpurple/protocols/zephyr/mit-sipb-copyright.h in the distribution.")))))
914 (define-public pidgin-otr
922 (string-append "https://otr.cypherpunks.ca/"
923 name "-" version ".tar.gz"))
925 (base32 "1i5s9rrgbyss9rszq6c6y53hwqyw1k86s40cpsfx5ccl9bprxdgl"))))
926 (build-system gnu-build-system)
928 `(("gettext" ,gettext-minimal)
929 ("intltool" ,intltool)
930 ("pkg-config" ,pkg-config)))
934 ("libgcrypt" ,libgcrypt)
935 ("libgpg-error" ,libgpg-error)
939 (home-page "https://otr.cypherpunks.ca/")
940 (synopsis "Off-the-Record Messaging plugin for Pidgin")
941 (description "Pidgin-OTR is a plugin that adds support for OTR to the Pidgin
942 instant messaging client. OTR (Off-the-Record) Messaging allows you to have
943 private conversations over instant messaging by providing: (1) Encryption: No
944 one else can read your instant messages. (2) Authentication: You are assured
945 the correspondent is who you think it is. (3) Deniability: The messages you
946 send do not have digital signatures that are checkable by a third party. Anyone
947 can forge messages after a conversation to make them look like they came from
948 you. However, during a conversation, your correspondent is assured the messages
949 he sees are authentic and unmodified. (4) Perfect forward secrecy: If you lose
950 control of your private keys, no previous conversation is compromised.")
951 (license license:gpl2+)))
959 (uri (string-append "https://znc.in/releases/archive/znc-"
963 "03fyi0j44zcanj1rsdx93hkdskwfvhbywjiwd17f9q1a7yp8l8zz"))))
964 (build-system cmake-build-system)
967 (list "-DWANT_CYRUS=ON"
972 (modify-phases %standard-phases
973 (add-after 'unpack 'unpack-googletest
974 ;; Copy the googletest sources to where the CMake build expects them.
975 (lambda* (#:key inputs #:allow-other-keys)
976 (let ((source (assoc-ref inputs "googletest-source"))
977 (target "third_party/googletest"))
979 (copy-recursively source target)
983 ("gettext" ,gettext-minimal)
984 ("googletest-source" ,(package-source googletest))
985 ("pkg-config" ,pkg-config)))
987 `(("cyrus-sasl" ,cyrus-sasl)
993 (home-page "https://wiki.znc.in/ZNC")
994 (synopsis "IRC network bouncer")
995 (description "ZNC is an @dfn{IRC network bouncer} or @dfn{BNC}. It can
996 detach the client from the actual IRC server, and also from selected channels.
997 Multiple clients from different locations can connect to a single ZNC account
998 simultaneously and therefore appear under the same nickname on IRC.")
999 (license license:asl2.0)))
1001 (define-public python-nbxmpp
1003 (name "python-nbxmpp")
1009 (pypi-uri "nbxmpp" version))
1011 (base32 "1482fva70i01w60fk70c0fhqmqgzi1fb4xflllz2v6c8mdqkd1m3"))))
1012 (build-system python-build-system)
1014 `(("glib:bin" ,glib "bin")))
1017 ("glib-networking" ,glib-networking)
1018 ("libsoup" ,libsoup)
1019 ("python-gssapi" ,python-gssapi)
1020 ("python-idna" ,python-idna)
1021 ("python-precis-i18n" ,python-precis-i18n)
1022 ("python-pygobject" ,python-pygobject)))
1023 (synopsis "Non-blocking XMPP Module")
1024 (description "Python-nbxmpp is a Python library that provides a way for
1025 Python applications to use the XMPP network. This library was initially a fork
1027 (home-page "https://dev.gajim.org/gajim/python-nbxmpp")
1028 (license license:gpl3+)))
1030 (define-public gajim
1038 (string-append "https://gajim.org/downloads/"
1039 (version-major+minor version)
1040 "/gajim-" version ".tar.gz"))
1042 (base32 "070h1n3miq99z6ln77plk3jlisgfqfs2yyn4rhchpf25zd8is1ba"))
1043 (patches (search-patches "gajim-honour-GAJIM_PLUGIN_PATH.patch"))))
1044 (build-system python-build-system)
1046 `(#:imported-modules
1047 (,@%python-build-system-modules
1048 (guix build glib-or-gtk-build-system))
1050 ((guix build python-build-system)
1051 ((guix build glib-or-gtk-build-system)
1052 #:prefix glib-or-gtk:)
1055 (modify-phases %standard-phases
1056 (add-after 'unpack 'disable-failing-tests
1058 ;; ModuleNotFoundError: No module named 'gajim.gui.emoji_data'
1059 ;; https://dev.gajim.org/gajim/gajim/-/issues/10478
1060 (delete-file "test/lib/gajim_mocks.py")
1061 (delete-file "test/unit/test_gui_interface.py")
1065 ;; Tests require a running X server.
1066 (system "Xvfb :1 +extension GLX &")
1067 (setenv "DISPLAY" ":1")
1068 ;; For missing '/etc/machine-id'.
1069 (setenv "DBUS_FATAL_WARNINGS" "0")
1070 (invoke "dbus-launch" "python" "./setup.py" "test")
1072 (add-after 'install 'glib-or-gtk-compile-schemas
1073 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
1074 (add-after 'install 'glib-or-gtk-wrap
1075 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))
1076 (add-after 'install 'wrap-env
1077 (lambda* (#:key outputs #:allow-other-keys)
1078 (let ((out (assoc-ref outputs "out")))
1081 (let ((file (string-append out "/bin/" name))
1082 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH"))
1083 (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
1085 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
1086 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))
1087 '("gajim" "gajim-remote" "gajim-history-manager")))
1089 (native-search-paths
1091 (search-path-specification
1092 (variable "GAJIM_PLUGIN_PATH")
1093 (separator #f) ;single entry
1096 "share/gajim/plugins")))
1097 ;; Gajim needs to use the propagated inputs of its plugins.
1098 (search-path-specification
1099 (variable "PYTHONPATH")
1104 ;; FIXME: Cannot use this expression as it would
1105 ;; introduce a circular dependency at the top level.
1106 ;; (version-major+minor (package-version python))
1108 "/site-packages"))))))
1110 `(("gettext" ,gettext-minimal)
1111 ("glib:bin" ,glib "bin")
1112 ("gobject-introspection" ,gobject-introspection)
1113 ("gtk+:bin" ,gtk+ "bin")
1114 ("python-distutils-extra" ,python-distutils-extra)
1115 ("python-setuptools" ,python-setuptools)
1116 ("xorg-server" ,xorg-server-for-tests)))
1120 ("farstream" ,farstream)
1121 ("geoclue" ,geoclue)
1123 ("glib-networking" ,glib-networking)
1124 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
1127 ("gstreamer" ,gstreamer)
1128 ("gst-plugins-base" ,gst-plugins-base)
1130 ("gupnp-igd" ,gupnp-igd)
1131 ("libsecret" ,libsecret)
1132 ("libsoup" ,libsoup)
1133 ("libxss" ,libxscrnsaver)
1134 ("network-manager" ,network-manager)
1135 ("python-css-parser" ,python-css-parser)
1136 ("python-keyring" ,python-keyring)
1137 ("python-nbxmpp" ,python-nbxmpp)
1138 ("python-packaging" ,python-packaging)
1139 ("python-pillow" ,python-pillow)
1140 ("python-precis-i18n" ,python-precis-i18n)
1141 ("python-pycairo" ,python-pycairo)
1142 ("python-pygobject" ,python-pygobject)
1143 ("python-pyopenssl" ,python-pyopenssl)))
1145 `(("dconf" ,dconf)))
1146 (synopsis "Fully-featured XMPP client")
1147 (description "Gajim aims to be an easy to use and fully-featured XMPP chat
1148 client. It is extensible via plugins, supports end-to-end encryption (OMEMO
1149 and OpenPGP) and available in 29 languages.")
1150 (home-page "https://gajim.org/")
1151 (license license:gpl3)))
1153 (define-public gajim-omemo
1155 (name "gajim-omemo")
1159 (method url-fetch/zipbomb)
1162 "https://ftp.gajim.org/plugins_releases/omemo_"
1165 (base32 "1msr71rvik05wjpa2inpkadddad2rxaqbqcww5qrdrcz75pm8brn"))))
1166 (build-system trivial-build-system)
1168 `(#:modules ((guix build utils))
1171 (use-modules (guix build utils))
1172 (let* ((out (assoc-ref %outputs "out"))
1173 (share (in-vicinity out "share/gajim/plugins"))
1174 (source (assoc-ref %build-inputs "source")))
1176 (copy-recursively source share)
1179 `(("python-axolotl" ,python-axolotl)
1180 ("python-axolotl-curve25519" ,python-axolotl-curve25519)
1181 ("python-cryptography" ,python-cryptography)
1182 ("python-qrcode" ,python-qrcode)))
1183 (synopsis "Gajim OMEMO plugin")
1184 (description "Gajim-OMEMO is a plugin that adds support for the OMEMO
1185 Encryption to Gajim. OMEMO is an XMPP Extension Protocol (XEP) for secure
1186 multi-client end-to-end encryption.")
1188 "https://dev.gajim.org/gajim/gajim-plugins/-/wikis/OmemoGajimPlugin")
1189 (license license:gpl3+)))
1191 (define-public gajim-openpgp
1193 (name "gajim-openpgp")
1197 (method url-fetch/zipbomb)
1200 "https://ftp.gajim.org/plugins_releases/openpgp_"
1203 (base32 "0fzvvrap1hmj4rbrcjs6cs5c9l9c0795bgw9vxxxk915n6j91m23"))))
1204 (build-system trivial-build-system)
1206 `(#:modules ((guix build utils))
1209 (use-modules (guix build utils))
1210 (let* ((out (assoc-ref %outputs "out"))
1211 (share (in-vicinity out "share/gajim/plugins"))
1212 (source (assoc-ref %build-inputs "source")))
1214 (copy-recursively source share)
1217 `(("python-cryptography" ,python-cryptography)
1218 ("python-gnupg" ,python-gnupg)
1219 ("python-gpg" ,python-gpg)))
1220 (synopsis "Gajim OpenPGP plugin")
1221 (description "Gajim-OpenPGP is a plugin that adds support for the OpenPGP
1222 Encryption to Gajim.")
1223 (home-page "https://dev.gajim.org/gajim/gajim-plugins/-/wikis/OpenPGPplugin")
1224 (license license:gpl3+)))
1234 (string-append "https://github.com/dino/dino/releases/download/v"
1235 version "/dino-" version ".tar.gz"))
1237 (base32 "0iigh7bkil6prf02dqcl6lmd89jxz685h8lqr3ni4x39zkcransn"))))
1238 (build-system cmake-build-system)
1239 (outputs '("out" "debug"))
1242 #:parallel-build? #f ; not supported
1243 #:modules ((guix build cmake-build-system)
1244 ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
1246 #:imported-modules (,@%gnu-build-system-modules
1247 (guix build cmake-build-system)
1248 (guix build glib-or-gtk-build-system))
1250 (modify-phases %standard-phases
1251 (add-after 'install 'glib-or-gtk-wrap
1252 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
1254 `(("gettext" ,gettext-minimal)
1255 ("glib:bin" ,glib "bin")
1256 ("gtk+:bin" ,gtk+ "bin")
1257 ("pkg-config" ,pkg-config)
1261 ("glib-networking" ,glib-networking)
1263 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
1265 ("libgcrypt" ,libgcrypt)
1267 ("libsignal-protocol-c" ,libsignal-protocol-c)
1268 ("libsoup" ,libsoup)
1269 ("qrencode" ,qrencode)
1273 ("glib-networking" ,glib-networking)
1274 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
1275 (synopsis "Graphical Jabber/XMPP Client using GTK+/Vala")
1276 (description "Dino is a chat client for the desktop. It focuses on providing
1277 a minimal yet reliable Jabber/XMPP experience and having encryption enabled by
1279 (home-page "https://dino.im")
1280 (license license:gpl3+)))
1282 (define-public prosody
1288 (uri (string-append "https://prosody.im/downloads/source/"
1289 "prosody-" version ".tar.gz"))
1292 "11xz4milv2962qf75vrdwsvd8sy2332nf69202rmvz5989pvvnng"))))
1293 (build-system gnu-build-system)
1295 `(#:tests? #f ;tests require "busted"
1296 #:configure-flags (list "--no-example-certs")
1297 #:modules ((ice-9 match)
1299 (guix build gnu-build-system)
1302 (modify-phases %standard-phases
1303 (add-after 'unpack 'fix-configure-script
1305 ;; The configure script aborts when it encounters unexpected
1306 ;; arguments. Make it more tolerant.
1307 (substitute* "configure"
1310 (add-after 'unpack 'fix-makefile
1312 (substitute* "GNUmakefile"
1313 ;; prosodyctl needs to read the configuration file.
1314 (("^INSTALLEDCONFIG =.*") "INSTALLEDCONFIG = /etc/prosody\n")
1315 ;; prosodyctl needs a place to put auto-generated certificates.
1316 (("^INSTALLEDDATA =.*") "INSTALLEDDATA = /var/lib/prosody\n"))
1318 (add-after 'install 'wrap-programs
1319 (lambda* (#:key inputs outputs #:allow-other-keys)
1320 ;; Make sure all executables in "bin" find the required Lua
1321 ;; modules at runtime.
1322 (let* ((out (assoc-ref outputs "out"))
1323 (bin (string-append out "/bin/"))
1324 (deps (delete #f (map (match-lambda
1325 ((label . directory)
1326 (if (string-prefix? "lua" label)
1329 (lua-path (string-join
1332 path "/share/lua/5.2/?.lua;"
1333 path "/share/lua/5.2/?/?.lua"))
1336 (lua-cpath (string-join
1339 path "/lib/lua/5.2/?.so;"
1340 path "/lib/lua/5.2/?/?.so"))
1343 (openssl (assoc-ref inputs "openssl"))
1344 (coreutils (assoc-ref inputs "coreutils"))
1345 (path (map (lambda (dir)
1346 (string-append dir "/bin"))
1347 (list openssl coreutils))))
1348 (for-each (lambda (file)
1350 `("LUA_PATH" ";" = (,lua-path))
1351 `("LUA_CPATH" ";" = (,lua-cpath))
1352 `("PATH" ":" prefix ,path)))
1353 (find-files bin ".*"))
1356 `(("libidn" ,libidn)
1357 ("openssl" ,openssl)
1359 ("lua5.2-bitop" ,lua5.2-bitop)
1360 ("lua5.2-expat" ,lua5.2-expat)
1361 ("lua5.2-socket" ,lua5.2-socket)
1362 ("lua5.2-filesystem" ,lua5.2-filesystem)
1363 ("lua5.2-sec" ,lua5.2-sec)))
1364 (home-page "https://prosody.im/")
1365 (synopsis "Jabber (XMPP) server")
1366 (description "Prosody is a modern XMPP communication server. It aims to
1367 be easy to set up and configure, and efficient with system resources.
1368 Additionally, for developers it aims to be easy to extend and give a flexible
1369 system on which to rapidly develop added functionality, or prototype new
1371 (license license:x11)))
1373 (define-public prosody-http-upload
1374 (let ((changeset "765735bb590b")
1377 (name "prosody-http-upload")
1378 (version (string-append "0-" revision "." (string-take changeset 7)))
1382 (url "https://hg.prosody.im/prosody-modules/")
1383 (changeset changeset)))
1384 (file-name (string-append name "-" version "-checkout"))
1387 "142wrcism70nf8ffahhd961cqg2pi1h7ic8adfs3zwh0j3pnf41f"))))
1388 (build-system trivial-build-system)
1390 '(#:modules ((guix build utils))
1393 (use-modules (guix build utils))
1394 (let ((out (assoc-ref %outputs "out"))
1395 (source (assoc-ref %build-inputs "source")))
1396 (with-directory-excursion (in-vicinity source "mod_http_upload")
1397 (install-file "mod_http_upload.lua" out))
1399 (home-page "https://modules.prosody.im/mod_http_upload.html")
1400 (synopsis "XEP-0363: Allow clients to upload files over HTTP")
1401 (description "This module implements XEP-0363: it allows clients to
1402 upload files over HTTP.")
1403 (license (package-license prosody)))))
1405 (define-public prosody-smacks
1406 (let ((changeset "67f1d1f22625")
1409 (name "prosody-smacks")
1410 (version (string-append "0-" revision "." (string-take changeset 7)))
1414 (url "https://hg.prosody.im/prosody-modules/")
1415 (changeset changeset)))
1416 (file-name (string-append name "-" version "-checkout"))
1419 "020ngpax30fgarah98yvlj0ni8rcdwq60if03a9hqdw8mic0nxxs"))))
1420 (build-system trivial-build-system)
1422 '(#:modules ((guix build utils))
1425 (use-modules (guix build utils))
1426 (let ((out (assoc-ref %outputs "out"))
1427 (source (assoc-ref %build-inputs "source")))
1428 (with-directory-excursion (in-vicinity source "mod_smacks")
1429 (install-file "mod_smacks.lua" out))
1431 (home-page "https://modules.prosody.im/mod_smacks.html")
1432 (synopsis "XEP-0198: Reliability and fast reconnects for XMPP")
1433 (description "This module implements XEP-0198: when supported by both
1434 the client and server, it can allow clients to resume a disconnected session,
1435 and prevent message loss.")
1436 (license (package-license prosody)))))
1438 (define-public libtoxcore
1439 (let ((revision "2")
1440 (commit "bf69b54f64003d160d759068f4816b2d9b2e1e21"))
1443 (version (string-append "0.0.0" "-"
1444 revision "."(string-take commit 7)))
1448 (url "https://github.com/irungentoo/toxcore")
1450 (file-name (string-append name "-" version "-checkout"))
1453 "11lqra4yd7v293cp286ynff5lqz1pprzg8vn3wq6vryj08g88zqb"))))
1454 (build-system gnu-build-system)
1455 (arguments `(#:tests? #f)) ; FIXME: tests hang, some fail.
1457 `(("autoconf" ,autoconf)
1458 ("automake" ,automake)
1459 ("libtool" ,libtool)
1461 ("pkg-config" ,pkg-config)))
1463 `(("libsodium" ,libsodium)
1465 ("libvpx" ,libvpx)))
1466 (synopsis "Library for the Tox encrypted messenger protocol")
1468 "C library implementation of the Tox encrypted messenger protocol.")
1469 (license license:gpl3+)
1470 (home-page "https://tox.chat"))))
1472 ;; Some tox clients move to c-toxcore, which seems to be where all the
1473 ;; recent development happens. It is run by the same developers as toxcore,
1474 ;; forked into a group namespace.
1475 (define-public c-toxcore
1483 (url "https://github.com/TokTok/c-toxcore")
1484 (commit (string-append "v" version))))
1485 (file-name (git-file-name name version))
1488 "0a6sqpm00d2rn0nviqfz4gh9ck1wzci6rxgmqmcyryl5ca19ffvp"))))
1490 `(#:tests? #f)) ; FIXME: Testsuite seems to stay stuck on test 3. Disable
1492 (build-system cmake-build-system)
1494 `(("pkg-config" ,pkg-config)))
1496 `(("libsodium" ,libsodium)
1498 ("libvpx" ,libvpx)))
1499 (home-page "https://tox.chat")
1500 (synopsis "Library for the Tox encrypted messenger protocol")
1502 "Official fork of the C library implementation of the Tox encrypted
1503 messenger protocol.")
1504 (license license:gpl3+)))
1514 (url "https://github.com/uTox/uTox")
1515 (commit (string-append "v" version))
1516 (recursive? #t))) ;; Needed for 'minini' git submodule.
1517 (file-name (string-append name "-" version "-checkout"))
1520 "01rvlf94d4rkrygnnjak3cg16hrrqyi1rn9nx65y17qk2nbyh68g"))))
1521 (build-system cmake-build-system)
1523 `(#:configure-flags '("-DENABLE_TESTS=on")
1525 (modify-phases %standard-phases
1526 (add-before 'build 'patch-absolute-filename-libgtk-3
1527 (lambda* (#:key inputs outputs #:allow-other-keys)
1528 (substitute* "../source/src/xlib/gtk.c"
1530 (string-append (assoc-ref inputs "gtk+")
1531 "/lib/libgtk-3.so")))))
1532 (add-after 'install 'wrap-program
1533 (lambda* (#:key inputs outputs #:allow-other-keys)
1534 (wrap-program (string-append (assoc-ref outputs "out")
1536 ;; For GtkFileChooserDialog.
1537 `("GSETTINGS_SCHEMA_DIR" =
1538 (,(string-append (assoc-ref inputs "gtk+")
1539 "/share/glib-2.0/schemas")))))))))
1542 ("filteraudio" ,filteraudio)
1543 ("fontconfig" ,fontconfig)
1544 ("freetype" ,freetype)
1545 ("c-toxcore" ,c-toxcore)
1549 ("libxext" ,libxext)
1550 ("libxrender" ,libxrender)
1552 ("v4l-utils" ,v4l-utils)))
1555 ("pkg-config" ,pkg-config)))
1556 (synopsis "Lightweight Tox client")
1558 "uTox is a lightweight Tox client. Tox is a distributed and secure
1559 instant messenger with audio and video chat capabilities.")
1560 (home-page "https://github.com/uTox/uTox")
1561 (license license:gpl3)))
1569 (uri (string-append "https://github.com/qTox/qTox/releases"
1570 "/download/v" version
1571 "/v" version ".tar.gz"))
1574 "11n7si9wdpf80iwkvbspp14dh5jrwm7hxkj8vqhn5pkc48c5bh9j"))
1575 (file-name (string-append name "-" version ".tar.gz"))))
1576 (build-system cmake-build-system)
1579 (modify-phases %standard-phases
1580 (add-after 'unpack 'fix-reproducibility-issues
1582 (substitute* "src/main.cpp"
1583 (("__DATE__") "\"\"")
1584 (("__TIME__") "\"\"")
1585 (("TIMESTAMP") "\"\""))
1587 (add-after 'unpack 'disable-network-tests
1589 ;; These tests require network access.
1590 (substitute* "cmake/Testing.cmake"
1591 (("auto_test\\(core core\\)") "# auto_test(core core)")
1592 (("auto_test\\(net bsu\\)") "# auto_test(net bsu)"))
1594 ;; Ensure that icons are found at runtime.
1595 (add-after 'install 'wrap-executable
1596 (lambda* (#:key inputs outputs #:allow-other-keys)
1597 (let ((out (assoc-ref outputs "out")))
1598 (wrap-program (string-append out "/bin/qtox")
1599 `("QT_PLUGIN_PATH" prefix
1600 ,(list (string-append (assoc-ref inputs "qtsvg")
1601 "/lib/qt5/plugins/"))))))))))
1603 `(("ffmpeg" ,ffmpeg)
1604 ("filteraudio" ,filteraudio)
1607 ("libsodium" ,libsodium)
1608 ("c-toxcore" ,c-toxcore)
1610 ("libxscrnsaver" ,libxscrnsaver)
1612 ("libexif" ,libexif)
1615 ("qrencode" ,qrencode)
1618 ("sqlcipher" ,sqlcipher)))
1620 `(("pkg-config" ,pkg-config)
1621 ("qmake" ,qttools)))
1622 (home-page "https://qtox.github.io/")
1623 (synopsis "Tox chat client using Qt")
1624 (description "qTox is a Tox client that follows the Tox design
1625 guidelines. It provides an easy to use application that allows you to
1626 connect with friends and family without anyone else listening in.")
1627 (license license:gpl3+)))
1629 (define-public ytalk
1636 (uri (string-append "ftp://ftp.ourproject.org/pub/ytalk/ytalk-"
1640 "1d3jhnj8rgzxyxjwfa22vh45qwzjvxw1qh8fz6b7nfkj3zvk9jvf"))))
1641 (build-system gnu-build-system)
1643 `(("ncurses" ,ncurses)))
1644 (home-page "https://ytalk.ourproject.org")
1645 (synopsis "Multi-user chat program")
1646 (description "Ytalk is a replacement for the BSD talk program. Its main
1647 advantage is the ability to communicate with any arbitrary number of users at
1648 once. It supports both talk protocols (\"talk\" and \"ntalk\") and can communicate
1649 with several different talk daemons at the same time.")
1650 (license license:gpl2+)))
1652 (define-public gloox
1659 (uri (string-append "https://camaya.net/download/gloox-"
1660 version ".tar.bz2"))
1662 (base32 "1jgrd07qr9jvbb5hcmhrqz4w4lvwc51m30jls1fgxf1f5az6455f"))))
1663 (build-system gnu-build-system)
1665 `(("libidn" ,libidn)
1669 `(("pkg-config" ,pkg-config)))
1670 (synopsis "Portable high-level Jabber/XMPP library for C++")
1672 "gloox is a full-featured Jabber/XMPP client library,
1673 written in ANSI C++. It makes writing spec-compliant clients easy
1674 and allows for hassle-free integration of Jabber/XMPP functionality
1675 into existing applications.")
1676 (home-page "https://camaya.net/gloox")
1677 (license license:gpl3)))
1679 (define-public perl-net-psyc
1681 (name "perl-net-psyc")
1686 (uri (string-append "https://perl.psyc.eu/"
1687 "perlpsyc-" version ".zip"))
1688 (file-name (string-append name "-" version ".zip"))
1691 "0vsjclglkwgbyd9m5ad642fyysxw2x725nhq4r2m9pvqaq6s5yf2"))))
1692 (build-system perl-build-system)
1694 `(("unzip" ,unzip)))
1696 `(("perl-curses" ,perl-curses)
1697 ("perl-io-socket-ssl" ,perl-io-socket-ssl)))
1700 (modify-phases %standard-phases
1701 (delete 'configure) ; No configure script
1702 ;; There is a Makefile, but it does not install everything
1703 ;; (leaves out psycion) and says
1704 ;; "# Just to give you a rough idea". XXX: Fix it upstream.
1706 (lambda _ (invoke "make" "manuals")))
1708 (lambda* (#:key outputs #:allow-other-keys)
1709 (let* ((out (assoc-ref outputs "out"))
1710 (doc (string-append out "/share/doc/perl-net-psyc"))
1711 (man1 (string-append out "/share/man/man1"))
1712 (man3 (string-append out "/share/man/man3"))
1713 (bin (string-append out "/bin"))
1714 (libpsyc (string-append out "/lib/psyc/ion"))
1715 (libperl (string-append out "/lib/perl5/site_perl/"
1716 ,(package-version perl))))
1718 (copy-recursively "lib/perl5" libperl)
1719 (copy-recursively "lib/psycion" libpsyc)
1720 (copy-recursively "bin" bin)
1721 (install-file "cgi/psycpager" (string-append doc "/cgi"))
1722 (copy-recursively "contrib" (string-append doc "/contrib"))
1723 (copy-recursively "hooks" (string-append doc "/hooks"))
1724 (copy-recursively "sdj" (string-append doc "/sdj"))
1725 (install-file "README.txt" doc)
1726 (install-file "TODO.txt" doc)
1727 (copy-recursively "share/man/man1" man1)
1728 (copy-recursively "share/man/man3" man3)
1730 (add-after 'install 'wrap-programs
1731 (lambda* (#:key outputs #:allow-other-keys)
1732 ;; Make sure all executables in "bin" find the Perl modules
1733 ;; provided by this package at runtime.
1734 (let* ((out (assoc-ref outputs "out"))
1735 (bin (string-append out "/bin/"))
1736 (path (getenv "PERL5LIB")))
1737 (for-each (lambda (file)
1739 `("PERL5LIB" ":" prefix (,path))))
1740 (find-files bin "\\.*$"))
1743 "@code{Net::PSYC} with support for TCP, UDP, Event.pm, @code{IO::Select} and
1744 Gtk2 event loops. This package includes 12 applications and additional scripts:
1745 psycion (a @uref{https://about.psyc.eu,PSYC} chat client), remotor (a control console
1746 for @uref{https://torproject.org,tor} router) and many more.")
1747 (synopsis "Perl implementation of PSYC protocol")
1748 (home-page "https://perl.psyc.eu")
1749 (license (list license:gpl2
1750 license:perl-license
1751 ;; contrib/irssi-psyc.pl:
1752 license:public-domain
1753 ;; bin/psycplay states AGPL with no version:
1756 (define-public libpsyc
1759 (version "20160913")
1762 (uri (string-append "http://www.psyced.org/files/"
1763 name "-" version ".tar.xz"))
1766 "14q89fxap05ajkfn20rnhc6b1h4i3i2adyr7y6hs5zqwb2lcmc1p"))))
1767 (build-system gnu-build-system)
1771 ("procps" ,procps)))
1775 (string-append "PREFIX=" (assoc-ref %outputs "out")))
1777 (modify-phases %standard-phases
1778 ;; The rust bindings are the only ones in use, the lpc bindings
1779 ;; are in psyclpc. The other bindings are not used by anything,
1780 ;; the chances are high that the bindings do not even work,
1781 ;; therefore we do not include them.
1782 ;; TODO: Get a cargo build system in Guix.
1783 (delete 'configure)))) ; no configure script
1784 (home-page "https://about.psyc.eu/libpsyc")
1786 "@code{libpsyc} is a PSYC library in C which implements
1787 core aspects of PSYC, useful for all kinds of clients and servers
1789 (synopsis "PSYC library in C")
1790 (license license:agpl3+)))
1792 ;; This commit removes the historic bundled pcre and makes psyclpc reproducible.
1793 (define-public psyclpc
1794 (let* ((commit "61cf9aa81297085e5c40170fd01221c752f8deba")
1798 (version (string-append "20160821-" revision "." (string-take commit 7)))
1802 (url "git://git.psyced.org/git/psyclpc")
1804 (file-name (string-append name "-" version "-checkout"))
1807 "1viwqymbhn3cwvx0zl58rlzl5gw47zxn0ldg2nbi55ghm5zxl1z5"))))
1808 (build-system gnu-build-system)
1810 `(#:tests? #f ; There are no tests/checks.
1812 ;; If you have questions about this part, look at
1813 ;; "src/settings/psyced" and the ebuild.
1815 "--enable-use-tls=yes"
1816 "--enable-use-mccp" ; Mud Client Compression Protocol, leave this enabled.
1817 (string-append "--prefix="
1818 (assoc-ref %outputs "out"))
1819 ;; src/Makefile: Set MUD_LIB to the directory which contains
1820 ;; the mud data. defaults to MUD_LIB = @libdir@
1821 (string-append "--libdir="
1822 (assoc-ref %outputs "out")
1823 "/opt/psyced/world")
1824 (string-append "--bindir="
1825 (assoc-ref %outputs "out")
1827 ;; src/Makefile: Set ERQ_DIR to directory which contains the
1828 ;; stuff which ERQ can execute (hopefully) savely. Was formerly
1829 ;; defined in config.h. defaults to ERQ_DIR= @libexecdir@
1830 (string-append "--libexecdir="
1831 (assoc-ref %outputs "out")
1834 (modify-phases %standard-phases
1835 (add-before 'configure 'chdir-to-src
1836 ;; We need to pass this as env variables
1837 ;; and manually change the directory.
1840 (setenv "CONFIG_SHELL" (which "sh"))
1841 (setenv "SHELL" (which "sh"))
1843 #:make-flags (list "install-all")))
1846 ("openssl" ,openssl-1.0)
1849 `(("pkg-config" ,pkg-config)
1851 ("gettext" ,gettext-minimal)
1852 ("help2man" ,help2man)
1853 ("autoconf" ,autoconf)
1854 ("automake" ,automake)))
1855 (home-page "http://lpc.psyc.eu/")
1856 (synopsis "psycLPC is a multi-user network server programming language")
1858 "LPC is a bytecode language, invented to specifically implement
1859 multi user virtual environments on the internet. This technology is used for
1860 MUDs and also the psyced implementation of the Protocol for SYnchronous
1861 Conferencing (PSYC). psycLPC is a fork of LDMud with some new features and
1863 (license license:gpl2))))
1865 (define-public loudmouth
1872 (uri (string-append "https://mcabber.com/files/loudmouth/"
1873 name "-" version ".tar.bz2"))
1876 "03adv5xc84l9brcx0dpyqyffmsclans8yfrpnd357k6x3wfckjri"))))
1877 (build-system gnu-build-system)
1878 (outputs '("out" "doc"))
1884 (string-append "--with-html-dir="
1885 (assoc-ref %outputs "doc")
1886 "/share/gtk-doc/html"))
1889 "CFLAGS=-Wno-error=all")))
1894 ("libidn" ,libidn)))
1896 `(("pkg-config" ,pkg-config)
1898 ("glib" ,glib "bin") ; gtester
1899 ("gtk-doc" ,gtk-doc)))
1900 (home-page "https://mcabber.com/")
1902 "Loudmouth is a lightweight and easy-to-use C library for programming
1903 with the XMPP (formerly known as Jabber) protocol. It is designed to be
1904 easy to get started with and yet extensible to let you do anything the XMPP
1906 (synopsis "Asynchronous XMPP library")
1907 ;; The files have LGPL2.0+ headers, but COPYING specifies LGPL2.1.
1908 (license license:lgpl2.0+)))
1910 (define-public mcabber
1917 (uri (string-append "https://mcabber.com/files/"
1918 name "-" version ".tar.bz2"))
1920 (base32 "0q1i5acyghsmzas88qswvki8kkk2nfpr8zapgnxbcd3lwcxl38f4"))))
1921 (build-system gnu-build-system)
1928 "--enable-aspell")))
1933 ("enchant" ,enchant-1.6)
1936 ("ncurses" ,ncurses)
1937 ("loudmouth" ,loudmouth)))
1940 ("pkg-config" ,pkg-config)
1941 ("python" ,python-wrapper)))
1942 (home-page "https://mcabber.com")
1944 "Mcabber is a small XMPP (Jabber) console client, which includes features
1945 such as SASL and TLS support, @dfn{Multi-User Chat} (MUC) support, logging,
1946 command-completion, OpenPGP encryption, @dfn{Off-the-Record Messaging} (OTR)
1947 support, and more.")
1948 (synopsis "Small XMPP console client")
1949 (license license:gpl2+)))
1951 (define-public freetalk
1957 (uri (string-append "mirror://gnu/freetalk/freetalk-"
1961 "1rmrn7a1bb7vm26yaklrvx008a9qhwc32s57dwrlf40lv9gffwny"))))
1962 (build-system gnu-build-system)
1965 (modify-phases %standard-phases
1966 ;; For 'system' commands in Scheme code.
1967 (add-after 'install 'wrap-program
1968 (lambda* (#:key inputs outputs #:allow-other-keys)
1969 (let* ((out (assoc-ref outputs "out"))
1970 (bash (assoc-ref inputs "bash"))
1971 (coreutils (assoc-ref inputs "coreutils"))
1972 (less (assoc-ref inputs "less")))
1973 (wrap-program (string-append out "/bin/freetalk")
1976 (string-append dir "/bin"))
1977 (list bash coreutils less))))
1980 `(("autoconf" ,autoconf)
1981 ("automake" ,automake)
1982 ("pkg-config" ,pkg-config)
1983 ("texinfo" ,texinfo)))
1987 ("guile" ,guile-2.0)
1989 ("loudmouth" ,loudmouth)
1990 ("readline" ,readline)))
1991 (synopsis "Extensible console-based Jabber client")
1993 "GNU Freetalk is a command-line Jabber/XMPP chat client. It notably uses
1994 the Readline library to handle input, so it features convenient navigation of
1995 text as well as tab-completion of buddy names, commands and English words. It
1996 is also scriptable and extensible via Guile.")
1997 (home-page "https://www.gnu.org/software/freetalk/")
1998 (license license:gpl3+)))
2000 (define-public libmesode
2007 (url "https://github.com/profanity-im/libmesode")
2009 (file-name (git-file-name name version))
2012 "1bxnkhrypgv41qyy1n545kcggmlw1hvxnhwihijhhcf2pxd2s654"))))
2013 (build-system gnu-build-system)
2015 `(#:configure-flags (list "--disable-static")
2017 (modify-phases %standard-phases
2018 (add-after 'unpack 'patch-make
2020 (substitute* "Makefile.am"
2021 (("'\\^xmpp_'") "'.'"))
2025 ("openssl" ,openssl)))
2027 `(("autoconf" ,autoconf)
2028 ("automake" ,automake)
2029 ("libtool" ,libtool)
2030 ("pkg-config" ,pkg-config)))
2031 (synopsis "C library for writing XMPP clients")
2032 (description "Libmesode is a fork of libstrophe for use with Profanity
2033 XMPP Client. In particular, libmesode provides extra TLS functionality such as
2034 manual SSL certificate verification.")
2035 (home-page "https://github.com/profanity/libmesode")
2037 (license (list license:gpl3+ license:x11))))
2039 (define-public libstrophe
2047 (url "https://github.com/strophe/libstrophe")
2049 (file-name (git-file-name name version))
2051 (base32 "11d341avsfr0z4lq15cy5dkmff6qpy91wkgzdpfdy31l27pa1g79"))))
2052 (build-system gnu-build-system)
2054 `(#:configure-flags (list "--disable-static")
2056 (modify-phases %standard-phases
2057 (add-after 'unpack 'patch-make
2059 (substitute* "Makefile.am"
2060 (("'\\^xmpp_'") "'.'"))
2064 ("openssl" ,openssl)))
2066 `(("autoconf" ,autoconf)
2067 ("automake" ,automake)
2068 ("libtool" ,libtool)
2069 ("pkg-config" ,pkg-config)))
2070 (synopsis "C library for writing XMPP clients")
2071 (description "Libstrophe is a minimal XMPP library written in C. It has
2072 almost no external dependencies, only an XML parsing library (expat or libxml
2073 are both supported).")
2074 (home-page "http://strophe.im/libstrophe")
2076 (license (list license:gpl3+ license:x11))))
2078 (define-public profanity
2086 (string-append "https://profanity-im.github.io/profanity-"
2090 "137z77514fgj2dk13d12g4jrn6gs5k85nwrk1r1kiv7rj0jy61aa"))))
2091 (build-system glib-or-gtk-build-system)
2096 "--enable-notifications"
2097 "--enable-python-plugins"
2098 "--enable-c-plugins"
2103 "--enable-icons-and-clipboard")))
2105 `(("autoconf" ,autoconf)
2106 ("autoconf-archive" ,autoconf-archive)
2107 ("automake" ,automake)
2109 ("libtool" ,libtool)
2110 ("pkg-config" ,pkg-config)))
2117 ("libgcrypt" ,libgcrypt)
2118 ("libmesode" ,libmesode)
2119 ("libnotify" ,libnotify)
2121 ("libsignal-protocol-c" ,libsignal-protocol-c)
2122 ;; ("libxss" ,libxss)
2123 ("ncurses" ,ncurses)
2124 ("openssl" ,openssl)
2125 ("python" ,python-wrapper)
2126 ("readline" ,readline)
2127 ("sqlite" ,sqlite)))
2128 (synopsis "Console-based XMPP client")
2129 (description "Profanity is a console based XMPP client written in C
2130 using ncurses and libmesode, inspired by Irssi.")
2131 (home-page "https://profanity-im.github.io")
2132 (license license:gpl3+)))
2134 (define-public libircclient
2136 (name "libircclient")
2141 (uri (string-append "mirror://sourceforge/libircclient/libircclient/"
2142 version "/libircclient-" version ".tar.gz"))
2145 "0b9wa0h3xc31wpqlvgxgnvqp5wgx3kwsf5s9432m5cj8ycx6zcmv"))))
2146 (build-system gnu-build-system)
2148 `(("openssl" ,openssl)))
2151 (list (string-append "--libdir="
2152 (assoc-ref %outputs "out") "/lib")
2156 #:tests? #f)) ; no test suite
2157 (home-page "https://www.ulduzsoft.com/libircclient/")
2158 (synopsis "Library implementing the client IRC protocol")
2159 (description "Libircclient is a library which implements the client IRC
2160 protocol. It is designed to be small, fast, portable and compatible with the
2161 RFC standards as well as non-standard but popular features. It can be used for
2162 building the IRC clients and bots.")
2163 (license license:lgpl3+)))
2165 (define-public toxic
2173 (url "https://github.com/JFreegman/toxic")
2174 (commit (string-append "v" version))))
2176 (base32 "0p1cmj1kyp506y5xm04mhlznhf5wcylvgsn6b307ms91vjqs3fg2"))
2177 (file-name (git-file-name name version))))
2178 (build-system gnu-build-system)
2180 `(#:tests? #f ; no tests
2184 (string-append "PREFIX="
2185 (assoc-ref %outputs "out")))
2187 (modify-phases %standard-phases
2189 (add-before 'build 'enable-python-scripting
2191 ;; XXX: For compatibility with Python 3.8, adjust python3-config
2192 ;; invokation to include --embed; see
2193 ;; <https://github.com/JFreegman/toxic/issues/533>.
2194 (substitute* "cfg/checks/python.mk"
2195 (("python3-config --ldflags")
2196 "python3-config --ldflags --embed"))
2197 (setenv "ENABLE_PYTHON" "1")
2200 `(("c-toxcore" ,c-toxcore)
2202 ("freealut" ,freealut)
2203 ("gdk-pixbuf" ,gdk-pixbuf) ; for libnotify.pc
2204 ("libconfig" ,libconfig)
2205 ("libnotify" ,libnotify)
2209 ("ncurses" ,ncurses)
2212 ("qrencode" ,qrencode)))
2214 `(("pkg-config" ,pkg-config)))
2215 (home-page "https://github.com/JFreegman/toxic")
2216 (synopsis "Tox chat client using ncurses")
2217 (description "Toxic is a console-based instant messaging client, using
2218 c-toxcore and ncurses. It provides audio calls, sound and desktop
2219 notifications, and Python scripting support.")
2220 (license license:gpl3+)))
2222 (define-public libqmatrixclient
2224 (name "libqmatrixclient")
2230 (url "https://github.com/quotient-im/libQuotient")
2232 (file-name (git-file-name name version))
2234 (base32 "0gkwr3yw6k2m0j8cc085b5p2q788rf5nhp1p5hc5d55pc7mci2qs"))))
2235 (build-system cmake-build-system)
2237 `(("qtbase" ,qtbase)
2238 ("qtmultimedia" ,qtmultimedia)))
2240 `(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON")
2241 #:tests? #f)) ; no tests
2242 (home-page "https://matrix.org/docs/projects/sdk/libqmatrixclient.html")
2243 (synopsis "Qt5 client library for the Matrix instant messaging protocol")
2244 (description "libqmatrixclient is a Qt5 library to write clients for the
2245 Matrix instant messaging protocol. Quaternion is the reference client
2246 implementation. Quaternion and libqmatrixclient together form the
2247 QMatrixClient project.")
2248 (license license:lgpl2.1+)))
2250 (define-public mtxclient
2258 (url "https://github.com/Nheko-Reborn/mtxclient")
2259 (commit (string-append "v" version))))
2260 (file-name (git-file-name name version))
2262 (base32 "1dg4dq20g0ah62j5s3gpsxqq4ny7lxkxdxa9q6g54hdwkrb9ms7x"))))
2266 ;; Disable example binaries (not installed)
2267 "-DBUILD_LIB_EXAMPLES=OFF")
2269 (modify-phases %standard-phases
2270 (add-before 'configure 'disable-network-tests
2272 (substitute* "CMakeLists.txt"
2273 (("add_test\\((BasicConnectivity|ClientAPI|MediaAPI|Encryption|Pushrules)")
2276 (add-before 'configure 'set-home
2278 ;; Tries to create package registry file
2280 (setenv "HOME" "/tmp")
2282 (build-system cmake-build-system)
2285 ("json-modern-cxx" ,json-modern-cxx)
2287 ("libsodium" ,libsodium)
2288 ("openssl" ,openssl)
2292 `(("googletest" ,googletest)
2293 ("pkg-config" ,pkg-config)))
2294 (home-page "https://github.com/Nheko-Reborn/mtxclient")
2295 (synopsis "Client API library for the Matrix protocol")
2296 (description "@code{mtxclient} is a C++ library that implements client API
2297 for the Matrix protocol. It is built on to of @code{Boost.Asio}.")
2298 (license license:expat)))
2300 (define-public nheko
2308 (url "https://github.com/Nheko-Reborn/nheko")
2309 (commit (string-append "v" version))))
2310 (file-name (git-file-name name version))
2312 (base32 "1cbhgaf9klgxdirrxj571fqwspm0byl75c1xc40l727a6qswvp7s"))))
2314 `(#:tests? #f ;no test target
2317 "-DCMAKE_BUILD_TYPE=Release"
2318 "-DCMAKE_CXX_FLAGS=-fpermissive")
2320 (modify-phases %standard-phases
2321 (add-after 'unpack 'remove-Werror
2323 (substitute* "CMakeLists.txt"
2326 (add-after 'unpack 'fix-determinism
2328 ;; Make Qt deterministic.
2329 (setenv "QT_RCC_SOURCE_DATE_OVERRIDE" "1")
2331 (build-system qt-build-system)
2335 ("json-modern-cxx" ,json-modern-cxx)
2339 ("mtxclient" ,mtxclient)
2340 ("openssl" ,openssl)
2342 ("qtdeclarative" ,qtdeclarative)
2343 ("qtgraphicaleffects" ,qtgraphicaleffects)
2344 ("qtmultimedia" ,qtmultimedia)
2345 ("qtquickcontrols2" ,qtquickcontrols2)
2351 `(("pkg-config" ,pkg-config)
2352 ("qtlinguist" ,qttools)))
2353 (home-page "https://github.com/Nheko-Reborn/nheko")
2354 (synopsis "Desktop client for Matrix using Qt and C++14")
2355 (description "@code{Nheko} want to provide a native desktop app for the
2356 Matrix protocol that feels more like a mainstream chat app and less like an IRC
2359 There is support for:
2361 @item E2E encryption (text messages only: attachments are currently sent unencrypted).
2362 @item User registration.
2363 @item Creating, joining & leaving rooms.
2364 @item Sending & receiving invites.
2365 @item Sending & receiving files and emoji.
2366 @item Typing notifications.
2367 @item Username auto-completion.
2368 @item Message & mention notifications.
2369 @item Redacting messages.
2370 @item Read receipts.
2371 @item Basic communities support.
2372 @item Room switcher (@key{ctrl-K}).
2373 @item Light, Dark & System themes.
2375 (license license:gpl3+)))
2377 (define-public quaternion
2380 (version "0.0.9.4f")
2381 (outputs '("out" "debug"))
2386 (url "https://github.com/quotient-im/Quaternion")
2388 (file-name (git-file-name name version))
2390 (base32 "1q9ddz4rs02a0w3lwrsjnh59khv38cq9f0kv09vnwvazvayn87ck"))))
2391 (build-system qt-build-system)
2393 `(("libqmatrixclient" ,libqmatrixclient)
2395 ("qtdeclarative" ,qtdeclarative)
2396 ("qtmultimedia" ,qtmultimedia)
2397 ("qtquickcontrols" ,qtquickcontrols)
2398 ("qtquickcontrols2" ,qtquickcontrols2)
2400 ("qttools" ,qttools)
2401 ("xdg-utils" ,xdg-utils)))
2403 `(#:tests? #f)) ; no tests
2404 (home-page "https://matrix.org/docs/projects/client/quaternion.html")
2405 (synopsis "Graphical client for the Matrix instant messaging protocol")
2406 (description "Quaternion is a Qt5 desktop client for the Matrix instant
2407 messaging protocol. It uses libqmatrixclient and is its reference client
2408 implementation. Quaternion and libqmatrixclient together form the
2409 QMatrixClient project.")
2410 (license (list license:gpl3+ ; all source code
2411 license:lgpl3+)))) ; icons/breeze
2413 (define-public hangups
2420 (uri (pypi-uri "hangups" version))
2422 (base32 "015g635vnrxk5lf9n80rdcmh6chv8kmla1k2j7m1iijijs519ngn"))))
2423 (build-system python-build-system)
2426 (modify-phases %standard-phases
2427 (add-before 'build 'relax-dependencies
2428 ;; Relax overly strict package version specifications.
2430 (substitute* "setup.py"
2435 `(("python-aiohttp" ,python-aiohttp)
2436 ("python-appdirs" ,python-appdirs)
2437 ("python-async-timeout" ,python-async-timeout)
2438 ("python-configargparse" ,python-configargparse)
2439 ("python-mechanicalsoup" ,python-mechanicalsoup)
2440 ("python-protobuf" ,python-protobuf-3.6)
2441 ("python-readlike" ,python-readlike)
2442 ("python-reparser" ,python-reparser)
2443 ("python-requests" ,python-requests)
2444 ("python-urwid" ,python-urwid)))
2446 `(("python-httpretty" ,python-httpretty)
2447 ("python-pytest" ,python-pytest)))
2448 (home-page "https://hangups.readthedocs.io/")
2449 (synopsis "Instant messaging client for Google Hangouts")
2451 "Hangups is an instant messaging client for Google Hangouts. It includes
2452 both a Python library and a reference client with a text-based user interface.
2454 Hangups is implements a reverse-engineered version of Hangouts' proprietary,
2455 non-interoperable protocol, which allows it to support features like group
2456 messaging that aren’t available to clients that connect over XMPP.")
2457 (license license:expat)))
2459 (define-public telegram-purple
2461 (name "telegram-purple")
2463 (home-page "https://github.com/majn/telegram-purple")
2468 (commit (string-append "v" version))
2472 "0imbzhhq9qbj6gvkckrnjhls2vvmmy8db7l6gsd7lng2pbfcn522"))
2473 (modules '((guix build utils)))
2476 (substitute* "Makefile.in"
2477 ;; By default these two directories point to Pidgin's own
2479 (("^PLUGIN_DIR_PURPLE=.*")
2481 "exec_prefix := @exec_prefix@\n"
2482 "PLUGIN_DIR_PURPLE := @libdir@/purple-2\n"))
2483 (("^DATA_ROOT_DIR_PURPLE=.*")
2484 "DATA_ROOT_DIR_PURPLE := @datarootdir@\n")
2486 ;; Honor sysconfdir instead of trying to write to /etc.
2487 (("DESTDIR\\)/etc/telegram-purple")
2488 "DESTDIR)@sysconfdir@/telegram-purple"))
2490 (patches (search-patches "telegram-purple-adjust-test.patch"))
2491 (file-name (git-file-name name version))))
2492 (build-system gnu-build-system)
2494 `(("pkg-config" ,pkg-config)
2495 ("gettext" ,gettext-minimal)
2498 `(("pidgin" ,pidgin)
2499 ("libgcrypt" ,libgcrypt)
2500 ("libwebp" ,libwebp)
2506 (modify-phases %standard-phases
2507 ;; We're using release tag for repository checkout - let's prepare
2508 ;; header defining GIT_COMMIT manually instead of running git to
2509 ;; identify version which is being compiled. Git repository
2510 ;; is removed anyway and only source code is kept.
2511 (add-after 'unpack 'prepare-commit.h
2513 (with-output-to-file "./commit.h"
2516 (string-append "//generated by guix, use version instead of "
2518 "#ifndef GIT_COMMIT\n"
2519 "# define GIT_COMMIT \"v"
2523 (add-before 'configure 'set-SHELL-variables
2524 ;; Set these environment variables so that 'tgl/configure' uses the
2525 ;; right shell and not /bin/sh.
2527 (let ((bash (which "bash")))
2528 (setenv "SHELL" bash)
2529 (setenv "CONFIG_SHELL" bash)
2531 (synopsis "Telegram messaging support for Pidgin")
2533 "Telegram-purple is a plugin for Libpurple, the communication library
2534 used by the Pidgin instant messaging client, that adds support for the
2535 Telegram messenger.")
2537 ;; Code under tgl/ (the Telegram library) is LGPLv2.1+, but the plugin
2538 ;; itself is GPLv2+.
2539 (license license:gpl2+)))
2541 (define-public tdlib
2548 (url "https://github.com/tdlib/td")
2549 (commit (string-append "v" version))))
2552 "0dfir57ljcn98mkg061c5642qb93wh2lm1n4nngpl3na9vvfk75i"))
2553 (file-name (git-file-name name version))))
2554 (build-system cmake-build-system)
2558 (list "-DCMAKE_BUILD_TYPE=Release"
2559 "-DTD_ENABLE_LTO=OFF") ; FIXME: Get LTO to work.
2561 (modify-phases %standard-phases
2562 (add-after 'unpack 'remove-failing-tests
2564 (substitute* "test/CMakeLists.txt"
2565 ;; The test cases are compiled into a distinct binary
2566 ;; which uses mtproto.cpp to attempt to connect to
2567 ;; a remote server. Removing this file from the sources
2568 ;; list disables those specific test cases.
2569 (("\\$\\{CMAKE_CURRENT_SOURCE_DIR\\}/mtproto.cpp") ""))
2573 ("openssl" ,openssl)
2576 ("doxygen" ,doxygen)))
2577 (synopsis "Cross-platform library for building Telegram clients")
2578 (description "Tdlib is a cross-platform library for creating custom
2579 Telegram clients following the official Telegram API. It can be easily used
2580 from almost any programming language with a C-FFI and features first-class
2581 support for high performance Telegram Bot creation.")
2582 (home-page "https://core.telegram.org/tdlib")
2583 (license license:boost1.0)))
2585 (define-public purple-mm-sms
2587 (name "purple-mm-sms")
2592 (url "https://source.puri.sm/Librem5/purple-mm-sms.git")
2593 (commit (string-append "v" version))))
2594 (file-name (git-file-name name version))
2597 "1daf7zl8bhhm1szkgxflpqql69f2w9i9nlgf1n4p1nynxifz1bim"))))
2598 (build-system gnu-build-system)
2601 (let ((out (assoc-ref %outputs "out")))
2602 ;; Fix hardcoded paths
2603 (list (string-append "PREFIX=" out)
2604 (string-append "PLUGIN_DIR_PURPLE=" out "/lib/purple-2")
2605 (string-append "DATA_ROOT_DIR_PURPLE=" out "/share")))
2606 #:tests? #f ; no tests
2608 (modify-phases %standard-phases
2609 (delete 'configure))))
2611 `(("glib:bin" ,glib "bin")
2612 ("pkg-config" ,pkg-config)))
2614 `(("modem-manager" ,modem-manager)
2615 ("pidgin" ,pidgin)))
2616 (synopsis "Libpurple plugin for SMS via ModemManager")
2617 (description "Plugin for libpurple to allow sending SMS using ModemManager.")
2618 (home-page "https://source.puri.sm/Librem5/purple-mm-sms")
2619 (license license:gpl2+)))
2621 (define-public chatty
2628 (url "https://source.puri.sm/Librem5/chatty.git")
2629 (commit (string-append "v" version))))
2630 (file-name (git-file-name name version))
2633 "0ba1rw8a3vif9k3570hxjfm25vqys3vk3f6g8z5irklwq4bi6lmn"))))
2634 (build-system meson-build-system)
2637 (modify-phases %standard-phases
2638 (add-after 'unpack 'skip-updating-desktop-database
2640 (substitute* "meson.build"
2641 (("meson.add_install_script.*") ""))
2644 `(("gettext" ,gettext-minimal)
2645 ("glib:bin" ,glib "bin")
2646 ("pkg-config" ,pkg-config)))
2648 `(("feedbackd" ,feedbackd)
2650 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
2651 ("libgcrypt" ,libgcrypt)
2653 ("libhandy" ,libhandy-0.0)
2655 ("purple-mm-sms" ,purple-mm-sms)
2656 ("sqlite" ,sqlite)))
2658 `(("adwaita-icon-theme" ,adwaita-icon-theme)
2659 ("evolution-data-server" ,evolution-data-server)))
2660 (synopsis "Mobile client for XMPP and SMS messaging")
2661 (description "Chatty is a chat program for XMPP and SMS. It works on mobile
2662 as well as on desktop platforms. It's based on libpurple and ModemManager.")
2663 (home-page "https://source.puri.sm/Librem5/chatty")
2664 (license license:gpl3+)))
2666 (define-public mosquitto
2673 (uri (string-append "https://mosquitto.org/files/source/mosquitto-"
2677 "1yq7y329baa1ly488rw125c3mvsnsa7kjkik602xv1xpkz8p73al"))))
2678 (build-system cmake-build-system)
2680 `(("openssl" ,openssl)))
2681 (synopsis "Message broker")
2682 (description "This package provides Eclipse Mosquitto, a message broker
2683 that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1. Mosquitto
2684 is lightweight and is suitable for use on all devices from low power single
2685 board computers to full servers.
2687 The MQTT protocol provides a lightweight method of carrying out messaging
2688 using a publish/subscribe model. This makes it suitable for Internet of
2689 Things messaging such as with low power sensors or mobile devices such
2690 as phones, embedded computers or microcontrollers.")
2691 (home-page "https://mosquitto.org/")
2693 (license (list license:epl1.0 license:edl1.0))))
2695 (define-public movim-desktop
2696 (let ((commit "83d583b83629dbd2ec448da9a1ffd81f6c1fb295")
2699 (name "movim-desktop")
2701 (git-version "0.14.0" revision commit))
2707 (url "https://github.com/movim/movim_desktop")
2709 (file-name (git-file-name name version))
2711 (base32 "1lsa3k3wx1d2lk0qs0k5jc5bmapnmpzwynprjf2wihh8c8y3iwlz"))))
2712 (build-system qt-build-system)
2714 `(#:tests? #f ; No target
2716 (modify-phases %standard-phases
2717 (add-after 'unpack 'patch
2718 (lambda* (#:key outputs #:allow-other-keys)
2719 (substitute* `("CMakeLists.txt" "movim.desktop")
2721 (assoc-ref outputs "out"))
2726 `(("qtbase" ,qtbase)
2727 ("qtdeclarative" ,qtdeclarative)
2728 ("qtwebchannel" ,qtwebchannel)))
2730 `(("qtwebengine" ,qtwebengine)))
2731 (home-page "https://movim.eu/")
2732 (synopsis "Desktop Application for Movim")
2734 "Movim-Desktop is a desktop application, relying on Qt, for the Movim
2735 social and chat platform.")
2736 (license license:gpl3+))))
2738 (define-public psi-plus
2741 (version "1.5.1482")
2747 (url "https://github.com/psi-plus/psi-plus-snapshots")
2749 (file-name (git-file-name name version))
2750 (modules '((guix build utils)))
2753 (delete-file-recursively "3rdparty")))
2755 (base32 "0lcx616hchwf492m1dm8ddb4qd2pmgf703ajnnb0y9ky99kgg8q2"))))
2756 (build-system qt-build-system)
2758 `(#:tests? #f ; No target
2760 (,@%qt-build-system-modules
2761 (guix build glib-or-gtk-build-system))
2763 ((guix build qt-build-system)
2764 ((guix build glib-or-gtk-build-system)
2765 #:prefix glib-or-gtk:)
2769 "-DBUILD_PSIMEDIA=ON" ; For A/V support
2770 "-DENABLE_PLUGINS=ON"
2771 "-DUSE_HUNSPELL=OFF" ; Use Enchant instead
2773 "-DUSE_CCACHE=OFF") ; Not required
2775 (modify-phases %standard-phases
2776 (add-after 'unpack 'patch-source
2778 (substitute* "CMakeLists.txt"
2779 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/http-parser/http_parser.h")
2781 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qhttp/qhttp.pro")
2783 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qite/qite.pro")
2785 (("add_subdirectory\\( 3rdparty \\)")
2787 (substitute* "src/CMakeLists.txt"
2788 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qite/libqite")
2790 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/http-parser")
2792 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qhttp/src/private")
2794 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qhttp/src")
2796 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty")
2798 (("add_dependencies\\(\\$\\{PROJECT_NAME\\} qhttp\\)")
2799 "target_link_libraries(${PROJECT_NAME} qhttp)"))
2800 (substitute* "src/src.cmake"
2801 (("include\\(\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qite/libqite/libqite.cmake\\)")
2802 "list(APPEND EXTRA_LIBS qite)"))
2803 (substitute* '("src/filesharingmanager.h" "src/widgets/psirichtext.cpp"
2804 "src/filesharingmanager.cpp" "src/widgets/psitextview.cpp"
2805 "src/chatview_te.cpp" "src/msgmle.cpp")
2810 (("qiteaudiorecorder.h")
2811 "qite/qiteaudiorecorder.h"))
2813 (add-after 'install 'wrap-env
2814 (lambda* (#:key outputs #:allow-other-keys)
2815 (let ((out (assoc-ref outputs "out")))
2818 (let ((file (string-append out "/bin/" name))
2819 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH"))
2820 (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
2822 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
2823 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))
2826 (add-after 'wrap-env 'glib-or-gtk-compile-schemas
2827 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
2828 (add-after 'glib-or-gtk-compile-schemas 'glib-or-gtk-wrap
2829 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
2831 `(("glib:bin" ,glib "bin")
2832 ("gobject-introspection" ,gobject-introspection)
2834 ("pkg-config" ,pkg-config)
2835 ("python" ,python-wrapper)
2840 ("enchant" ,enchant)
2842 ("gstreamer" ,gstreamer)
2843 ("gst-plugins-base" ,gst-plugins-base)
2844 ("http-parser" ,http-parser)
2845 ("libgcrypt" ,libgcrypt)
2846 ("libgpg-error" ,libgpg-error)
2849 ("libsignal-protocol-c" ,libsignal-protocol-c)
2850 ("libtidy" ,tidy-html)
2851 ("openssl" ,openssl)
2856 ("qtkeychain" ,qtkeychain)
2857 ("qtmultimedia" ,qtmultimedia)
2859 ("qtx11extras" ,qtx11extras)
2860 ("usrsctp" ,usrsctp)
2864 ("xss" ,libxscrnsaver)
2866 (home-page "https://psi-plus.com/")
2867 (synopsis "Qt-based XMPP Client")
2869 "Psi+ is a spin-off of Psi XMPP client. It is a powerful XMPP client
2870 designed for experienced users.")
2871 (license license:gpl2+)))
2873 (define-public python-zulip
2875 (name "python-zulip")
2879 ;; There is no source on Pypi.
2882 (url "https://github.com/zulip/python-zulip-api")
2884 (file-name (git-file-name name version))
2887 "0da1ki1v252avy27j6d7snnc0gyq0xa9fypm3qdmxhw2w79d6q36"))))
2888 (build-system python-build-system)
2891 (modify-phases %standard-phases
2892 (add-after 'unpack 'cd-to-zulip-dir
2897 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
2898 (let ((test-zulip "../tools/test-zulip"))
2900 (add-installed-pythonpath inputs outputs)
2901 (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
2902 (patch-shebang test-zulip)
2903 (invoke test-zulip))
2906 `(("python-matrix-client" ,python-matrix-client)
2907 ("python-pyopenssl" ,python-pyopenssl)
2908 ("python-requests" ,python-requests)
2909 ("python-six" ,python-six)))
2911 `(("python-cython" ,python-cython)
2912 ("python-distro" ,python-distro)
2913 ("python-pytest" ,python-pytest)))
2914 (home-page "https://github.com/zulip/python-zulip-api")
2915 (synopsis "Zulip's API Python bindings")
2917 "This package provides Python bindings to Zulip's API.")
2918 (license license:asl2.0)))
2920 (define-public zulip-term
2926 ;; Pypi package doesn't ship tests.
2929 (url "https://github.com/zulip/zulip-terminal")
2931 (file-name (git-file-name name version))
2934 "1xhhy3v4wck74a83avil0rnmsi2grrh03cww19n5mv80p2q1cjmf"))
2935 (modules '((guix build utils)))
2938 (substitute* "setup.py"
2939 (("\\=\\=1\\.7") ">=1.7") ; pytest-mock
2940 (("\\=\\=2\\.5") ">=2.5") ; pytest-cov
2941 (("4\\.5\\.2") "4.4.2")) ; lxml
2943 (build-system python-build-system)
2946 (modify-phases %standard-phases
2948 (lambda* (#:key tests? #:allow-other-keys)
2950 ;; Delete failing tests.
2951 (delete-file "tests/cli/test_run.py")
2955 `(("python-beautifulsoup4" ,python-beautifulsoup4)
2956 ("python-lxml" ,python-lxml)
2957 ("python-mypy-extensions" ,python-mypy-extensions)
2958 ("python-urwid" ,python-urwid)
2959 ("python-urwid-readline" ,python-urwid-readline)
2960 ("python-zulip" ,python-zulip)))
2962 `(("python-distro" ,python-distro)
2963 ("python-pytest" ,python-pytest)
2964 ("python-pytest-cov" ,python-pytest-cov)
2965 ("python-pytest-mock" ,python-pytest-mock)))
2966 (home-page "https://github.com/zulip/zulip-terminal")
2967 (synopsis "Zulip's official terminal client")
2968 (description "This package contains Zulip's official terminal client.")
2969 (license license:asl2.0)))
2971 ;;; messaging.scm ends here