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, 2021 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, 2021 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, 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
22 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
23 ;;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
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, 2022 Michael Rohleder <mike@rohleder.de>
28 ;;; Copyright © 2020, 2022 Raghav Gururajan <rg@raghavgururajan.name>
29 ;;; Copyright © 2020, 2021 Robert Karszniewicz <avoidr@posteo.de>
30 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
31 ;;; Copyright © 2021 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
32 ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
33 ;;; Copyright © 2021 jgart <jgart@dismail.de>
34 ;;; Copyright © 2022 Aleksandr Vityazev <avityazev@posteo.org>
35 ;;; Copyright © 2022 Ricardo Wurmus <rekado@elephly.net>
36 ;;; Copyright © 2022 Jai Vetrivelan <jaivetrivelan@gmail.com>
37 ;;; Copyright © 2022 Jack Hill <jackhill@jackhill.us>
38 ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
39 ;;; Copyright © 2022 Giovanni Biscuolo <g@xelera.eu>
41 ;;; This file is part of GNU Guix.
43 ;;; GNU Guix is free software; you can redistribute it and/or modify it
44 ;;; under the terms of the GNU General Public License as published by
45 ;;; the Free Software Foundation; either version 3 of the License, or (at
46 ;;; your option) any later version.
48 ;;; GNU Guix is distributed in the hope that it will be useful, but
49 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
50 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
51 ;;; GNU General Public License for more details.
53 ;;; You should have received a copy of the GNU General Public License
54 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
56 (define-module (gnu packages messaging)
57 #:use-module (gnu packages)
58 #:use-module (gnu packages admin)
59 #:use-module (gnu packages aidc)
60 #:use-module (gnu packages aspell)
61 #:use-module (gnu packages audio)
62 #:use-module (gnu packages autotools)
63 #:use-module (gnu packages avahi)
64 #:use-module (gnu packages base)
65 #:use-module (gnu packages bash)
66 #:use-module (gnu packages bison)
67 #:use-module (gnu packages boost)
68 #:use-module (gnu packages check)
69 #:use-module (gnu packages code)
70 #:use-module (gnu packages compression)
71 #:use-module (gnu packages cpp)
72 #:use-module (gnu packages crypto)
73 #:use-module (gnu packages curl)
74 #:use-module (gnu packages cyrus-sasl)
75 #:use-module (gnu packages databases)
76 #:use-module (gnu packages docbook)
77 #:use-module (gnu packages documentation)
78 #:use-module (gnu packages enchant)
79 #:use-module (gnu packages fontutils)
80 #:use-module (gnu packages freedesktop)
81 #:use-module (gnu packages gettext)
82 #:use-module (gnu packages glib)
83 #:use-module (gnu packages gnome)
84 #:use-module (gnu packages gnupg)
85 #:use-module (gnu packages golang)
86 #:use-module (gnu packages gperf)
87 #:use-module (gnu packages graphviz)
88 #:use-module (gnu packages gstreamer)
89 #:use-module (gnu packages gtk)
90 #:use-module (gnu packages guile)
91 #:use-module (gnu packages icu4c)
92 #:use-module (gnu packages image)
93 #:use-module (gnu packages kde)
94 #:use-module (gnu packages kde-frameworks)
95 #:use-module (gnu packages kerberos)
96 #:use-module (gnu packages less)
97 #:use-module (gnu packages libcanberra)
98 #:use-module (gnu packages libevent)
99 #:use-module (gnu packages libffi)
100 #:use-module (gnu packages libidn)
101 #:use-module (gnu packages libreoffice)
102 #:use-module (gnu packages linux)
103 #:use-module (gnu packages logging)
104 #:use-module (gnu packages lua)
105 #:use-module (gnu packages man)
106 #:use-module (gnu packages markup)
107 #:use-module (gnu packages matrix)
108 #:use-module (gnu packages mpd)
109 #:use-module (gnu packages ncurses)
110 #:use-module (gnu packages networking)
111 #:use-module (gnu packages nss)
112 #:use-module (gnu packages pcre)
113 #:use-module (gnu packages perl)
114 #:use-module (gnu packages photo)
115 #:use-module (gnu packages php)
116 #:use-module (gnu packages pkg-config)
117 #:use-module (gnu packages protobuf)
118 #:use-module (gnu packages python)
119 #:use-module (gnu packages python-check)
120 #:use-module (gnu packages python-crypto)
121 #:use-module (gnu packages python-web)
122 #:use-module (gnu packages python-xyz)
123 #:use-module (gnu packages qt)
124 #:use-module (gnu packages readline)
125 #:use-module (gnu packages ruby)
126 #:use-module (gnu packages sphinx)
127 #:use-module (gnu packages sqlite)
128 #:use-module (gnu packages tcl)
129 #:use-module (gnu packages telephony)
130 #:use-module (gnu packages texinfo)
131 #:use-module (gnu packages textutils)
132 #:use-module (gnu packages tls)
133 #:use-module (gnu packages video)
134 #:use-module (gnu packages web)
135 #:use-module (gnu packages xdisorg)
136 #:use-module (gnu packages xiph)
137 #:use-module (gnu packages xml)
138 #:use-module (gnu packages xorg)
139 #:use-module (guix build-system cmake)
140 #:use-module (guix build-system go)
141 #:use-module (guix build-system glib-or-gtk)
142 #:use-module (guix build-system gnu)
143 #:use-module (guix build-system meson)
144 #:use-module (guix build-system perl)
145 #:use-module (guix build-system python)
146 #:use-module (guix build-system qt)
147 #:use-module (guix build-system trivial)
148 #:use-module (guix download)
149 #:use-module (guix gexp)
150 #:use-module (guix git-download)
151 #:use-module (guix hg-download)
152 #:use-module ((guix licenses) #:prefix license:)
153 #:use-module (guix packages)
154 #:use-module (guix utils))
156 (define-public omemo-wget
165 (url "https://github.com/roobre/omemo-wget")
166 (commit (string-append "v" version))))
167 (file-name (git-file-name name version))
169 (base32 "0s3vfaicw5xbjl9yiyr4ckrzhzqbvfh1w2ih1igavlfpgw4v7kva"))))
170 (build-system go-build-system)
172 `(#:import-path "github.com/roobre/omemo-wget"
174 (modify-phases %standard-phases
175 (add-after 'unpack 'patch
176 (lambda* (#:key inputs #:allow-other-keys)
177 (let* ((xdg-utils (assoc-ref inputs "xdg-utils"))
178 (xdg-open (string-append xdg-utils "/bin/xdg-open")))
179 (substitute* (find-files "." "\\.go$")
180 ;; Correct the import path of 'aesgcm' package.
181 (("roob\\.re/omemo-wget/aesgcm")
182 "github.com/roobre/omemo-wget/aesgcm")
183 ;; Use absolute path of 'xdg-open' program.
184 (("xdg-open") xdg-open))))))))
186 (list go-github-com-pkg-errors xdg-utils))
187 (home-page "https://roob.re/omemo-wget")
188 (synopsis "Program to download and decrypt @code{aesgcm://} URLs")
189 (description "OMEMO-wget is a tool to handle cryptographic URLs, generated
190 by @acronym{OMEMO, OMEMO Multi-End Message and Object Encryption}, during
191 XMPP-based sessions.")
192 (license license:lgpl3+)))
202 (string-append "mirror://sourceforge/psi/Psi/"
203 version "/psi-" version ".tar.xz"))
204 (modules '((guix build utils)))
207 (delete-file-recursively "3rdparty")))
209 (base32 "1dxmm1d1zr0pfs51lba732ipm6hm2357jlfb934lvarzsh7karri"))))
210 (build-system qt-build-system)
212 `(#:tests? #f ; No target
218 (modify-phases %standard-phases
219 (add-after 'unpack 'patch-cmake
221 (substitute* "cmake/modules/FindHunspell.cmake"
226 `(("pkg-config" ,pkg-config)
227 ("python" ,python-wrapper)
231 ("enchant" ,enchant-1.6)
232 ("hunspell" ,hunspell)
236 ("qtmultimedia-5" ,qtmultimedia-5)
238 ("qtwebkit" ,qtwebkit)
239 ("qtx11extras" ,qtx11extras)
244 (synopsis "Qt-based XMPP Client")
245 (description "Psi is a capable XMPP client aimed at experienced users.
246 Its design goals are simplicity and stability.")
247 (home-page "https://psi-im.org")
248 (license license:gpl2+)))
250 (define-public libgnt
258 (string-append "mirror://sourceforge/pidgin/libgnt/"
259 version "/libgnt-" version ".tar.xz"))
261 (base32 "08v14fjcx2wx6c573wllq015l6zc8qkpz8rrl6qhp7crf9zlbxap"))))
262 (build-system meson-build-system)
263 (outputs '("out" "doc"))
265 `(#:glib-or-gtk? #t ; To wrap binaries and/or compile schemas
267 (modify-phases %standard-phases
268 (add-after 'unpack 'patch-ncurses-path
269 (lambda* (#:key inputs #:allow-other-keys)
270 (substitute* "meson.build"
273 (assoc-ref inputs "ncurses")
275 (add-before 'configure 'patch-docbook-xml
276 (lambda* (#:key inputs #:allow-other-keys)
277 (with-directory-excursion "doc"
278 (substitute* "libgnt-docs.xml"
279 (("http://www.oasis-open.org/docbook/xml/4.1.2/")
280 (string-append (assoc-ref inputs "docbook-xml")
281 "/xml/dtd/docbook/"))))))
282 (add-after 'install 'move-doc
283 (lambda* (#:key outputs #:allow-other-keys)
284 (let* ((out (assoc-ref outputs "out"))
285 (doc (assoc-ref outputs "doc")))
286 (mkdir-p (string-append doc "/share"))
288 (string-append out "/share/gtk-doc")
289 (string-append doc "/share/gtk-doc"))))))))
291 `(("docbook-xml" ,docbook-xml-4.1.2)
292 ("glib:bin" ,glib "bin")
293 ("gobject-introspection" ,gobject-introspection)
295 ("pkg-config" ,pkg-config)))
301 ("python" ,python-2)))
302 (synopsis "GLib Ncurses Toolkit")
303 (description "GNT is an ncurses toolkit for creating text-mode graphical
304 user interfaces in a fast and easy way. It is based on GLib and ncurses.")
305 (home-page "https://keep.imfreedom.org/libgnt/libgnt")
306 (license license:gpl2+)))
308 (define-public libgadu
317 (url "https://github.com/wojtekka/libgadu.git")
320 (git-file-name name version))
322 (base32 "1s16cripy5w9k12534qb012iwc5m9qcjyrywgsziyn3kl3i0aa8h"))))
323 (build-system gnu-build-system)
325 ;; 'test/manual/userconfig.h' contains definitions in lieu of
326 ;; declarations, hence '-fcommon'.
328 (list "--disable-static" "CFLAGS=-O2 -g -fcommon")
330 (modify-phases %standard-phases
331 (add-after 'unpack 'patch-shebangs
332 (lambda* (#:key inputs #:allow-other-keys)
333 (substitute* "protobufgen.sh"
335 (search-input-file inputs "/bin/sh"))))))))
347 ("libprotobuf-c" ,protobuf-c)
353 (synopsis "Library for handling the protocol of Gadu-Gadu")
354 (description "LibGadu is library for handling Gadu-Gadu instant messenger
355 protocol. The library is written in C and aims to be operating system and
356 environment independent.")
357 (home-page "https://libgadu.net/index.en.html")
358 (license license:lgpl2.1+)))
360 (define-public silc-toolkit
362 (name "silc-toolkit")
368 (string-append "mirror://sourceforge/silc/silc/toolkit/sources/silc-toolkit-"
371 (base32 "0mnvf9n7qriadg0p7a8qmvcayhnns2g9fhmcymavlm0v8xrky33y"))))
372 (build-system gnu-build-system)
378 "--enable-stack-trace")
380 (modify-phases %standard-phases
381 (add-after 'unpack 'trigger-bootstrap
383 (delete-file "configure")
384 (delete-file "Makefile.in")
387 (list autoconf automake libtool perl pkg-config))
388 (synopsis "SILC ToolKit")
389 (description "SILC (Secure Internet Live Conferencing) is a modern and secure
390 conferencing protocol. It provides all the common conferencing services like
391 private messages, instant messages, channels and groups, and video and audio
393 (home-page "https://silc.github.io/info")
408 (url "https://github.com/qxmpp-project/qxmpp")
409 (commit (string-append "v" version))))
410 (file-name (git-file-name name version))
412 (base32 "1knpq1jkwk0lxdwczbmzf7qrjvlxba9yr40nbq9s5nqkcx6q1c3i"))))
413 (build-system cmake-build-system)
415 `(#:configure-flags (list "-DBUILD_EXAMPLES=false"
416 "-DWITH_GSTREAMER=true")
418 (modify-phases %standard-phases
420 (lambda* (#:key tests? #:allow-other-keys)
423 (string-join ;; These tests use the network.
424 (list "tst_qxmppiceconnection"
425 "tst_qxmppcallmanager"
426 "tst_qxmpptransfermanager")
431 (list gstreamer qtbase-5))
432 (home-page "https://github.com/qxmpp-project/qxmpp")
433 (synopsis "XMPP client and server library")
435 "QXmpp is a XMPP client and server library written in C++ and uses the Qt
436 framework. It builds XMPP clients complying with the XMPP Compliance Suites
437 2021 for IM and Advanced Mobile.")
438 (license license:lgpl2.1+)))
440 (define-public meanwhile
449 (url "https://github.com/obriencj/meanwhile.git")
451 (string-append "v" version))))
453 (git-file-name name version))
455 (base32 "1k1gvmx1ikm0y1mdmm495rzkb00pl170jfaf2dy0n5aiiknkk7q3"))))
456 (build-system glib-or-gtk-build-system)
458 (list autoconf automake doxygen libtool pkg-config))
461 (synopsis "Library for Lotus Instant Messaging")
462 (description "Meanwhile is a library for connecting to a LIM (Lotus Instant
463 Messaging, formerly Lotus Sametime, formerly VPBuddy) community. It uses a
464 protocol based in part off of the IMPP draft(*1), and in part off of traces of
465 TCP sessions from existing clients.")
466 (home-page "https://github.com/obriencj/meanwhile")
467 (license license:lgpl3)))
469 (define-public poezio
478 (url "https://lab.louiz.org/poezio/poezio.git")
480 (string-append "v" version))))
482 (git-file-name name version))
484 (base32 "0p92k8ssjsgavyfv1fd5cgzyw87dmdd84vaz7zvfsf5crvpr1mkf"))))
485 (build-system python-build-system)
488 #~(modify-phases %standard-phases
489 (add-after 'unpack 'patch
491 (substitute* "setup.py"
495 (list pkg-config python-setuptools python-sphinx))
500 python-pyasn1-modules
505 (synopsis "Console Jabber/XMPP Client")
506 (description "Poezio is a free console XMPP client (the protocol on which
507 the Jabber IM network is built).
508 Its goal is to let you connect very easily (no account creation needed) to the
509 network and join various chatrooms, immediately. It tries to look like the
510 most famous IRC clients (weechat, irssi, etc). Many commands are identical and
511 you won't be lost if you already know these clients. Configuration can be
512 made in a configuration file or directly from the client.
513 You'll find the light, fast, geeky and anonymous spirit of IRC while using a
514 powerful, standard and open protocol.")
515 (home-page "https://poez.io/en/")
516 (license license:zlib)))
518 (define-public libotr
525 (uri (string-append "https://otr.cypherpunks.ca/libotr-"
528 (base32 "1x8rliydhbibmzwdbyr7pd7n87m2jmxnqkpvaalnf4154hj1hfwb"))
530 (search-patches "libotr-test-auth-fix.patch"))))
531 (build-system gnu-build-system)
533 (list perl)) ; for the test suite
537 (list libgcrypt)) ; libotr headers include gcrypt.h
538 (synopsis "Off-the-Record (OTR) Messaging Library and Toolkit")
539 (description "OTR allows you to have private conversations over instant
540 messaging by providing: (1) Encryption: No one else can read your instant
541 messages. (2) Authentication: You are assured the correspondent is who you
542 think it is. (3) Deniability: The messages you send do not have digital
543 signatures that are checkable by a third party. Anyone can forge messages
544 after a conversation to make them look like they came from you. However,
545 during a conversation, your correspondent is assured the messages he sees are
546 authentic and unmodified. (4) Perfect forward secrecy: If you lose control of
547 your private keys, no previous conversation is compromised.")
548 (home-page "https://otr.cypherpunks.ca/")
556 (define-public libsignal-protocol-c
558 (name "libsignal-protocol-c")
563 (url "https://github.com/WhisperSystems/libsignal-protocol-c")
564 (commit (string-append "v" version))))
565 (file-name (git-file-name name version))
568 "0z5p03vk15i6h870azfjgyfgxhv31q2vq6rfhnybrnkxq2wqzwhk"))))
570 `(;; Required for proper linking and for tests to run.
571 #:configure-flags '("-DBUILD_SHARED_LIBS=on" "-DBUILD_TESTING=1")))
572 (build-system cmake-build-system)
573 (inputs (list ;; Required for tests:
575 (native-inputs (list pkg-config))
576 (home-page "https://github.com/WhisperSystems/libsignal-protocol-c")
577 (synopsis "Implementation of a ratcheting forward secrecy protocol")
578 (description "libsignal-protocol-c is an implementation of a ratcheting
579 forward secrecy protocol that works in synchronous and asynchronous
580 messaging environments. It can be used with messaging software to provide
581 end-to-end encryption.")
582 (license license:gpl3+)))
592 (url "https://github.com/gkdr/axc")
593 (commit (string-append "v" version))))
594 (modules '((guix build utils)))
597 ;; Empty directories meant to hold submodules that we provide as
598 ;; proper inputs below.
599 (delete-file-recursively "lib")))
601 (git-file-name name version))
603 (base32 "0b02b9flri374f8aw6xfz7mm9s57rb7393r8mdphv7kcsf76i7i5"))))
604 (build-system cmake-build-system)
606 `(#:phases (modify-phases %standard-phases
608 (lambda* (#:key outputs #:allow-other-keys)
609 (let ((out (assoc-ref outputs "out")))
611 (setenv "PREFIX" out)))))
612 #:parallel-tests? #f))
613 (native-inputs (list cmocka pkg-config))
614 (inputs (list glib libgcrypt libsignal-protocol-c sqlite))
615 (synopsis "Client library for libsignal-protocol-c")
616 (description "This is a client library for @code{libsignal-protocol-c}.
617 It implements the necessary interfaces using @code{libgcrypt} and
619 (home-page "https://github.com/gkdr/axc")
620 (license license:gpl3))) ;GPLv3-only, per license headers
622 (define-public libomemo
630 (url "https://github.com/gkdr/libomemo")
631 (commit (string-append "v" version))))
633 (git-file-name name version))
635 (base32 "1q3vyj8zk3vm0a4v6w8qya5dhk2yw04bga8799a0zl6907nf122k"))))
636 (build-system cmake-build-system)
638 `(#:phases (modify-phases %standard-phases
640 (lambda* (#:key outputs #:allow-other-keys)
641 (let ((out (assoc-ref outputs "out")))
643 (setenv "PREFIX" out)))))
644 #:parallel-tests? #f))
645 (native-inputs (list cmocka pkg-config))
646 (inputs (list glib libgcrypt minixml sqlite))
647 (synopsis "OMEMO C library")
648 (description "This library implements @acronym{OMEMO, OMEMO Multi-End
649 Message and Object Encryption} of XMPP (XEP-0384) in C.")
650 (home-page "https://github.com/gkdr/libomemo")
651 (license license:expat)))
653 (define-public bitlbee
659 (uri (string-append "https://get.bitlbee.org/src/bitlbee-"
662 (base32 "0zhhcbcr59sx9h4maf8zamzv2waya7sbsl7w74gbyilvy93dw5cz"))))
663 (build-system gnu-build-system)
664 (native-inputs (list pkg-config
665 ;; Note: Change to 'check' for versions > 3.6.
667 (inputs (list glib libotr gnutls python perl))
670 (modify-phases %standard-phases
671 (add-before 'configure 'set-python
672 (lambda _ (setenv "PYTHON" (which "python3")) #t))
673 (add-after 'install 'install-etc
674 (lambda* (#:key (make-flags '()) #:allow-other-keys)
675 (apply invoke "make" "install-etc" make-flags)))
676 (add-after 'install-etc 'install-lib
677 (lambda* (#:key (make-flags '()) #:allow-other-keys)
678 (apply invoke "make" "install-dev" make-flags)))
680 ;; bitlbee's configure script does not tolerate many of the
681 ;; variable settings that Guix would pass to it.
682 (lambda* (#:key outputs #:allow-other-keys)
683 (invoke "./configure"
684 (string-append "--prefix="
685 (assoc-ref outputs "out"))
687 (synopsis "IRC to instant messaging gateway")
688 (description "BitlBee brings IM (instant messaging) to IRC clients, for
689 people who have an IRC client running all the time and don't want to run an
690 additional IM client. BitlBee currently supports XMPP/Jabber (including
691 Google Talk), MSN Messenger, Yahoo! Messenger, AIM and ICQ, and the Twitter
692 microblogging network (plus all other Twitter API compatible services like
693 identi.ca and status.net).")
694 (home-page "https://www.bitlbee.org/")
695 (license (list license:gpl2+ license:bsd-2))))
697 (define-public bitlbee-purple
698 ;; This variant uses libpurple, which provides support for more protocols at
699 ;; the expense of a much bigger closure.
700 (package/inherit bitlbee
701 (name "bitlbee-purple")
702 (synopsis "IRC to instant messaging gateway (using Pidgin's libpurple)")
703 (inputs (modify-inputs (package-inputs bitlbee)
706 (list (search-path-specification
707 (variable "PURPLE_PLUGIN_PATH")
708 ;; XXX: Should be (version-major (package-version pidgin)) but
709 ;; can't due to circular references.
710 (files (list (string-append "lib/purple-2")
713 (substitute-keyword-arguments (package-arguments bitlbee)
714 ((#:phases phases '%standard-phases)
715 `(modify-phases ,phases
716 (replace 'configure ;add "--purple=1"
717 (lambda* (#:key outputs #:allow-other-keys)
718 (invoke "./configure"
719 (string-append "--prefix="
720 (assoc-ref outputs "out"))
721 "--otr=1" "--purple=1")))))
723 ;; XXX: Tests fail to link, and ./configure says that it's "supported
724 ;; on a best-effort basis" anyway.
727 (define-public bitlbee-discord
728 ;; Version 0.4.3 of bitlbee-discord was prepared to work for
729 ;; glib@2.68. However, version 2.69 of glib introduced a breaking change
730 ;; causing bitlbee-discord to throw:
732 ;; discord - Login error: Failed to switch to websocket mode
734 ;; This makes the plugin unable to connect and therefore unusable:
735 ;; https://github.com/sm00th/bitlbee-discord/issues/226
736 ;; The specified commit fixes incompatibility with glib@2.69 and newer.
737 (let ((commit "607f9887ca85f246e970778e3d40aa5c346365a7")
740 (name "bitlbee-discord")
741 (version (git-version "0.4.3" revision commit))
746 (url "https://github.com/sm00th/bitlbee-discord")
748 (file-name (git-file-name name version))
750 (base32 "0jkwhx2walx2ay0vc9x13q0j1qq4r5x30ss03a3j7ks28xvsnxc7"))))
751 (build-system gnu-build-system)
754 (let ((out (assoc-ref %outputs "out")))
755 (list (string-append "--with-bdatadir=" out "/share/bitlbee/")
756 (string-append "--with-plugindir=" out "/lib/bitlbee/")))
758 (modify-phases %standard-phases
759 (add-after 'unpack 'patch-autogen
761 (let ((sh (which "sh")))
762 (substitute* "autogen.sh" (("/bin/sh") sh))
763 (setenv "CONFIG_SHELL" sh)))))))
765 (native-inputs (list pkg-config
770 bitlbee ; needs bitlbee headers
772 (synopsis "Discord plugin for Bitlbee")
773 (description "Bitlbee-discord is a plugin for Bitlbee which provides
774 access to servers running the Discord protocol.")
775 (home-page "https://github.com/sm00th/bitlbee-discord/")
776 (license license:gpl2+))))
778 (define-public purple-mattermost
779 ;; The latest release (1.2) only supports Mattermost's /api/v3. Choose a
780 ;; commit that supports /api/v4.
781 (let ((commit "158ce2052af9aaf3d1f6f045f0cfba276e0e91cf")
784 (name "purple-mattermost")
785 (version (git-version "1.2" revision commit))
786 (home-page "https://github.com/EionRobb/purple-mattermost")
789 (uri (git-reference (url home-page)
791 (file-name (git-file-name name version))
794 "1481zm20pnfq52ncg7hxayjq8cw3a6yh9m4jm1m5s8chsq04015l"))))
795 (build-system gnu-build-system)
797 `(#:phases (modify-phases %standard-phases
799 (lambda* (#:key inputs outputs #:allow-other-keys)
800 ;; Adjust the makefile to install files in the right
802 (let ((out (assoc-ref outputs "out")))
803 (substitute* "Makefile"
804 (("MATTERMOST_DEST = .*")
805 (string-append "MATTERMOST_DEST = " out
806 "/lib/purple-2\n")) ;XXX: hardcoded
807 (("MATTERMOST_ICONS_DEST = .*")
808 (string-append "MATTERMOST_ICONS_DEST = "
810 "/share/pixmaps/pidgin/protocols\n")))
812 #:make-flags (list "CC=gcc"
813 ,(string-append "PLUGIN_VERSION=" version))
815 (inputs (list glib json-glib discount pidgin))
816 (native-inputs (list pkg-config))
817 (synopsis "Purple plug-in to access Mattermost instant messaging")
819 "Purple-Mattermost is a plug-in for Purple, the instant messaging library
820 used by Pidgin and Bitlbee, among others, to access
821 @uref{https://mattermost.com/, Mattermost} servers.")
822 (license license:gpl3+))))
824 (define-public hexchat
831 (uri (string-append "https://dl.hexchat.net/hexchat/hexchat-"
834 (base32 "1iy4ln6yfgy3xysrfpjxw8fn38i3qx8jsn2mk2prshfzf7d9gr57"))))
835 (build-system meson-build-system)
836 (native-inputs `(("gettext" ,gettext-minimal)
837 ("glib:bin" ,glib "bin") ;need glib-genmarshal
839 ("pkg-config" ,pkg-config)))
840 (inputs `(("dbus-glib" ,dbus-glib)
844 ("libcanberra" ,libcanberra)
847 ;; Bindings for add-on scripts.
849 ("perl-xml-parser" ,perl-xml-parser)
851 ("python-cffi" ,python-cffi)
853 ;; For the ensuing WRAP-PROGRAM.
854 ("bash-minimal" ,bash-minimal)))
857 (modify-phases %standard-phases
858 (add-after 'unpack 'skip-desktop-database-updates
860 ;; The build scripts update icon and desktop file databases when
861 ;; DESTDIR is not set. We can't update these databases from
862 ;; within the build chroot, but we also don't set DESTDIR. So, we
863 ;; just skip this code.
864 (substitute* "meson_post_install.py"
865 (("if 'DESTDIR' not in os.environ:")
867 (add-after 'install 'wrap-program
868 ;; Let it ‘initialize the Python-CFFI embedding logic’ at run time.
869 (lambda* (#:key outputs #:allow-other-keys)
870 (let* ((out (assoc-ref outputs "out"))
871 (bin (string-append out "/bin")))
872 (wrap-program (string-append bin "/hexchat")
873 `("GUIX_PYTHONPATH" ":" prefix
874 (,(getenv "GUIX_PYTHONPATH"))))))))))
875 (synopsis "Graphical IRC client")
877 "HexChat lets you connect to multiple IRC networks at once. The main
878 window shows the list of currently connected networks and their channels, the
879 current conversation and the list of users. It uses colors to differentiate
880 between users and to highlight messages. It checks spelling using available
881 dictionaries. HexChat can be extended with multiple addons.")
882 (home-page "https://hexchat.net/")
883 (license license:gpl2+)))
885 (define-public ngircd
891 (uri (string-append "https://arthur.barton.de/pub/ngircd/ngircd-"
895 "0m32v0c7mq96rshws4h6d0pi4bm0hynfzx3x01mgrxh9c396zham"))
896 (patches (search-patches "ngircd-handle-zombies.patch"))))
897 (build-system gnu-build-system)
898 ;; Needed for the test suite.
899 (native-inputs (list procps expect inetutils openssl))
901 (inputs `(("zlib" ,zlib)
902 ("libwrap" ,tcp-wrappers)
904 ,@(if (string-suffix? "-linux"
905 (or (%current-target-system)
907 `(("linux-pam" ,linux-pam))
911 '("--with-gnutls" "--with-iconv" "--enable-ipv6" "--with-tcp-wrappers"
912 ,@(if (string-suffix? "-linux"
913 (or (%current-target-system)
918 (modify-phases %standard-phases
919 ;; Necessary for the test suite.
920 (add-after 'configure 'post-configure
922 (substitute* "src/ngircd/Makefile"
923 (("/bin/sh") (which "sh")))
924 ;; The default getpid.sh does a sloppy grep over 'ps -ax' output,
925 ;; which fails arbitrarily.
926 (with-output-to-file "src/testsuite/getpid.sh"
930 "#!" (which "sh") "\n"
931 "ps -C \"$1\" -o pid=\n"))))
932 ;; Our variant of getpid.sh does not match interpreter names
933 ;; when the script's shebang is invoked directly as "./foo".
934 ;; Patch cases where the test suite relies on this.
935 (substitute* "src/testsuite/start-server.sh"
936 ;; It runs 'getpid.sh sh' to test if it works at all. Run it on
938 (("getpid.sh sh") "getpid.sh make")))))))
939 (home-page "https://ngircd.barton.de/")
940 (synopsis "Lightweight Internet Relay Chat server for small networks")
942 "ngIRCd is a lightweight @dfn{Internet Relay Chat} (IRC) server for small
943 or private networks. It is easy to configure, can cope with dynamic IP
944 addresses, and supports IPv6, SSL-protected connections, as well as PAM for
946 (license license:gpl2+)))
948 (define-public pidgin
956 (string-append "mirror://sourceforge/pidgin/Pidgin/"
957 version "/pidgin-" version ".tar.gz"))
959 (base32 "12llip3r8126gph82r638xjv2v2rg34qgggn1nbwfmc3s7halimr"))
961 (search-patches "pidgin-add-search-path.patch"))
962 (modules '((guix build utils)))
965 ;; Remove stale generated file after applying patches.
966 (delete-file "configure")
968 (build-system glib-or-gtk-build-system)
970 `(("autoconf" ,autoconf) ;; For bootstrap
971 ("automake" ,automake) ;; For bootstrap
975 ("intltool" ,intltool)
976 ("libtool" ,libtool) ;; For bootstrap
977 ("pkg-config" ,pkg-config)))
980 ("cyrus-sasl" ,cyrus-sasl)
982 ("dbus-glib" ,dbus-glib)
983 ;; ("evolution-data-server" ,evolution-data-server)
984 ("farstream" ,farstream)
986 ("gstreamer" ,gstreamer)
987 ;; ("gtkspell2" ,gtkspell2)
989 ("libgcrypt" ,libgcrypt)
998 ("libxscrnsaver" ,libxscrnsaver)
1000 ;; ("libzephyr" ,libzephyr)
1001 ("meanwhile" ,meanwhile)
1002 ("ncurses" ,ncurses)
1003 ("network-manager" ,network-manager)
1008 ("python" ,python-2)
1009 ("python2-dbus" ,python2-dbus)
1010 ("silc" ,silc-toolkit)
1012 ("startup-notification" ,startup-notification)
1020 (string-append "CFLAGS=-I"
1021 (assoc-ref %build-inputs "gst-plugins-base")
1022 "/include/gstreamer-1.0")
1023 "--disable-gtkspell"
1024 "--disable-gevolution"
1026 "--enable-cyrus-sasl"
1027 (string-append "--with-ncurses-headers="
1028 (assoc-ref %build-inputs "ncurses")
1030 (string-append "--with-tclconfig="
1031 (assoc-ref %build-inputs "tcl")
1033 (string-append "--with-tkconfig="
1034 (assoc-ref %build-inputs "tk")
1036 (native-search-paths
1038 (search-path-specification
1039 (variable "PURPLE_PLUGIN_PATH")
1042 (string-append "lib/purple-"
1043 (version-major version))
1045 (home-page "https://www.pidgin.im/")
1046 (synopsis "Graphical multi-protocol instant messaging client")
1047 (description "Pidgin is a modular instant messaging client that supports
1048 many popular chat protocols.")
1051 license:gpl2+ ; Most of the code
1052 license:lgpl2.1 ; GG protocol plugin (libpurple/protocols/gg/lib)
1053 license:lgpl2.0+ ; OSCAR protocol plugin (libpurple/protocols/oscar)
1054 ;; The following licenses cover the zephyr protocol plugin:
1055 (license:non-copyleft
1056 "file://libpurple/protocols/zephyr/mit-copyright.h"
1057 "See libpurple/protocols/zephyr/mit-copyright.h in the distribution.")
1058 (license:non-copyleft
1059 "file://libpurple/protocols/zephyr/mit-sipb-copyright.h"
1060 "See libpurple/protocols/zephyr/mit-sipb-copyright.h in the distribution.")))))
1062 (define-public pidgin-otr
1070 (string-append "https://otr.cypherpunks.ca/"
1071 name "-" version ".tar.gz"))
1073 (base32 "1i5s9rrgbyss9rszq6c6y53hwqyw1k86s40cpsfx5ccl9bprxdgl"))))
1074 (build-system gnu-build-system)
1076 (list gettext-minimal intltool pkg-config))
1085 (home-page "https://otr.cypherpunks.ca/")
1086 (synopsis "Off-the-Record Messaging plugin for Pidgin")
1087 (description "Pidgin-OTR is a plugin that adds support for OTR to the Pidgin
1088 instant messaging client. OTR (Off-the-Record) Messaging allows you to have
1089 private conversations over instant messaging by providing: (1) Encryption: No
1090 one else can read your instant messages. (2) Authentication: You are assured
1091 the correspondent is who you think it is. (3) Deniability: The messages you
1092 send do not have digital signatures that are checkable by a third party. Anyone
1093 can forge messages after a conversation to make them look like they came from
1094 you. However, during a conversation, your correspondent is assured the messages
1095 he sees are authentic and unmodified. (4) Perfect forward secrecy: If you lose
1096 control of your private keys, no previous conversation is compromised.")
1097 (license license:gpl2+)))
1105 (uri (string-append "https://znc.in/releases/archive/znc-"
1109 "03fyi0j44zcanj1rsdx93hkdskwfvhbywjiwd17f9q1a7yp8l8zz"))))
1110 (build-system cmake-build-system)
1113 (list "-DWANT_CYRUS=ON"
1118 (modify-phases %standard-phases
1119 (add-after 'unpack 'unpack-googletest
1120 ;; Copy the googletest sources to where the CMake build expects them.
1121 (lambda* (#:key inputs #:allow-other-keys)
1122 (let ((source (assoc-ref inputs "googletest-source"))
1123 (target "third_party/googletest"))
1125 (copy-recursively source target)
1129 ("gettext" ,gettext-minimal)
1130 ("googletest-source" ,(package-source googletest))
1131 ("pkg-config" ,pkg-config)))
1139 (home-page "https://wiki.znc.in/ZNC")
1140 (synopsis "IRC network bouncer")
1141 (description "ZNC is an @dfn{IRC network bouncer} or @dfn{BNC}. It can
1142 detach the client from the actual IRC server, and also from selected channels.
1143 Multiple clients from different locations can connect to a single ZNC account
1144 simultaneously and therefore appear under the same nickname on IRC.")
1145 (license license:asl2.0)))
1147 (define-public python-nbxmpp
1149 (name "python-nbxmpp")
1155 (pypi-uri "nbxmpp" version))
1157 (base32 "0c32090gr1fiy7hkn73dcj4ad9gfdpks8hivl1dl8bql01jsfdnj"))))
1158 (build-system python-build-system)
1160 (list `(,glib "bin")))
1169 (synopsis "Non-blocking XMPP Module")
1170 (description "Python-nbxmpp is a Python library that provides a way for
1171 Python applications to use the XMPP network. This library was initially a fork
1173 (home-page "https://dev.gajim.org/gajim/python-nbxmpp")
1174 (license license:gpl3+)))
1176 (define-public gajim
1184 (string-append "https://gajim.org/downloads/"
1185 (version-major+minor version)
1186 "/gajim-" version ".tar.gz"))
1188 (base32 "0ks25hh7ksx0nfydixpixcli556w7qcylxp2z2xsx8mgzqv7c9la"))
1189 (patches (search-patches "gajim-honour-GAJIM_PLUGIN_PATH.patch"))))
1190 (build-system python-build-system)
1192 `(#:imported-modules
1193 (,@%python-build-system-modules
1194 (guix build glib-or-gtk-build-system))
1196 ((guix build python-build-system)
1197 ((guix build glib-or-gtk-build-system)
1198 #:prefix glib-or-gtk:)
1201 (modify-phases %standard-phases
1202 (add-after 'unpack 'disable-failing-tests
1204 ;; XXX Gajim builds fine on some (my) machines but fails elsewhere:
1205 ;; ModuleNotFoundError: No module named 'gajim.gui.emoji_data'
1206 ;; https://dev.gajim.org/gajim/gajim/-/issues/11041
1207 (delete-file "test/no_gui/test_styling.py")))
1210 ;; Tests require a running X server.
1211 (system "Xvfb :1 +extension GLX &")
1212 (setenv "DISPLAY" ":1")
1213 ;; For missing '/etc/machine-id'.
1214 (setenv "DBUS_FATAL_WARNINGS" "0")
1215 (invoke "dbus-launch" "python" "./setup.py" "test")))
1216 ;; Loading gajim_remote require running session bus,
1217 ;; which in-turn requires running elogind for XDG_RUNTIME_DIR;
1218 ;; neither of which are possible inside build environment.
1219 (delete 'sanity-check)
1220 (add-after 'install 'glib-or-gtk-compile-schemas
1221 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
1222 (add-after 'install 'glib-or-gtk-wrap
1223 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))
1224 (add-after 'install 'wrap-env
1225 (lambda* (#:key outputs #:allow-other-keys)
1226 (let ((out (assoc-ref outputs "out")))
1229 (let ((file (string-append out "/bin/" name))
1230 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH"))
1231 (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
1233 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
1234 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))
1235 '("gajim" "gajim-remote"))))))))
1236 (native-search-paths
1238 (search-path-specification
1239 (variable "GAJIM_PLUGIN_PATH")
1240 (separator #f) ;single entry
1243 "share/gajim/plugins")))
1244 ;; Gajim needs to use the propagated inputs of its plugins.
1245 (search-path-specification
1246 (variable "GUIX_PYTHONPATH")
1251 ;; FIXME: Cannot use this expression as it would
1252 ;; introduce a circular dependency at the top level.
1253 ;; (version-major+minor (package-version python))
1255 "/site-packages"))))))
1257 (list gettext-minimal
1259 gobject-introspection
1261 python-distutils-extra
1263 xorg-server-for-tests))
1271 gsettings-desktop-schemas
1298 (synopsis "Fully-featured XMPP client")
1299 (description "Gajim aims to be an easy to use and fully-featured XMPP chat
1300 client. It is extensible via plugins, supports end-to-end encryption (OMEMO
1301 and OpenPGP) and available in 29 languages.")
1302 (home-page "https://gajim.org/")
1303 (license license:gpl3)))
1305 (define-public gajim-omemo
1307 (name "gajim-omemo")
1311 (method url-fetch/zipbomb)
1314 "https://ftp.gajim.org/plugins/master/omemo/omemo_"
1317 (base32 "1hf148ywr8knk5y3y5xvvwgw74ld1pcfjkp78g514ikcnzfycfcn"))))
1318 (build-system trivial-build-system)
1320 `(#:modules ((guix build utils))
1323 (use-modules (guix build utils))
1324 (let* ((out (assoc-ref %outputs "out"))
1325 (share (in-vicinity out "share/gajim/plugins/omemo"))
1326 (source (assoc-ref %build-inputs "source")))
1328 (copy-recursively source share)
1331 (list python-axolotl python-axolotl-curve25519 python-cryptography
1333 (synopsis "Gajim OMEMO plugin")
1334 (description "Gajim-OMEMO is a plugin that adds support for the OMEMO
1335 Encryption to Gajim. OMEMO is an XMPP Extension Protocol (XEP) for secure
1336 multi-client end-to-end encryption.")
1338 "https://dev.gajim.org/gajim/gajim-plugins/-/wikis/OmemoGajimPlugin")
1339 (license license:gpl3+)))
1341 (define-public gajim-openpgp
1343 (name "gajim-openpgp")
1347 (method url-fetch/zipbomb)
1350 "https://ftp.gajim.org/plugins/master/openpgp/openpgp_"
1353 (base32 "1xwmf6ai1z7z9x6p1ysglxji73r7d27c0gzc8ykab29cjhjyv0dq"))))
1354 (build-system trivial-build-system)
1356 `(#:modules ((guix build utils))
1359 (use-modules (guix build utils))
1360 (let* ((out (assoc-ref %outputs "out"))
1361 (share (in-vicinity out "share/gajim/plugins/openpgp"))
1362 (source (assoc-ref %build-inputs "source")))
1364 (copy-recursively source share)
1367 (list python-cryptography python-gnupg python-gpg))
1368 (synopsis "Gajim OpenPGP plugin")
1369 (description "Gajim-OpenPGP is a plugin that adds support for the OpenPGP
1370 Encryption to Gajim.")
1371 (home-page "https://dev.gajim.org/gajim/gajim-plugins/-/wikis/OpenPGPplugin")
1372 (license license:gpl3+)))
1382 (string-append "https://github.com/dino/dino/releases/download/v"
1383 version "/dino-" version ".tar.gz"))
1385 (base32 "07nw275xfamczzvzps8hsnpbhzvr4qc726fx92w8ncmdag7wlw1r"))))
1386 (build-system cmake-build-system)
1387 (outputs '("out" "debug"))
1389 (list #:configure-flags #~(list "-DBUILD_TESTS=true")
1390 #:parallel-build? #f ; not supported
1391 #:modules '((guix build cmake-build-system)
1392 ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
1394 #:imported-modules `(,@%gnu-build-system-modules
1395 (guix build cmake-build-system)
1396 (guix build glib-or-gtk-build-system))
1398 #~(modify-phases %standard-phases
1400 (add-after 'install 'wrap
1401 (lambda* (#:key outputs #:allow-other-keys)
1402 (let* ((out (assoc-ref outputs "out"))
1403 (dino (string-append out "/bin/dino"))
1404 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
1406 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))))))
1407 (add-after 'install 'glib-or-gtk-wrap
1408 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))
1410 (lambda* (#:key tests? #:allow-other-keys)
1412 (invoke "./libdino-test")
1413 (invoke "./signal-protocol-vala-test")
1414 (invoke "./xmpp-vala-test")))))))
1416 (list gettext-minimal
1418 gobject-introspection
1429 gsettings-desktop-schemas
1430 gspell ;for spell-check support
1431 gstreamer ;for A/V support
1435 icu4c ;for emoji support
1436 libcanberra ;for sound-notification support
1440 libsignal-protocol-c
1442 libsrtp ;for calls support
1446 webrtc-audio-processing)) ;for A/V support
1447 (synopsis "Graphical Jabber/XMPP Client using GTK+/Vala")
1448 (description "Dino is a chat client for the desktop. It focuses on providing
1449 a minimal yet reliable Jabber/XMPP experience and having encryption enabled by
1451 (home-page "https://dino.im")
1452 (license license:gpl3+)))
1454 (define-public kaidan
1460 (uri (string-append "mirror://kde/unstable/kaidan/" version
1461 "/kaidan-" version ".tar.xz"))
1462 (modules '((guix build utils)))
1465 (delete-file-recursively "3rdparty")))
1467 (base32 "195iddv35gc3k83r226y17avsab2b9bszgd7z7ynbddsgbf75rx7"))))
1468 (build-system qt-build-system)
1470 (list #:configure-flags #~(list "-DBUILD_TESTS=true")))
1471 (native-inputs (list extra-cmake-modules
1475 (inputs (list kirigami
1488 (home-page "https://www.kaidan.im/")
1489 (synopsis "Qt-based XMPP/Jabber Client")
1490 (description "Kaidan is a chat client. It uses the open communication
1491 protocol XMPP (Jabber). The user interface makes use of Kirigami and QtQuick,
1492 while the back-end of Kaidan is entirely written in C++ using Qt and the
1493 Qt-based XMPP library QXmpp.")
1498 ;; src/{StatusBar.cpp|StatusBar.h|singleapp/*|hsluv-c/*}
1499 ;; utils/generate-license.py
1506 (define-public prosody
1512 (uri (string-append "https://prosody.im/downloads/source/"
1513 "prosody-" version ".tar.gz"))
1516 "1q84s9cq7cgzd295qxa2iy0r3vd3v3chbck62bdx3pd6skk19my6"))))
1517 (build-system gnu-build-system)
1519 `(#:tests? #f ;tests require "busted"
1520 #:configure-flags (list "--no-example-certs")
1521 #:modules ((ice-9 match)
1523 (guix build gnu-build-system)
1526 (modify-phases %standard-phases
1527 (add-after 'unpack 'fix-configure-script
1529 ;; The configure script aborts when it encounters unexpected
1530 ;; arguments. Make it more tolerant.
1531 (substitute* "configure"
1533 (add-after 'unpack 'fix-makefile
1535 (substitute* "GNUmakefile"
1536 ;; prosodyctl needs to read the configuration file.
1537 (("^INSTALLEDCONFIG =.*") "INSTALLEDCONFIG = /etc/prosody\n")
1538 ;; prosodyctl needs a place to put auto-generated certificates.
1539 (("^INSTALLEDDATA =.*") "INSTALLEDDATA = /var/lib/prosody\n"))))
1540 (add-after 'install 'wrap-programs
1541 (lambda* (#:key inputs outputs #:allow-other-keys)
1542 ;; Make sure all executables in "bin" find the required Lua
1543 ;; modules at runtime.
1544 (let* ((out (assoc-ref outputs "out"))
1545 (bin (string-append out "/bin/"))
1546 (deps (delete #f (map (match-lambda
1547 ((label . directory)
1548 (if (string-prefix? "lua" label)
1551 (lua-path (string-join
1554 path "/share/lua/5.2/?.lua;"
1555 path "/share/lua/5.2/?/?.lua"))
1558 (lua-cpath (string-join
1561 path "/lib/lua/5.2/?.so;"
1562 path "/lib/lua/5.2/?/?.so"))
1565 (openssl (assoc-ref inputs "openssl"))
1566 (coreutils (assoc-ref inputs "coreutils"))
1567 (path (map (lambda (dir)
1568 (string-append dir "/bin"))
1569 (list openssl coreutils))))
1570 (for-each (lambda (file)
1572 `("LUA_PATH" ";" = (,lua-path))
1573 `("LUA_CPATH" ";" = (,lua-cpath))
1574 `("PATH" ":" prefix ,path)))
1575 (find-files bin ".*"))))))))
1585 (home-page "https://prosody.im/")
1586 (synopsis "Jabber (XMPP) server")
1587 (description "Prosody is a modern XMPP communication server. It aims to
1588 be easy to set up and configure, and efficient with system resources.
1589 Additionally, for developers it aims to be easy to extend and give a flexible
1590 system on which to rapidly develop added functionality, or prototype new
1592 (license license:x11)))
1594 (define-public prosody-http-upload
1595 (let ((changeset "765735bb590b")
1598 (name "prosody-http-upload")
1599 (version (string-append "0-" revision "." (string-take changeset 7)))
1603 (url "https://hg.prosody.im/prosody-modules/")
1604 (changeset changeset)))
1605 (file-name (string-append name "-" version "-checkout"))
1608 "142wrcism70nf8ffahhd961cqg2pi1h7ic8adfs3zwh0j3pnf41f"))))
1609 (build-system trivial-build-system)
1611 '(#:modules ((guix build utils))
1614 (use-modules (guix build utils))
1615 (let ((out (assoc-ref %outputs "out"))
1616 (source (assoc-ref %build-inputs "source")))
1617 (with-directory-excursion (in-vicinity source "mod_http_upload")
1618 (install-file "mod_http_upload.lua" out))
1620 (home-page "https://modules.prosody.im/mod_http_upload.html")
1621 (synopsis "XEP-0363: Allow clients to upload files over HTTP")
1622 (description "This module implements XEP-0363: it allows clients to
1623 upload files over HTTP.")
1624 (license (package-license prosody)))))
1626 (define-public prosody-smacks
1627 (let ((changeset "67f1d1f22625")
1630 (name "prosody-smacks")
1631 (version (string-append "0-" revision "." (string-take changeset 7)))
1635 (url "https://hg.prosody.im/prosody-modules/")
1636 (changeset changeset)))
1637 (file-name (string-append name "-" version "-checkout"))
1640 "020ngpax30fgarah98yvlj0ni8rcdwq60if03a9hqdw8mic0nxxs"))))
1641 (build-system trivial-build-system)
1643 '(#:modules ((guix build utils))
1646 (use-modules (guix build utils))
1647 (let ((out (assoc-ref %outputs "out"))
1648 (source (assoc-ref %build-inputs "source")))
1649 (with-directory-excursion (in-vicinity source "mod_smacks")
1650 (install-file "mod_smacks.lua" out))
1652 (home-page "https://modules.prosody.im/mod_smacks.html")
1653 (synopsis "XEP-0198: Reliability and fast reconnects for XMPP")
1654 (description "This module implements XEP-0198: when supported by both
1655 the client and server, it can allow clients to resume a disconnected session,
1656 and prevent message loss.")
1657 (license (package-license prosody)))))
1659 (define-public libtoxcore
1660 (let ((revision "2")
1661 (commit "bf69b54f64003d160d759068f4816b2d9b2e1e21"))
1664 (version (string-append "0.0.0" "-"
1665 revision "."(string-take commit 7)))
1669 (url "https://github.com/irungentoo/toxcore")
1671 (file-name (string-append name "-" version "-checkout"))
1674 "11lqra4yd7v293cp286ynff5lqz1pprzg8vn3wq6vryj08g88zqb"))))
1675 (build-system gnu-build-system)
1676 (arguments `(#:tests? #f)) ; FIXME: tests hang, some fail.
1678 (list autoconf automake libtool check pkg-config))
1680 (list libsodium opus libvpx))
1681 (synopsis "Library for the Tox encrypted messenger protocol")
1683 "C library implementation of the Tox encrypted messenger protocol.")
1684 (license license:gpl3+)
1685 (home-page "https://tox.chat"))))
1687 ;; Some tox clients move to c-toxcore, which seems to be where all the
1688 ;; recent development happens. It is run by the same developers as toxcore,
1689 ;; forked into a group namespace.
1690 (define-public c-toxcore
1698 (url "https://github.com/TokTok/c-toxcore")
1699 (commit (string-append "v" version))))
1700 (file-name (git-file-name name version))
1703 "0a6sqpm00d2rn0nviqfz4gh9ck1wzci6rxgmqmcyryl5ca19ffvp"))))
1705 `(#:tests? #f)) ; FIXME: Testsuite seems to stay stuck on test 3. Disable
1707 (build-system cmake-build-system)
1711 (list libsodium opus libvpx))
1712 (home-page "https://tox.chat")
1713 (synopsis "Library for the Tox encrypted messenger protocol")
1715 "Official fork of the C library implementation of the Tox encrypted
1716 messenger protocol.")
1717 (license license:gpl3+)))
1727 (url "https://github.com/uTox/uTox")
1728 (commit (string-append "v" version))
1729 (recursive? #t))) ;; Needed for 'minini' git submodule.
1730 (file-name (string-append name "-" version "-checkout"))
1733 "01rvlf94d4rkrygnnjak3cg16hrrqyi1rn9nx65y17qk2nbyh68g"))))
1734 (build-system cmake-build-system)
1736 `(#:configure-flags '("-DENABLE_TESTS=on")
1738 (modify-phases %standard-phases
1739 (add-before 'build 'patch-absolute-filename-libgtk-3
1740 (lambda* (#:key inputs outputs #:allow-other-keys)
1741 (substitute* "../source/src/xlib/gtk.c"
1743 (search-input-file inputs "/lib/libgtk-3.so")))))
1744 (add-after 'install 'wrap-program
1745 (lambda* (#:key inputs outputs #:allow-other-keys)
1746 (wrap-program (string-append (assoc-ref outputs "out")
1748 ;; For GtkFileChooserDialog.
1749 `("GSETTINGS_SCHEMA_DIR" =
1750 (,(string-append (assoc-ref inputs "gtk+")
1751 "/share/glib-2.0/schemas")))))))))
1754 ("filteraudio" ,filteraudio)
1755 ("fontconfig" ,fontconfig)
1756 ("freetype" ,freetype)
1757 ("c-toxcore" ,c-toxcore)
1761 ("libxext" ,libxext)
1762 ("libxrender" ,libxrender)
1764 ("v4l-utils" ,v4l-utils)))
1766 (list check pkg-config))
1767 (synopsis "Lightweight Tox client")
1769 "uTox is a lightweight Tox client. Tox is a distributed and secure
1770 instant messenger with audio and video chat capabilities.")
1771 (home-page "https://github.com/uTox/uTox")
1772 (license license:gpl3)))
1780 (uri (string-append "https://github.com/qTox/qTox/releases"
1781 "/download/v" version
1782 "/v" version ".tar.gz"))
1785 "1ml8z1xpp3qhip4vkr375jf7y5kc18g0apm91n5am6ricx37c01r"))
1786 (file-name (string-append name "-" version ".tar.gz"))))
1787 (build-system cmake-build-system)
1790 #~(modify-phases %standard-phases
1791 (add-after 'unpack 'fix-reproducibility-issues
1793 (substitute* "src/main.cpp"
1794 (("__DATE__") "\"\"")
1795 (("__TIME__") "\"\"")
1796 (("TIMESTAMP") "\"\""))))
1797 (add-after 'unpack 'disable-network-tests
1799 ;; These tests require network access.
1800 (substitute* "cmake/Testing.cmake"
1801 (("auto_test\\(core core\\)") "# auto_test(core core)")
1802 (("auto_test\\(net bsu\\)") "# auto_test(net bsu)"))))
1803 ;; Ensure that icons are found at runtime.
1804 (add-after 'install 'wrap-executable
1805 (lambda* (#:key inputs outputs #:allow-other-keys)
1806 (let ((out (assoc-ref outputs "out")))
1807 (wrap-program (string-append out "/bin/qtox")
1808 `("QT_PLUGIN_PATH" prefix
1809 ,(list (search-input-directory
1810 inputs "lib/qt5/plugins/"))))))))))
1812 (list pkg-config qttools-5))
1830 (home-page "https://qtox.github.io/")
1831 (synopsis "Tox chat client using Qt")
1832 (description "qTox is a Tox client that follows the Tox design
1833 guidelines. It provides an easy to use application that allows you to
1834 connect with friends and family without anyone else listening in.")
1835 (license license:gpl3+)))
1837 (define-public ytalk
1844 (uri (string-append "ftp://ftp.ourproject.org/pub/ytalk/ytalk-"
1848 "1d3jhnj8rgzxyxjwfa22vh45qwzjvxw1qh8fz6b7nfkj3zvk9jvf"))))
1849 (build-system gnu-build-system)
1852 (home-page "https://ytalk.ourproject.org")
1853 (synopsis "Multi-user chat program")
1854 (description "Ytalk is a replacement for the BSD talk program. Its main
1855 advantage is the ability to communicate with any arbitrary number of users at
1856 once. It supports both talk protocols (\"talk\" and \"ntalk\") and can communicate
1857 with several different talk daemons at the same time.")
1858 (license license:gpl2+)))
1860 (define-public gloox
1867 (uri (string-append "https://camaya.net/download/gloox-"
1868 version ".tar.bz2"))
1870 (base32 "1jgrd07qr9jvbb5hcmhrqz4w4lvwc51m30jls1fgxf1f5az6455f"))))
1871 (build-system gnu-build-system)
1873 (list libidn gnutls zlib))
1876 (synopsis "Portable high-level Jabber/XMPP library for C++")
1878 "gloox is a full-featured Jabber/XMPP client library,
1879 written in ANSI C++. It makes writing spec-compliant clients easy
1880 and allows for hassle-free integration of Jabber/XMPP functionality
1881 into existing applications.")
1882 (home-page "https://camaya.net/gloox")
1883 (license license:gpl3)))
1885 (define-public perl-net-psyc
1887 (name "perl-net-psyc")
1892 (uri (string-append "https://perl.psyc.eu/"
1893 "perlpsyc-" version ".zip"))
1894 (file-name (string-append name "-" version ".zip"))
1897 "0vsjclglkwgbyd9m5ad642fyysxw2x725nhq4r2m9pvqaq6s5yf2"))))
1898 (build-system perl-build-system)
1902 (list perl-curses perl-io-socket-ssl))
1905 (modify-phases %standard-phases
1906 (delete 'configure) ; No configure script
1907 ;; There is a Makefile, but it does not install everything
1908 ;; (leaves out psycion) and says
1909 ;; "# Just to give you a rough idea". XXX: Fix it upstream.
1911 (lambda _ (invoke "make" "manuals")))
1913 (lambda* (#:key outputs #:allow-other-keys)
1914 (let* ((out (assoc-ref outputs "out"))
1915 (doc (string-append out "/share/doc/perl-net-psyc"))
1916 (man1 (string-append out "/share/man/man1"))
1917 (man3 (string-append out "/share/man/man3"))
1918 (bin (string-append out "/bin"))
1919 (libpsyc (string-append out "/lib/psyc/ion"))
1920 (libperl (string-append out "/lib/perl5/site_perl/"
1921 ,(package-version perl))))
1923 (copy-recursively "lib/perl5" libperl)
1924 (copy-recursively "lib/psycion" libpsyc)
1925 (copy-recursively "bin" bin)
1926 (install-file "cgi/psycpager" (string-append doc "/cgi"))
1927 (copy-recursively "contrib" (string-append doc "/contrib"))
1928 (copy-recursively "hooks" (string-append doc "/hooks"))
1929 (copy-recursively "sdj" (string-append doc "/sdj"))
1930 (install-file "README.txt" doc)
1931 (install-file "TODO.txt" doc)
1932 (copy-recursively "share/man/man1" man1)
1933 (copy-recursively "share/man/man3" man3)
1935 (add-after 'install 'wrap-programs
1936 (lambda* (#:key outputs #:allow-other-keys)
1937 ;; Make sure all executables in "bin" find the Perl modules
1938 ;; provided by this package at runtime.
1939 (let* ((out (assoc-ref outputs "out"))
1940 (bin (string-append out "/bin/"))
1941 (path (getenv "PERL5LIB")))
1942 (for-each (lambda (file)
1944 `("PERL5LIB" ":" prefix (,path))))
1945 (find-files bin "\\.*$"))
1948 "@code{Net::PSYC} with support for TCP, UDP, Event.pm, @code{IO::Select} and
1949 Gtk2 event loops. This package includes 12 applications and additional scripts:
1950 psycion (a @uref{https://about.psyc.eu,PSYC} chat client), remotor (a control console
1951 for @uref{https://torproject.org,tor} router) and many more.")
1952 (synopsis "Perl implementation of PSYC protocol")
1953 (home-page "https://perl.psyc.eu")
1954 (license (list license:gpl2
1955 license:perl-license
1956 ;; contrib/irssi-psyc.pl:
1957 license:public-domain
1958 ;; bin/psycplay states AGPL with no version:
1961 (define-public libpsyc
1964 (version "20160913")
1967 (uri (string-append "http://www.psyced.org/files/"
1968 name "-" version ".tar.xz"))
1971 "14q89fxap05ajkfn20rnhc6b1h4i3i2adyr7y6hs5zqwb2lcmc1p"))))
1972 (build-system gnu-build-system)
1974 (list perl netcat procps))
1978 (string-append "PREFIX=" (assoc-ref %outputs "out")))
1980 (modify-phases %standard-phases
1981 ;; The rust bindings are the only ones in use, the lpc bindings
1982 ;; are in psyclpc. The other bindings are not used by anything,
1983 ;; the chances are high that the bindings do not even work,
1984 ;; therefore we do not include them.
1985 ;; TODO: Get a cargo build system in Guix.
1986 (delete 'configure)))) ; no configure script
1987 (home-page "https://about.psyc.eu/libpsyc")
1989 "@code{libpsyc} is a PSYC library in C which implements
1990 core aspects of PSYC, useful for all kinds of clients and servers
1992 (synopsis "PSYC library in C")
1993 (license license:agpl3+)))
1995 (define-public loudmouth
2002 (uri (string-append "https://mcabber.com/files/loudmouth/"
2003 name "-" version ".tar.bz2"))
2006 "03adv5xc84l9brcx0dpyqyffmsclans8yfrpnd357k6x3wfckjri"))))
2007 (build-system gnu-build-system)
2008 (outputs '("out" "doc"))
2014 (string-append "--with-html-dir="
2015 (assoc-ref %outputs "doc")
2016 "/share/gtk-doc/html"))
2019 "CFLAGS=-Wno-error=all")))
2024 ("libidn" ,libidn)))
2026 (list pkg-config check
2027 `(,glib "bin") ; gtester
2029 (home-page "https://mcabber.com/")
2031 "Loudmouth is a lightweight and easy-to-use C library for programming
2032 with the XMPP (formerly known as Jabber) protocol. It is designed to be
2033 easy to get started with and yet extensible to let you do anything the XMPP
2035 (synopsis "Asynchronous XMPP library")
2036 ;; The files have LGPL2.0+ headers, but COPYING specifies LGPL2.1.
2037 (license license:lgpl2.0+)))
2039 (define-public mcabber
2046 (uri (string-append "https://mcabber.com/files/"
2047 name "-" version ".tar.bz2"))
2049 (base32 "0q1i5acyghsmzas88qswvki8kkk2nfpr8zapgnxbcd3lwcxl38f4"))))
2050 (build-system gnu-build-system)
2057 "--enable-aspell")))
2069 ("pkg-config" ,pkg-config)
2070 ("python" ,python-wrapper)))
2071 (home-page "https://mcabber.com")
2073 "Mcabber is a small XMPP (Jabber) console client, which includes features
2074 such as SASL and TLS support, @dfn{Multi-User Chat} (MUC) support, logging,
2075 command-completion, OpenPGP encryption, @dfn{Off-the-Record Messaging} (OTR)
2076 support, and more.")
2077 (synopsis "Small XMPP console client")
2078 (license license:gpl2+)))
2080 (define-public freetalk
2086 (uri (string-append "mirror://gnu/freetalk/freetalk-"
2090 "105mw7pg2mcp85r82cs4rv77nwvbw8025047364jzbq6lwllynxv"))))
2091 (build-system gnu-build-system)
2094 #~(modify-phases %standard-phases
2095 (add-after 'install 'wrap-program
2096 (lambda* (#:key inputs outputs #:allow-other-keys)
2097 (let ((out (assoc-ref outputs "out")))
2098 (wrap-program (string-append out "/bin/freetalk")
2100 ,(map (lambda (command)
2103 inputs (string-append "bin/" command))))
2104 ;; This list is not exhaustive: we assume that,
2105 ;; e.g., cat is packaged with other coreutils.
2106 (list "bash" ; src/{commands,util}.c et al
2107 "cat" ; extensions/first-time-run.sh
2108 "less")))))))))) ; extensions/history.scm.
2110 (list autoconf automake pkg-config texinfo))
2118 (synopsis "Extensible console-based Jabber client")
2120 "GNU Freetalk is a command-line Jabber/XMPP chat client. It notably uses
2121 the Readline library to handle input, so it features convenient navigation of
2122 text as well as tab-completion of buddy names, commands and English words. It
2123 is also scriptable and extensible via Guile.")
2124 (home-page "https://www.gnu.org/software/freetalk/")
2125 (license license:gpl3+)))
2127 (define-public libstrophe
2135 (url "https://github.com/strophe/libstrophe")
2137 (file-name (git-file-name name version))
2139 (base32 "1apply301lxyjax2677bd5mc0a3233nm5qb7fiqpawq2n7vh17v0"))))
2140 (build-system gnu-build-system)
2142 (list #:configure-flags '(list "--disable-static")
2144 #~(modify-phases %standard-phases
2145 (add-after 'unpack 'patch-make
2147 (substitute* "Makefile.am"
2148 (("'\\^xmpp_'") "'.'"))
2150 (add-after 'install-licence-files 'install-extra-licence-files
2152 (let ((license-directory (string-append #$output
2154 #$name "-" #$version "/")))
2155 (install-file "MIT-LICENSE.txt" license-directory)))))))
2157 (list expat openssl))
2159 (list autoconf automake libtool pkg-config))
2160 (synopsis "C library for writing XMPP clients")
2161 (description "Libstrophe is a minimal XMPP library written in C. It has
2162 almost no external dependencies, only an XML parsing library (expat or libxml
2163 are both supported).")
2164 (home-page "https://strophe.im/libstrophe/")
2166 (license (list license:gpl3+ license:x11))))
2168 (define-public profanity
2176 (string-append "https://profanity-im.github.io/tarballs/profanity-"
2180 "0vihmlzxr6n3y6v0vdzzxh5p1i09p0hx6sd1b2pnpcgkgcg4hi73"))))
2181 (build-system glib-or-gtk-build-system)
2186 "--enable-notifications"
2187 "--enable-python-plugins"
2188 "--enable-c-plugins"
2193 "--enable-icons-and-clipboard")))
2210 libsignal-protocol-c
2217 (synopsis "Console-based XMPP client")
2218 (description "Profanity is a console based XMPP client written in C
2219 using ncurses and libmesode, inspired by Irssi.")
2220 (home-page "https://profanity-im.github.io")
2221 (properties `((release-monitoring-url . ,home-page)))
2222 (license license:gpl3+)))
2224 (define-public libircclient
2226 (name "libircclient")
2231 (uri (string-append "mirror://sourceforge/libircclient/libircclient/"
2232 version "/libircclient-" version ".tar.gz"))
2235 "0b9wa0h3xc31wpqlvgxgnvqp5wgx3kwsf5s9432m5cj8ycx6zcmv"))))
2236 (build-system gnu-build-system)
2241 (list (string-append "--libdir="
2242 (assoc-ref %outputs "out") "/lib")
2246 #:tests? #f)) ; no test suite
2247 (home-page "https://www.ulduzsoft.com/libircclient/")
2248 (synopsis "Library implementing the client IRC protocol")
2249 (description "Libircclient is a library which implements the client IRC
2250 protocol. It is designed to be small, fast, portable and compatible with the
2251 RFC standards as well as non-standard but popular features. It can be used for
2252 building the IRC clients and bots.")
2253 (license license:lgpl3+)))
2255 (define-public toxic
2263 (url "https://github.com/JFreegman/toxic")
2264 (commit (string-append "v" version))))
2266 (base32 "0p1cmj1kyp506y5xm04mhlznhf5wcylvgsn6b307ms91vjqs3fg2"))
2267 (file-name (git-file-name name version))))
2268 (build-system gnu-build-system)
2270 `(#:tests? #f ; no tests
2274 (string-append "PREFIX="
2275 (assoc-ref %outputs "out")))
2277 (modify-phases %standard-phases
2279 (add-before 'build 'enable-python-scripting
2281 ;; XXX: For compatibility with Python 3.8, adjust python3-config
2282 ;; invokation to include --embed; see
2283 ;; <https://github.com/JFreegman/toxic/issues/533>.
2284 (substitute* "cfg/checks/python.mk"
2285 (("python3-config --ldflags")
2286 "python3-config --ldflags --embed"))
2287 (setenv "ENABLE_PYTHON" "1")
2293 gdk-pixbuf ; for libnotify.pc
2305 (home-page "https://github.com/JFreegman/toxic")
2306 (synopsis "Tox chat client using ncurses")
2307 (description "Toxic is a console-based instant messaging client, using
2308 c-toxcore and ncurses. It provides audio calls, sound and desktop
2309 notifications, and Python scripting support.")
2310 (license license:gpl3+)))
2312 (define-public libqmatrixclient
2314 (name "libqmatrixclient")
2320 (url "https://github.com/quotient-im/libQuotient")
2322 (file-name (git-file-name name version))
2324 (base32 "072d3irpdd0p4w77s5pp0baqf74hk7vqggw7ic7i42lzjdwp3yql"))))
2325 (build-system cmake-build-system)
2327 (list qtbase-5 qtmultimedia-5))
2329 `(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON")
2330 #:tests? #f)) ; no tests
2331 (home-page "https://matrix.org/docs/projects/sdk/libqmatrixclient.html")
2332 (synopsis "Qt5 client library for the Matrix instant messaging protocol")
2333 (description "libqmatrixclient is a Qt5 library to write clients for the
2334 Matrix instant messaging protocol. Quaternion is the reference client
2335 implementation. Quaternion and libqmatrixclient together form the
2336 QMatrixClient project.")
2337 (license license:lgpl2.1+)))
2339 (define-public mtxclient
2347 (url "https://github.com/Nheko-Reborn/mtxclient")
2348 (commit (string-append "v" version))))
2349 (file-name (git-file-name name version))
2351 (base32 "041ckjvfxapv1q6x9xd8q70x43cz10x7p11aql58lnc0jp0kwry7"))))
2355 ;; Disable example binaries (not installed)
2356 "-DBUILD_LIB_EXAMPLES=OFF")
2358 (modify-phases %standard-phases
2359 (add-before 'configure 'disable-network-tests
2361 (substitute* "CMakeLists.txt"
2362 (("add_test\\((BasicConnectivity|ClientAPI|Devices|MediaAPI|Encryption|Pushrules)")
2364 (build-system cmake-build-system)
2377 (list googletest pkg-config))
2378 (home-page "https://github.com/Nheko-Reborn/mtxclient")
2379 (synopsis "Client API library for the Matrix protocol")
2380 (description "@code{mtxclient} is a C++ library that implements client API
2381 for the Matrix protocol. It is built on to of @code{Boost.Asio}.")
2382 (license license:expat)))
2384 (define-public nheko
2392 (url "https://github.com/Nheko-Reborn/nheko")
2393 (commit (string-append "v" version))))
2394 (file-name (git-file-name name version))
2396 (base32 "0a3wvv7vzh60hvyzy6776v6wa9d6n020684dqbcl4dw608mf4ahk"))
2397 (modules '((guix build utils)))
2400 (delete-file-recursively "third_party")))))
2403 #:tests? #f ;no test target
2405 #~(list "-DCMAKE_BUILD_TYPE=Release"
2407 ;; Fix required because we are using a static SingleApplication
2408 "-DCMAKE_CXX_FLAGS= \"-DQAPPLICATION_CLASS=QApplication\" "
2409 ;; Compile Qml will make Nheko faster, but you will need to recompile
2410 ;; it, when you update Qt. That's fine for us.
2413 #~(modify-phases %standard-phases
2414 (add-after 'unpack 'unbundle-dependencies
2415 (lambda* (#:key inputs #:allow-other-keys)
2416 (let ((libSingleApplication.a
2417 (search-input-file inputs "lib/libSingleApplication.a"))
2418 (httplib.h (search-input-file inputs "include/httplib.h")))
2419 (substitute* "CMakeLists.txt"
2420 ;; Remove include and source dirs,replace with the correct one
2421 (("third_party/blurhash/blurhash\\.[ch]pp") "")
2422 (("third_party/cpp-httplib-0\\.5\\.12")
2423 (dirname httplib.h))
2424 (("add_subdirectory.*third_party/SingleApplication.*") "")
2425 ;; Link using the correct static/shared libs
2426 (("SingleApplication::SingleApplication")
2428 ;; Dynamic libraries
2429 "httplib" "\n" "blurhash" "\n"
2431 libSingleApplication.a))))))
2432 (add-after 'unpack 'fix-determinism
2434 ;; Make Qt deterministic.
2435 (setenv "QT_RCC_SOURCE_DATE_OVERRIDE" "1")))
2436 (add-after 'install 'wrap-program
2438 (let ((gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
2439 (wrap-program (string-append #$output "/bin/nheko")
2440 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path)))))))))
2441 (build-system qt-build-system)
2450 gst-plugins-bad ; sdp & webrtc for voip
2451 gst-plugins-good ; rtpmanager for voip
2468 single-application-qt5
2472 (list asciidoc doxygen graphviz pkg-config qttools-5))
2473 (home-page "https://github.com/Nheko-Reborn/nheko")
2474 (synopsis "Desktop client for Matrix using Qt and C++14")
2475 (description "@code{Nheko} want to provide a native desktop app for the
2476 Matrix protocol that feels more like a mainstream chat app and less like an IRC
2479 Many matrix features are supported, including user registration, rooms, typing
2480 notification, emojis, E2E encryption, and voip calls.")
2481 (license license:gpl3+)))
2483 (define-public quaternion
2486 (version "0.0.95.1")
2487 (outputs '("out" "debug"))
2492 (url "https://github.com/quotient-im/Quaternion")
2494 (file-name (git-file-name name version))
2496 (base32 "10mzcr4rpyq5bl3h8wzxxlk8rdz7slhiq863xs77bmsq2pzf6lp8"))))
2497 (build-system qt-build-system)
2499 (list libqmatrixclient
2510 `(#:tests? #f)) ; no tests
2511 (home-page "https://matrix.org/docs/projects/client/quaternion.html")
2512 (synopsis "Graphical client for the Matrix instant messaging protocol")
2513 (description "Quaternion is a Qt5 desktop client for the Matrix instant
2514 messaging protocol. It uses libqmatrixclient and is its reference client
2515 implementation. Quaternion and libqmatrixclient together form the
2516 QMatrixClient project.")
2517 (license (list license:gpl3+ ; all source code
2518 license:lgpl3+)))) ; icons/breeze
2520 (define-public hangups
2527 (uri (pypi-uri "hangups" version))
2529 (base32 "12mq22lygh6vz2h5dpvyjk18hx3jphb4kkavqsy298c7hw60hn7l"))))
2530 (build-system python-build-system)
2533 (modify-phases %standard-phases
2534 (add-before 'build 'relax-dependencies
2535 ;; Relax overly strict package version specifications.
2537 (substitute* "setup.py"
2541 (lambda* (#:key tests? #:allow-other-keys)
2543 (invoke "pytest" "hangups")))))))
2545 (list python-aiohttp
2547 python-async-timeout
2548 python-configargparse
2549 python-mechanicalsoup
2556 (list python-httpretty python-pytest))
2557 (home-page "https://hangups.readthedocs.io/")
2558 (synopsis "Instant messaging client for Google Hangouts")
2560 "Hangups is an instant messaging client for Google Hangouts. It includes
2561 both a Python library and a reference client with a text-based user interface.
2563 Hangups is implements a reverse-engineered version of Hangouts' proprietary,
2564 non-interoperable protocol, which allows it to support features like group
2565 messaging that aren’t available to clients that connect over XMPP.")
2566 (license license:expat)))
2568 (define-public telegram-purple
2570 (name "telegram-purple")
2572 (home-page "https://github.com/majn/telegram-purple")
2577 (commit (string-append "v" version))
2581 "14h8lvj0kjvy1b5i84ha2w9rl3akxjwwvsp5j4dcxwfghrkzqgf2"))
2582 (modules '((guix build utils)))
2585 (substitute* "Makefile.in"
2586 ;; By default these two directories point to Pidgin's own
2588 (("^PLUGIN_DIR_PURPLE=.*")
2590 "exec_prefix := @exec_prefix@\n"
2591 "PLUGIN_DIR_PURPLE := @libdir@/purple-2\n"))
2592 (("^DATA_ROOT_DIR_PURPLE=.*")
2593 "DATA_ROOT_DIR_PURPLE := @datarootdir@\n")
2595 ;; Honor sysconfdir instead of trying to write to /etc.
2596 (("DESTDIR\\)/etc/telegram-purple")
2597 "DESTDIR)@sysconfdir@/telegram-purple"))
2599 (patches (search-patches "telegram-purple-adjust-test.patch"))
2600 (file-name (git-file-name name version))))
2601 (build-system gnu-build-system)
2603 `(("pkg-config" ,pkg-config)
2604 ("gettext" ,gettext-minimal)
2615 (modify-phases %standard-phases
2616 ;; We're using release tag for repository checkout - let's prepare
2617 ;; header defining GIT_COMMIT manually instead of running git to
2618 ;; identify version which is being compiled. Git repository
2619 ;; is removed anyway and only source code is kept.
2620 (add-after 'unpack 'prepare-commit.h
2622 (with-output-to-file "./commit.h"
2625 (string-append "//generated by guix, use version instead of "
2627 "#ifndef GIT_COMMIT\n"
2628 "# define GIT_COMMIT \"v"
2632 (add-before 'configure 'set-SHELL-variables
2633 ;; Set these environment variables so that 'tgl/configure' uses the
2634 ;; right shell and not /bin/sh.
2636 (let ((bash (which "bash")))
2637 (setenv "SHELL" bash)
2638 (setenv "CONFIG_SHELL" bash)
2640 (synopsis "Telegram messaging support for Pidgin")
2642 "Telegram-purple is a plugin for Libpurple, the communication library
2643 used by the Pidgin instant messaging client, that adds support for the
2646 This package is on ``life support'' until @code{tdlib-purple} is a full
2649 ;; Code under tgl/ (the Telegram library) is LGPLv2.1+, but the plugin
2650 ;; itself is GPLv2+.
2651 (license license:gpl2+)))
2653 (define-public tdlib
2661 (url "https://github.com/tdlib/td")
2662 (commit "7eabd8ca60de025e45e99d4e5edd39f4ebd9467e")))
2664 (base32 "1chs0ibghjj275v9arsn3k68ppblpm7ysqk0za9kya5vdnldlld5"))
2665 (file-name (git-file-name name version))))
2666 (build-system cmake-build-system)
2669 #:build-type "Release"
2671 #~(modify-phases %standard-phases
2672 (add-after 'unpack 'remove-failing-tests
2674 (substitute* "test/CMakeLists.txt"
2675 ;; The test cases are compiled into a distinct binary
2676 ;; which uses mtproto.cpp to attempt to connect to
2677 ;; a remote server. Removing this file from the sources
2678 ;; list disables those specific test cases.
2679 (("\\$\\{CMAKE_CURRENT_SOURCE_DIR\\}/mtproto.cpp") "")))))))
2681 (list gperf openssl zlib php doxygen))
2682 (synopsis "Cross-platform library for building Telegram clients")
2683 (description "Tdlib is a cross-platform library for creating custom
2684 Telegram clients following the official Telegram API. It can be easily used
2685 from almost any programming language with a C-FFI and features first-class
2686 support for high performance Telegram Bot creation.")
2687 (home-page "https://core.telegram.org/tdlib")
2688 (license license:boost1.0)))
2690 (define-public tdlib-1.8.0
2693 (name "tdlib-1.8.0")
2698 (url "https://github.com/tdlib/td")
2699 (commit (string-append "v" version))))
2702 "19psqpyh9a2kzfdhgqkirpif4x8pzy89phvi59dq155y30a3661q"))))))
2704 (define-public purple-mm-sms
2706 (name "purple-mm-sms")
2711 (url "https://source.puri.sm/Librem5/purple-mm-sms.git")
2712 (commit (string-append "v" version))))
2713 (file-name (git-file-name name version))
2716 "1daf7zl8bhhm1szkgxflpqql69f2w9i9nlgf1n4p1nynxifz1bim"))))
2717 (build-system gnu-build-system)
2720 (let ((out (assoc-ref %outputs "out")))
2721 ;; Fix hardcoded paths
2722 (list (string-append "PREFIX=" out)
2723 (string-append "PLUGIN_DIR_PURPLE=" out "/lib/purple-2")
2724 (string-append "DATA_ROOT_DIR_PURPLE=" out "/share")))
2725 #:tests? #f ; no tests
2727 (modify-phases %standard-phases
2728 (delete 'configure))))
2730 `(("glib:bin" ,glib "bin")
2731 ("pkg-config" ,pkg-config)))
2733 (list modem-manager pidgin))
2734 (synopsis "Libpurple plugin for SMS via ModemManager")
2735 (description "Plugin for libpurple to allow sending SMS using ModemManager.")
2736 (home-page "https://source.puri.sm/Librem5/purple-mm-sms")
2737 (license license:gpl2+)))
2739 (define-public purple-lurch
2741 (name "purple-lurch")
2746 (uri (git-reference (url "https://github.com/gkdr/lurch")
2747 (commit (string-append "v" version))))
2748 (modules '((guix build utils)))
2752 (delete-file-recursively "lib")))
2754 (git-file-name name version))
2756 (base32 "1ipd9gwh04wbqv6c10yxi02lc2yjsr02hwjycgxhl4r9x8b33psd"))))
2757 (build-system cmake-build-system)
2759 `(#:phases (modify-phases %standard-phases
2761 (lambda* (#:key outputs #:allow-other-keys)
2762 (let ((out (assoc-ref outputs "out")))
2763 (substitute* "Makefile"
2764 (("^PURPLE_PLUGIN_DIR = .*")
2765 (string-append "PURPLE_PLUGIN_DIR = " out
2766 "/lib/purple-2\n")))
2767 (setenv "CC" "gcc")))))
2768 #:parallel-tests? #f))
2769 (native-inputs (list cmocka pkg-config))
2774 libsignal-protocol-c
2779 (synopsis "OMEMO Encryption for libpurple")
2780 (description "Purple-lurch plugin adds end-to-end encryption support
2781 through the Double Ratchet (Axolotl) algorithm, to @code{libpurple}
2782 applications using @acronym{XMPP, Extensible Messaging and Presence Protocol},
2783 through its standard XEP-0384: @acronym{OMEMO, OMEMO Multi-End Message and
2784 Object Encryption} Encryption. It provides confidentiality, (weak) forward
2785 secrecy, break-in recovery, authentication, integrity, deniability, and
2787 (home-page "https://github.com/gkdr/lurch")
2788 (license license:gpl3+)))
2790 (define-public libphonenumber
2792 (name "libphonenumber")
2797 (url "https://github.com/google/libphonenumber")
2798 (commit (string-append "v" version))))
2799 (file-name (git-file-name name version))
2800 (patches (search-patches
2801 "libphonenumber-reproducible-build.patch"))
2804 "06y3mh1d1mks6d0ynxp3980g712nkf8l5nyljpybsk326b246hg9"))))
2806 `(#:test-target "tests"
2808 (modify-phases %standard-phases
2809 (add-after 'unpack 'change-directory
2810 (lambda _ (chdir "cpp"))))))
2811 (build-system cmake-build-system)
2813 (list googletest pkg-config))
2815 (list boost protobuf icu4c))
2816 (synopsis "Library for parsing and using phone numbers")
2818 "This package provides a C++ library for parsing, formatting, and
2819 validating international phone numbers.")
2820 (home-page "https://github.com/google/libphonenumber")
2821 (license license:asl2.0)))
2823 (define-public chatty
2830 (url "https://source.puri.sm/Librem5/chatty.git")
2831 (commit (string-append "v" version))
2832 ;; Fetch the required subprojects, notably libcmatrix
2833 ;; which has no releases and is developed in tandem.
2834 ;; Note: this also pulls in libgd, and embeds functionality
2835 ;; from it that is not part of the public API, making
2836 ;; unbundling difficult.
2837 (recursive? #true)))
2838 (file-name (git-file-name name version))
2841 "11q07vjrrjf3k00kk41vm79brpq0qigz7l328br3g0li979kz32v"))))
2842 (build-system meson-build-system)
2846 (modify-phases %standard-phases
2847 (add-after 'unpack 'skip-updating-desktop-database
2849 (substitute* "meson.build"
2850 (("meson.add_install_script.*") ""))))
2851 (add-before 'check 'pre-check
2852 (lambda* (#:key tests? #:allow-other-keys)
2854 ;; One test requires a running Xorg server. Start one.
2855 (system "Xvfb :1 &")
2856 (setenv "DISPLAY" ":1")
2857 ;; HOME must be writable for writing configuration files.
2858 (setenv "HOME" "/tmp")))))))
2860 (list gettext-minimal
2864 xorg-server-for-tests))
2869 gsettings-desktop-schemas
2882 (list adwaita-icon-theme evolution-data-server-3.44))
2883 (synopsis "Mobile client for XMPP and SMS messaging")
2884 (description "Chatty is a chat program for XMPP and SMS. It works on mobile
2885 as well as on desktop platforms. It's based on libpurple and ModemManager.")
2886 (home-page "https://source.puri.sm/Librem5/chatty")
2887 (license license:gpl3+)))
2889 (define-public mosquitto
2896 (uri (string-append "https://mosquitto.org/files/source/mosquitto-"
2900 "1yq7y329baa1ly488rw125c3mvsnsa7kjkik602xv1xpkz8p73al"))))
2901 (build-system cmake-build-system)
2904 (synopsis "Message broker")
2905 (description "This package provides Eclipse Mosquitto, a message broker
2906 that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1. Mosquitto
2907 is lightweight and is suitable for use on all devices from low power single
2908 board computers to full servers.
2910 The MQTT protocol provides a lightweight method of carrying out messaging
2911 using a publish/subscribe model. This makes it suitable for Internet of
2912 Things messaging such as with low power sensors or mobile devices such
2913 as phones, embedded computers or microcontrollers.")
2914 (home-page "https://mosquitto.org/")
2916 (license (list license:epl1.0 license:edl1.0))))
2918 (define-public python-paho-mqtt
2920 (name "python-paho-mqtt")
2923 (method git-fetch) ;for tests
2925 (url "https://github.com/eclipse/paho.mqtt.python")
2926 (commit (string-append "v" version))))
2927 (file-name (git-file-name name version))
2930 "0679iafabd3kvk4fj4lvcl14zg82yq5pz5rji4z659lm2g2zlwgn"))))
2931 (build-system python-build-system)
2932 (arguments (list #:phases
2933 #~(modify-phases %standard-phases
2935 (lambda* (#:key tests? #:allow-other-keys)
2937 (invoke "pytest" "-vv")))))))
2938 (native-inputs (list python-pytest))
2939 (home-page "https://www.eclipse.org/paho/")
2940 (synopsis "Python implementation of an MQTT client class")
2941 (description "MQTT and MQTT-SN are lightweight publish/subscribe messaging
2942 transports for TCP/IP and connection-less protocols (such as UDP). The
2943 Eclipse Paho project provides client side implementations of MQTT and MQTT-SN
2944 in a variety of programming languages. This package is for the Python
2945 implementation of an MQTT version client class.")
2946 (license (list license:epl2.0 license:edl1.0)))) ;dual licensed
2948 (define-public movim-desktop
2949 (let ((commit "83d583b83629dbd2ec448da9a1ffd81f6c1fb295")
2952 (name "movim-desktop")
2954 (git-version "0.14.0" revision commit))
2960 (url "https://github.com/movim/movim_desktop")
2962 (file-name (git-file-name name version))
2964 (base32 "1lsa3k3wx1d2lk0qs0k5jc5bmapnmpzwynprjf2wihh8c8y3iwlz"))))
2965 (build-system qt-build-system)
2967 `(#:tests? #f ; No target
2969 (modify-phases %standard-phases
2970 (add-after 'unpack 'patch
2971 (lambda* (#:key outputs #:allow-other-keys)
2972 (substitute* `("CMakeLists.txt" "movim.desktop")
2974 (assoc-ref outputs "out"))
2979 (list qtbase-5 qtdeclarative-5 qtwebchannel-5))
2981 (list qtwebengine-5))
2982 (home-page "https://movim.eu/")
2983 (synopsis "Desktop Application for Movim")
2985 "Movim-Desktop is a desktop application, relying on Qt, for the Movim
2986 social and chat platform.")
2987 (license license:gpl3+))))
2989 (define-public psi-plus
2992 (version "1.5.1484")
2998 (url "https://github.com/psi-plus/psi-plus-snapshots")
3000 (file-name (git-file-name name version))
3001 (modules '((guix build utils)))
3004 (delete-file-recursively "3rdparty")))
3006 (base32 "1jsm39nzzbqkp3zc0xqx7jid6p4q1ra28xad38wjr2l1jb8qjn24"))))
3007 (build-system qt-build-system)
3009 `(#:tests? #f ; No target
3011 (,@%qt-build-system-modules
3012 (guix build glib-or-gtk-build-system))
3014 ((guix build qt-build-system)
3015 ((guix build glib-or-gtk-build-system)
3016 #:prefix glib-or-gtk:)
3020 "-DBUILD_PSIMEDIA=ON" ; For A/V support
3021 "-DENABLE_PLUGINS=ON"
3022 "-DUSE_HUNSPELL=OFF" ; Use Enchant instead
3024 "-DUSE_CCACHE=OFF") ; Not required
3026 (modify-phases %standard-phases
3027 (add-after 'unpack 'patch-source
3029 (substitute* "CMakeLists.txt"
3030 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/http-parser/http_parser.h")
3032 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qhttp/qhttp.pro")
3034 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qite/qite.pro")
3036 (("add_subdirectory\\( 3rdparty \\)")
3038 (substitute* "src/CMakeLists.txt"
3039 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qite/libqite")
3041 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/http-parser")
3043 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qhttp/src/private")
3045 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qhttp/src")
3047 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty")
3049 (("add_dependencies\\(\\$\\{PROJECT_NAME\\} qhttp\\)")
3050 "target_link_libraries(${PROJECT_NAME} qhttp)"))
3051 (substitute* "src/src.cmake"
3052 (("include\\(\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qite/libqite/libqite.cmake\\)")
3053 "list(APPEND EXTRA_LIBS qite)"))
3054 (substitute* '("src/filesharingmanager.h" "src/widgets/psirichtext.cpp"
3055 "src/filesharingmanager.cpp" "src/widgets/psitextview.cpp"
3056 "src/chatview_te.cpp" "src/msgmle.cpp")
3061 (("qiteaudiorecorder.h")
3062 "qite/qiteaudiorecorder.h"))
3064 (add-after 'install 'wrap-env
3065 (lambda* (#:key outputs #:allow-other-keys)
3066 (let ((out (assoc-ref outputs "out")))
3069 (let ((file (string-append out "/bin/" name))
3070 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH"))
3071 (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
3073 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
3074 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))
3077 (add-after 'wrap-env 'glib-or-gtk-compile-schemas
3078 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
3079 (add-after 'glib-or-gtk-compile-schemas 'glib-or-gtk-wrap
3080 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
3082 `(("glib:bin" ,glib "bin")
3083 ("gobject-introspection" ,gobject-introspection)
3085 ("pkg-config" ,pkg-config)
3086 ("python" ,python-wrapper)
3091 ("enchant" ,enchant)
3093 ("gstreamer" ,gstreamer)
3094 ("gst-plugins-base" ,gst-plugins-base)
3095 ("http-parser" ,http-parser)
3096 ("libgcrypt" ,libgcrypt)
3097 ("libgpg-error" ,libgpg-error)
3100 ("libsignal-protocol-c" ,libsignal-protocol-c)
3101 ("libtidy" ,tidy-html)
3102 ("openssl" ,openssl)
3106 ("qtbase" ,qtbase-5)
3107 ("qtkeychain" ,qtkeychain)
3108 ("qtmultimedia-5" ,qtmultimedia-5)
3109 ("qtsvg-5" ,qtsvg-5)
3110 ("qtx11extras" ,qtx11extras)
3111 ("usrsctp" ,usrsctp)
3115 ("xss" ,libxscrnsaver)
3117 (home-page "https://psi-plus.com/")
3118 (synopsis "Qt-based XMPP Client")
3120 "Psi+ is a spin-off of Psi XMPP client. It is a powerful XMPP client
3121 designed for experienced users.")
3122 (license license:gpl2+)))
3124 (define-public python-zulip
3126 (name "python-zulip")
3130 ;; There is no source on Pypi.
3133 (url "https://github.com/zulip/python-zulip-api")
3135 (file-name (git-file-name name version))
3138 "0da1ki1v252avy27j6d7snnc0gyq0xa9fypm3qdmxhw2w79d6q36"))))
3139 (build-system python-build-system)
3142 (modify-phases %standard-phases
3143 (add-after 'unpack 'cd-to-zulip-dir
3144 (lambda _ (chdir "zulip")))
3146 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3147 (let ((test-zulip "../tools/test-zulip"))
3149 (add-installed-pythonpath inputs outputs)
3150 (patch-shebang test-zulip)
3151 (invoke test-zulip))))))))
3153 (list python-matrix-client python-pyopenssl python-requests
3156 (list python-cython python-distro python-pytest))
3157 (home-page "https://github.com/zulip/python-zulip-api")
3158 (synopsis "Zulip's API Python bindings")
3160 "This package provides Python bindings to Zulip's API.")
3161 (license license:asl2.0)))
3163 (define-public zulip-term
3169 ;; Pypi package doesn't ship tests.
3172 (url "https://github.com/zulip/zulip-terminal")
3174 (file-name (git-file-name name version))
3177 "1xhhy3v4wck74a83avil0rnmsi2grrh03cww19n5mv80p2q1cjmf"))
3178 (modules '((guix build utils)))
3181 (substitute* "setup.py"
3182 (("\\=\\=1\\.7") ">=1.7") ; pytest-mock
3183 (("\\=\\=2\\.5") ">=2.5") ; pytest-cov
3184 (("4\\.5\\.2") "4.4.2")) ; lxml
3186 (build-system python-build-system)
3189 (modify-phases %standard-phases
3191 (lambda* (#:key tests? #:allow-other-keys)
3193 ;; Delete failing tests.
3194 (delete-file "tests/cli/test_run.py")
3198 (list python-beautifulsoup4
3200 python-mypy-extensions
3202 python-urwid-readline
3205 (list python-distro python-pytest python-pytest-cov
3206 python-pytest-mock))
3207 (home-page "https://github.com/zulip/zulip-terminal")
3208 (synopsis "Zulip's official terminal client")
3209 (description "This package contains Zulip's official terminal client.")
3210 (license license:asl2.0)))
3212 (define-public matterbridge
3214 (name "matterbridge")
3219 (url "https://github.com/42wim/matterbridge")
3220 (commit (string-append "v" version))))
3221 (file-name (git-file-name name version))
3224 "0csvxsgl62fjkrmk0wy64h2qaiy16m0wh6pqfbhz0kfacq16p9an"))))
3225 ;; Using the go-build-system results in the same error message
3226 ;; than in the bug 1551[1]. So we fix it by running go build
3227 ;; manually in the git repository as-is as this is the solution
3228 ;; given to that bug by the matterbridge developers.
3229 ;; [1]https://github.com/42wim/matterbridge/issues/1551
3230 (build-system gnu-build-system)
3232 `(#:phases (modify-phases %standard-phases
3235 (lambda* (#:key outputs #:allow-other-keys)
3237 (string-append (getcwd) "/go-build"))
3239 (string-append (assoc-ref outputs "out") "/bin"))
3240 (invoke "go" "build" "-v" "-x")))
3242 (lambda* (#:key outputs tests? #:allow-other-keys)
3245 (string-append (getcwd) "/go-build"))
3247 (string-append (assoc-ref outputs "out")
3249 (invoke "go" "test" "-v" "-x"))))
3251 (lambda* (#:key outputs #:allow-other-keys)
3253 (string-append (getcwd) "/go-build"))
3255 (string-append (assoc-ref outputs "out") "/bin"))
3256 (invoke "go" "install" "-v" "-x"))))))
3257 (native-inputs (list go))
3258 (synopsis "Bridge together various messaging networks and protocols")
3260 "Relays messages between different channels from various
3261 messaging networks and protocols. So far it supports mattermost, IRC, gitter,
3262 xmpp, slack, discord, telegram, rocketchat, twitch, ssh-chat, zulip, whatsapp,
3263 keybase, matrix, microsoft teams, nextcloud, mumble, vk and more with REST
3264 API. Mattermost is not required.")
3265 (home-page "https://github.com/42wim/matterbridge")
3266 (license license:asl2.0)))
3274 (uri (string-append "https://23.fi/jj/jj-" version ".tar.gz"))
3277 "02xz2ci93bccvil5iff804mh3zr5iqkf6zx5mxgraz17xg0azlgh"))))
3278 (build-system gnu-build-system)
3280 (list #:tests? #f ;There are no tests.
3282 #~(list (string-append "CC=" #$(cc-for-target))
3283 (string-append "PREFIX=" #$output))
3285 #~(modify-phases %standard-phases
3288 (lambda* (#:key inputs outputs #:allow-other-keys)
3289 (let* ((out (assoc-ref outputs "out"))
3290 (bin (string-append out "/bin")))
3291 (install-file "jj" bin)))))))
3292 (native-inputs (list pkg-config))
3293 (inputs (list glib loudmouth))
3294 (home-page "https://23.fi/jj/")
3295 (synopsis "FIFO based Jabber client")
3297 "jj is a simple file-system-based Jabber client, inspired by ii IRC
3298 client. Interaction with jj is done by writing and reading files from the
3299 server directory which jj creates. It is perfect for bots and
3301 (license license:expat)))
3303 (define-public pounce
3310 (uri (string-append "https://git.causal.agency/pounce/snapshot/pounce-"
3313 (base32 "1w4x34bspkqvk9p7bfj0zmvmbzvxb7lxrrr3g6lrfdj9f3qzfxpp"))))
3314 (build-system gnu-build-system)
3316 `(#:tests? #f ;there are no tests
3319 (string-append "CC=" ,(cc-for-target))
3320 (string-append "PREFIX=" %output))))
3322 (list pkg-config universal-ctags))
3325 (home-page "https://code.causal.agency/june/pounce")
3326 (synopsis "Simple multi-client TLS-only IRC bouncer")
3328 "@command{pounce} is a multi-client, TLS-only IRC bouncer. It maintains
3329 a persistent connection to an IRC server, acting as a proxy and buffer for
3330 a number of clients.")
3331 (license license:gpl3+)))
3333 (define-public weechat-matrix
3335 (name "weechat-matrix")
3341 (url "https://github.com/poljar/weechat-matrix")
3343 (file-name (git-file-name name version))
3346 "1iv55n4k05139f7jzkhczgw4qp6qwilrvfsy3c6v2m1kxffj12d3"))))
3347 (build-system python-build-system)
3350 (modify-phases %standard-phases
3353 (lambda* (#:key inputs outputs #:allow-other-keys)
3354 (let* ((weechat-python (string-append (assoc-ref outputs "out")
3355 "/share/weechat/python")))
3356 ;; Avoid circular import by renaming the matrix module to
3358 (substitute* (cons "main.py"
3359 (append (find-files "matrix")
3360 (find-files "tests")))
3361 (("from matrix") "from weechat_matrix")
3362 (("import matrix") "import weechat_matrix"))
3363 ;; Install python modules.
3364 (invoke "make" "install-lib"
3365 (string-append "INSTALLDIR="
3366 (site-packages inputs outputs)
3368 ;; Extend PYTHONPATH to find installed python modules.
3369 (add-installed-pythonpath inputs outputs)
3370 ;; Augment sys.path so that dependencies are found.
3371 (substitute* "main.py"
3372 (("import os\n" all)
3373 (apply string-append
3377 (string-append "sys.path.append('" path "')\n"))
3378 (string-split (getenv "GUIX_PYTHONPATH") #\:)))))
3380 (mkdir-p weechat-python)
3381 (copy-file "main.py"
3382 (string-append weechat-python "/matrix.py")))))
3384 (lambda* (#:key tests? #:allow-other-keys)
3386 (invoke "pytest")))))))
3388 (list python-matrix-nio python-pygments python-pyopenssl
3391 (list python-pytest))
3392 (home-page "https://github.com/poljar/weechat-matrix")
3393 (synopsis "Weechat Matrix protocol script")
3394 (description "@code{weechat-matrix} is a Python plugin for Weechat that lets
3395 Weechat communicate over the Matrix protocol.")
3396 (license license:isc)))
3398 (define-public weechat-wee-slack
3400 (name "weechat-wee-slack")
3406 (url "https://github.com/wee-slack/wee-slack")
3407 (commit (string-append "v" version))))
3408 (file-name (git-file-name name version))
3411 "01h9n6a39sgpczvjywvxb5z5vz3jb3h2xx2vspjkkz06gzwniijq"))))
3412 (build-system python-build-system)
3415 (modify-phases %standard-phases
3418 (lambda* (#:key inputs outputs #:allow-other-keys)
3419 ;; Augment sys.path so that dependencies are found.
3420 (substitute* "wee_slack.py"
3421 (("import sys\n" all)
3422 (apply string-append
3425 (string-append "sys.path.append('" path "')\n"))
3426 (string-split (getenv "GUIX_PYTHONPATH") #\:)))))
3428 (install-file "wee_slack.py"
3429 (string-append (assoc-ref outputs "out")
3430 "/share/weechat/python"))))
3432 (lambda* (#:key tests? #:allow-other-keys)
3434 (invoke "pytest")))))))
3436 (list python-websocket-client))
3438 (list python-pytest))
3439 (home-page "https://github.com/wee-slack/wee-slack")
3440 (synopsis "Weechat Slack script")
3441 (description "@code{weechat-wee-slack} is a WeeChat native client for
3442 Slack. It provides supplemental features only available in the web/mobile
3443 clients such as synchronizing read markers, typing notification, threads (and
3444 more)! It connects via the Slack API, and maintains a persistent websocket
3445 for notification of events.")
3446 (license license:expat)))
3448 (define-public python-librecaptcha
3450 (name "python-librecaptcha")
3455 (url "https://github.com/taylordotfish/librecaptcha")
3457 (file-name (string-append name "-" version "-checkout"))
3460 "0r35ws6vdf31j01kpacvpjplddm254r0cgy0npmhgnfxd5kpjf3s"))))
3461 (build-system python-build-system)
3463 (list python-pillow python-requests python-esprima python-pygobject gobject-introspection gtk+))
3464 (synopsis "Show CAPTCHA without running proprietary code.")
3465 (description "This package shows CAPTCHA without running proprietary code.")
3466 (home-page "https://github.com/taylordotfish/librecaptcha")
3467 (license license:gpl3+)))
3469 (define-public python-harmony
3471 (name "python-harmony")
3476 (url "https://github.com/taylordotfish/harmony.git")
3478 (file-name (string-append name "-" version "-checkout"))
3481 "1bm9xcnzpnpj6rlhbrnl2abwclzl7ivgh1vb5644y9mnhcs489js"))))
3482 (build-system python-build-system)
3486 (list python-librecaptcha python-keyring python-requests))
3487 (synopsis "Discord account management")
3488 (description "This package provides account management tools for
3490 (home-page "https://github.com/taylordotfish/harmony")
3491 (license license:gpl3+)))
3497 (home-page "https://github.com/Orange-OpenSource/pn")
3502 (commit (string-append "v" version))))
3503 (file-name (git-file-name name version))
3506 "1lvzb0yixj7wmmqzsri20k9nn3gf06j0yjvmg2mi1zihywq7s4dx"))))
3507 (build-system cmake-build-system)
3509 (list #:tests? #f ;no tests
3510 #:phases #~(modify-phases %standard-phases
3511 (add-after 'unpack 'set-lib-destination
3513 (substitute* "CMakeLists.txt"
3514 (("DESTINATION \\$\\{AWKLIBPATH\\}")
3515 "DESTINATION lib")))))))
3516 (inputs (list icu4c libphonenumber protobuf))
3517 (synopsis "Command-line validation tool for phone numbers")
3519 "@code{pn} provides a command line tool that allows users to operate on
3520 phone numbers (get validity information, reformat them, or extract numbers from
3521 a text snippet), using @code{libphonenumber}.")
3522 (license license:asl2.0)))
3524 ;;; messaging.scm ends here