gnu: weechat-wee-slack: Update to 2.9.0.
[jackhill/guix/guix.git] / gnu / packages / messaging.scm
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>
40 ;;;
41 ;;; This file is part of GNU Guix.
42 ;;;
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.
47 ;;;
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.
52 ;;;
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/>.
55
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))
155
156 (define-public omemo-wget
157 (package
158 (name "omemo-wget")
159 (version "0.3.0")
160 (source
161 (origin
162 (method git-fetch)
163 (uri
164 (git-reference
165 (url "https://github.com/roobre/omemo-wget")
166 (commit (string-append "v" version))))
167 (file-name (git-file-name name version))
168 (sha256
169 (base32 "0s3vfaicw5xbjl9yiyr4ckrzhzqbvfh1w2ih1igavlfpgw4v7kva"))))
170 (build-system go-build-system)
171 (arguments
172 `(#:import-path "github.com/roobre/omemo-wget"
173 #:phases
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))))))))
185 (inputs
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+)))
193
194 (define-public psi
195 (package
196 (name "psi")
197 (version "1.5")
198 (source
199 (origin
200 (method url-fetch)
201 (uri
202 (string-append "mirror://sourceforge/psi/Psi/"
203 version "/psi-" version ".tar.xz"))
204 (modules '((guix build utils)))
205 (snippet
206 `(begin
207 (delete-file-recursively "3rdparty")))
208 (sha256
209 (base32 "1dxmm1d1zr0pfs51lba732ipm6hm2357jlfb934lvarzsh7karri"))))
210 (build-system qt-build-system)
211 (arguments
212 `(#:tests? #f ; No target
213 #:configure-flags
214 (list
215 "-DUSE_ENCHANT=ON"
216 "-DUSE_CCACHE=OFF")
217 #:phases
218 (modify-phases %standard-phases
219 (add-after 'unpack 'patch-cmake
220 (lambda _
221 (substitute* "cmake/modules/FindHunspell.cmake"
222 (("hunspell-1.6")
223 "hunspell-1.7"))
224 #t)))))
225 (native-inputs
226 `(("pkg-config" ,pkg-config)
227 ("python" ,python-wrapper)
228 ("ruby" ,ruby)))
229 (inputs
230 `(("aspell" ,aspell)
231 ("enchant" ,enchant-1.6)
232 ("hunspell" ,hunspell)
233 ("libidn" ,libidn)
234 ("qca" ,qca)
235 ("qtbase" ,qtbase-5)
236 ("qtmultimedia-5" ,qtmultimedia-5)
237 ("qtsvg-5" ,qtsvg-5)
238 ("qtwebkit" ,qtwebkit)
239 ("qtx11extras" ,qtx11extras)
240 ("x11" ,libx11)
241 ("xext" ,libxext)
242 ("xcb" ,libxcb)
243 ("zlib" ,zlib)))
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+)))
249
250 (define-public libgnt
251 (package
252 (name "libgnt")
253 (version "2.14.3")
254 (source
255 (origin
256 (method url-fetch)
257 (uri
258 (string-append "mirror://sourceforge/pidgin/libgnt/"
259 version "/libgnt-" version ".tar.xz"))
260 (sha256
261 (base32 "08v14fjcx2wx6c573wllq015l6zc8qkpz8rrl6qhp7crf9zlbxap"))))
262 (build-system meson-build-system)
263 (outputs '("out" "doc"))
264 (arguments
265 `(#:glib-or-gtk? #t ; To wrap binaries and/or compile schemas
266 #:phases
267 (modify-phases %standard-phases
268 (add-after 'unpack 'patch-ncurses-path
269 (lambda* (#:key inputs #:allow-other-keys)
270 (substitute* "meson.build"
271 (("'/usr'")
272 (string-append "'"
273 (assoc-ref inputs "ncurses")
274 "'")))))
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"))
287 (rename-file
288 (string-append out "/share/gtk-doc")
289 (string-append doc "/share/gtk-doc"))))))))
290 (native-inputs
291 `(("docbook-xml" ,docbook-xml-4.1.2)
292 ("glib:bin" ,glib "bin")
293 ("gobject-introspection" ,gobject-introspection)
294 ("gtk-doc" ,gtk-doc)
295 ("pkg-config" ,pkg-config)))
296 (inputs
297 (list ncurses))
298 (propagated-inputs
299 `(("glib" ,glib)
300 ("libxml" ,libxml2)
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+)))
307
308 (define-public libgadu
309 (package
310 (name "libgadu")
311 (version "1.12.2")
312 (source
313 (origin
314 (method git-fetch)
315 (uri
316 (git-reference
317 (url "https://github.com/wojtekka/libgadu.git")
318 (commit version)))
319 (file-name
320 (git-file-name name version))
321 (sha256
322 (base32 "1s16cripy5w9k12534qb012iwc5m9qcjyrywgsziyn3kl3i0aa8h"))))
323 (build-system gnu-build-system)
324 (arguments
325 ;; 'test/manual/userconfig.h' contains definitions in lieu of
326 ;; declarations, hence '-fcommon'.
327 `(#:configure-flags
328 (list "--disable-static" "CFLAGS=-O2 -g -fcommon")
329 #:phases
330 (modify-phases %standard-phases
331 (add-after 'unpack 'patch-shebangs
332 (lambda* (#:key inputs #:allow-other-keys)
333 (substitute* "protobufgen.sh"
334 (("/bin/sh")
335 (search-input-file inputs "/bin/sh"))))))))
336 (native-inputs
337 (list autoconf
338 automake
339 bash
340 doxygen
341 libtool
342 perl
343 pkg-config))
344 (inputs
345 `(("curl" ,curl)
346 ("expat" ,expat)
347 ("libprotobuf-c" ,protobuf-c)
348 ("libxml" ,libxml2)
349 ("openssl" ,openssl)
350 ("zlib" ,zlib)))
351 (propagated-inputs
352 (list gnutls))
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+)))
359
360 (define-public silc-toolkit
361 (package
362 (name "silc-toolkit")
363 (version "1.1.12")
364 (source
365 (origin
366 (method url-fetch)
367 (uri
368 (string-append "mirror://sourceforge/silc/silc/toolkit/sources/silc-toolkit-"
369 version ".tar.gz"))
370 (sha256
371 (base32 "0mnvf9n7qriadg0p7a8qmvcayhnns2g9fhmcymavlm0v8xrky33y"))))
372 (build-system gnu-build-system)
373 (arguments
374 `(#:configure-flags
375 (list
376 "--disable-static"
377 "--enable-ipv6"
378 "--enable-stack-trace")
379 #:phases
380 (modify-phases %standard-phases
381 (add-after 'unpack 'trigger-bootstrap
382 (lambda _
383 (delete-file "configure")
384 (delete-file "Makefile.in")
385 #t)))))
386 (native-inputs
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
392 conferencing.")
393 (home-page "https://silc.github.io/info")
394 (license
395 ;; Dual-licensed
396 (list
397 license:gpl2+
398 license:bsd-2))))
399
400 (define-public qxmpp
401 (package
402 (name "qxmpp")
403 (version "1.4.0")
404 (source
405 (origin
406 (method git-fetch)
407 (uri (git-reference
408 (url "https://github.com/qxmpp-project/qxmpp")
409 (commit (string-append "v" version))))
410 (file-name (git-file-name name version))
411 (sha256
412 (base32 "1knpq1jkwk0lxdwczbmzf7qrjvlxba9yr40nbq9s5nqkcx6q1c3i"))))
413 (build-system cmake-build-system)
414 (arguments
415 `(#:configure-flags (list "-DBUILD_EXAMPLES=false"
416 "-DWITH_GSTREAMER=true")
417 #:phases
418 (modify-phases %standard-phases
419 (replace 'check
420 (lambda* (#:key tests? #:allow-other-keys)
421 (when tests?
422 (invoke "ctest" "-E"
423 (string-join ;; These tests use the network.
424 (list "tst_qxmppiceconnection"
425 "tst_qxmppcallmanager"
426 "tst_qxmpptransfermanager")
427 "|"))))))))
428 (native-inputs
429 (list pkg-config))
430 (inputs
431 (list gstreamer qtbase-5))
432 (home-page "https://github.com/qxmpp-project/qxmpp")
433 (synopsis "XMPP client and server library")
434 (description
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+)))
439
440 (define-public meanwhile
441 (package
442 (name "meanwhile")
443 (version "1.1.1")
444 (source
445 (origin
446 (method git-fetch)
447 (uri
448 (git-reference
449 (url "https://github.com/obriencj/meanwhile.git")
450 (commit
451 (string-append "v" version))))
452 (file-name
453 (git-file-name name version))
454 (sha256
455 (base32 "1k1gvmx1ikm0y1mdmm495rzkb00pl170jfaf2dy0n5aiiknkk7q3"))))
456 (build-system glib-or-gtk-build-system)
457 (native-inputs
458 (list autoconf automake doxygen libtool pkg-config))
459 (propagated-inputs
460 (list glib))
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)))
468
469 (define-public poezio
470 (package
471 (name "poezio")
472 (version "0.13.2")
473 (source
474 (origin
475 (method git-fetch)
476 (uri
477 (git-reference
478 (url "https://lab.louiz.org/poezio/poezio.git")
479 (commit
480 (string-append "v" version))))
481 (file-name
482 (git-file-name name version))
483 (sha256
484 (base32 "0p92k8ssjsgavyfv1fd5cgzyw87dmdd84vaz7zvfsf5crvpr1mkf"))))
485 (build-system python-build-system)
486 (arguments
487 (list #:phases
488 #~(modify-phases %standard-phases
489 (add-after 'unpack 'patch
490 (lambda _
491 (substitute* "setup.py"
492 (("'CC', 'cc'")
493 "'CC', 'gcc'")))))))
494 (native-inputs
495 (list pkg-config python-setuptools python-sphinx))
496 (inputs
497 (list python-mpd2
498 python-potr
499 python-pyasn1
500 python-pyasn1-modules
501 python-pygments
502 python-pyinotify
503 python-qrcode
504 python-slixmpp))
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)))
517
518 (define-public libotr
519 (package
520 (name "libotr")
521 (version "4.1.1")
522 (source
523 (origin
524 (method url-fetch)
525 (uri (string-append "https://otr.cypherpunks.ca/libotr-"
526 version ".tar.gz"))
527 (sha256
528 (base32 "1x8rliydhbibmzwdbyr7pd7n87m2jmxnqkpvaalnf4154hj1hfwb"))
529 (patches
530 (search-patches "libotr-test-auth-fix.patch"))))
531 (build-system gnu-build-system)
532 (native-inputs
533 (list perl)) ; for the test suite
534 (inputs
535 (list libgpg-error))
536 (propagated-inputs
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/")
549 (license
550 (list
551 ;; Library
552 license:lgpl2.1+
553 ;; Others
554 license:gpl2+))))
555
556 (define-public libsignal-protocol-c
557 (package
558 (name "libsignal-protocol-c")
559 (version "2.3.3")
560 (source (origin
561 (method git-fetch)
562 (uri (git-reference
563 (url "https://github.com/WhisperSystems/libsignal-protocol-c")
564 (commit (string-append "v" version))))
565 (file-name (git-file-name name version))
566 (sha256
567 (base32
568 "0z5p03vk15i6h870azfjgyfgxhv31q2vq6rfhnybrnkxq2wqzwhk"))))
569 (arguments
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:
574 check openssl))
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+)))
583
584 (define-public axc
585 (package
586 (name "axc")
587 (version "0.3.7")
588 (source
589 (origin
590 (method git-fetch)
591 (uri (git-reference
592 (url "https://github.com/gkdr/axc")
593 (commit (string-append "v" version))))
594 (modules '((guix build utils)))
595 (snippet
596 `(begin
597 ;; Empty directories meant to hold submodules that we provide as
598 ;; proper inputs below.
599 (delete-file-recursively "lib")))
600 (file-name
601 (git-file-name name version))
602 (sha256
603 (base32 "0b02b9flri374f8aw6xfz7mm9s57rb7393r8mdphv7kcsf76i7i5"))))
604 (build-system cmake-build-system)
605 (arguments
606 `(#:phases (modify-phases %standard-phases
607 (replace 'configure
608 (lambda* (#:key outputs #:allow-other-keys)
609 (let ((out (assoc-ref outputs "out")))
610 (setenv "CC" "gcc")
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
618 @code{sqlite}.")
619 (home-page "https://github.com/gkdr/axc")
620 (license license:gpl3))) ;GPLv3-only, per license headers
621
622 (define-public libomemo
623 (package
624 (name "libomemo")
625 (version "0.7.1")
626 (source
627 (origin
628 (method git-fetch)
629 (uri (git-reference
630 (url "https://github.com/gkdr/libomemo")
631 (commit (string-append "v" version))))
632 (file-name
633 (git-file-name name version))
634 (sha256
635 (base32 "1q3vyj8zk3vm0a4v6w8qya5dhk2yw04bga8799a0zl6907nf122k"))))
636 (build-system cmake-build-system)
637 (arguments
638 `(#:phases (modify-phases %standard-phases
639 (replace 'configure
640 (lambda* (#:key outputs #:allow-other-keys)
641 (let ((out (assoc-ref outputs "out")))
642 (setenv "CC" "gcc")
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)))
652
653 (define-public bitlbee
654 (package
655 (name "bitlbee")
656 (version "3.6")
657 (source (origin
658 (method url-fetch)
659 (uri (string-append "https://get.bitlbee.org/src/bitlbee-"
660 version ".tar.gz"))
661 (sha256
662 (base32 "0zhhcbcr59sx9h4maf8zamzv2waya7sbsl7w74gbyilvy93dw5cz"))))
663 (build-system gnu-build-system)
664 (native-inputs (list pkg-config
665 ;; Note: Change to 'check' for versions > 3.6.
666 check-0.12))
667 (inputs (list glib libotr gnutls python perl))
668 (arguments
669 `(#:phases
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)))
679 (replace 'configure
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"))
686 "--otr=1"))))))
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))))
696
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)
704 (prepend pidgin)))
705 (native-search-paths
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")
711 "lib/pidgin")))))
712 (arguments
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")))))
722 ((#:tests? _ #t)
723 ;; XXX: Tests fail to link, and ./configure says that it's "supported
724 ;; on a best-effort basis" anyway.
725 #f)))))
726
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:
731 ;;
732 ;; discord - Login error: Failed to switch to websocket mode
733 ;;
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")
738 (revision "1"))
739 (package
740 (name "bitlbee-discord")
741 (version (git-version "0.4.3" revision commit))
742 (source
743 (origin
744 (method git-fetch)
745 (uri (git-reference
746 (url "https://github.com/sm00th/bitlbee-discord")
747 (commit commit)))
748 (file-name (git-file-name name version))
749 (sha256
750 (base32 "0jkwhx2walx2ay0vc9x13q0j1qq4r5x30ss03a3j7ks28xvsnxc7"))))
751 (build-system gnu-build-system)
752 (arguments
753 `(#:configure-flags
754 (let ((out (assoc-ref %outputs "out")))
755 (list (string-append "--with-bdatadir=" out "/share/bitlbee/")
756 (string-append "--with-plugindir=" out "/lib/bitlbee/")))
757 #:phases
758 (modify-phases %standard-phases
759 (add-after 'unpack 'patch-autogen
760 (lambda _
761 (let ((sh (which "sh")))
762 (substitute* "autogen.sh" (("/bin/sh") sh))
763 (setenv "CONFIG_SHELL" sh)))))))
764 (inputs (list glib))
765 (native-inputs (list pkg-config
766 autoconf
767 automake
768 texinfo
769 libtool
770 bitlbee ; needs bitlbee headers
771 bash))
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+))))
777
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")
782 (revision "0"))
783 (package
784 (name "purple-mattermost")
785 (version (git-version "1.2" revision commit))
786 (home-page "https://github.com/EionRobb/purple-mattermost")
787 (source (origin
788 (method git-fetch)
789 (uri (git-reference (url home-page)
790 (commit commit)))
791 (file-name (git-file-name name version))
792 (sha256
793 (base32
794 "1481zm20pnfq52ncg7hxayjq8cw3a6yh9m4jm1m5s8chsq04015l"))))
795 (build-system gnu-build-system)
796 (arguments
797 `(#:phases (modify-phases %standard-phases
798 (replace 'configure
799 (lambda* (#:key inputs outputs #:allow-other-keys)
800 ;; Adjust the makefile to install files in the right
801 ;; place.
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 = "
809 out
810 "/share/pixmaps/pidgin/protocols\n")))
811 #t))))
812 #:make-flags (list "CC=gcc"
813 ,(string-append "PLUGIN_VERSION=" version))
814 #:tests? #f))
815 (inputs (list glib json-glib discount pidgin))
816 (native-inputs (list pkg-config))
817 (synopsis "Purple plug-in to access Mattermost instant messaging")
818 (description
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+))))
823
824 (define-public hexchat
825 (package
826 (name "hexchat")
827 (version "2.16.1")
828 (source
829 (origin
830 (method url-fetch)
831 (uri (string-append "https://dl.hexchat.net/hexchat/hexchat-"
832 version ".tar.xz"))
833 (sha256
834 (base32 "1iy4ln6yfgy3xysrfpjxw8fn38i3qx8jsn2mk2prshfzf7d9gr57"))))
835 (build-system meson-build-system)
836 (native-inputs `(("gettext" ,gettext-minimal)
837 ("glib:bin" ,glib "bin") ;need glib-genmarshal
838 ("perl" ,perl)
839 ("pkg-config" ,pkg-config)))
840 (inputs `(("dbus-glib" ,dbus-glib)
841 ("dbus" ,dbus)
842 ("enchant" ,enchant)
843 ("gtk" ,gtk+-2)
844 ("libcanberra" ,libcanberra)
845 ("openssl" ,openssl)
846
847 ;; Bindings for add-on scripts.
848 ("luajit" ,luajit)
849 ("perl-xml-parser" ,perl-xml-parser)
850 ("python" ,python)
851 ("python-cffi" ,python-cffi)
852
853 ;; For the ensuing WRAP-PROGRAM.
854 ("bash-minimal" ,bash-minimal)))
855 (arguments
856 `(#:phases
857 (modify-phases %standard-phases
858 (add-after 'unpack 'skip-desktop-database-updates
859 (lambda _
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:")
866 "if False:"))))
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")
876 (description
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+)))
884
885 (define-public ngircd
886 (package
887 (name "ngircd")
888 (version "26.1")
889 (source (origin
890 (method url-fetch)
891 (uri (string-append "https://arthur.barton.de/pub/ngircd/ngircd-"
892 version ".tar.xz"))
893 (sha256
894 (base32
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))
900 ;; XXX Add libident.
901 (inputs `(("zlib" ,zlib)
902 ("libwrap" ,tcp-wrappers)
903 ("gnutls" ,gnutls)
904 ,@(if (string-suffix? "-linux"
905 (or (%current-target-system)
906 (%current-system)))
907 `(("linux-pam" ,linux-pam))
908 '())))
909 (arguments
910 `(#:configure-flags
911 '("--with-gnutls" "--with-iconv" "--enable-ipv6" "--with-tcp-wrappers"
912 ,@(if (string-suffix? "-linux"
913 (or (%current-target-system)
914 (%current-system)))
915 '("--with-pam")
916 '()))
917 #:phases
918 (modify-phases %standard-phases
919 ;; Necessary for the test suite.
920 (add-after 'configure 'post-configure
921 (lambda _
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"
927 (lambda ()
928 (display
929 (string-append
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
937 ;; 'make' instead.
938 (("getpid.sh sh") "getpid.sh make")))))))
939 (home-page "https://ngircd.barton.de/")
940 (synopsis "Lightweight Internet Relay Chat server for small networks")
941 (description
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
945 authentication.")
946 (license license:gpl2+)))
947
948 (define-public pidgin
949 (package
950 (name "pidgin")
951 (version "2.14.5")
952 (source
953 (origin
954 (method url-fetch)
955 (uri
956 (string-append "mirror://sourceforge/pidgin/Pidgin/"
957 version "/pidgin-" version ".tar.gz"))
958 (sha256
959 (base32 "12llip3r8126gph82r638xjv2v2rg34qgggn1nbwfmc3s7halimr"))
960 (patches
961 (search-patches "pidgin-add-search-path.patch"))
962 (modules '((guix build utils)))
963 (snippet
964 '(begin
965 ;; Remove stale generated file after applying patches.
966 (delete-file "configure")
967 #t))))
968 (build-system glib-or-gtk-build-system)
969 (native-inputs
970 `(("autoconf" ,autoconf) ;; For bootstrap
971 ("automake" ,automake) ;; For bootstrap
972 ("check" ,check)
973 ("dot" ,graphviz)
974 ("gconf" ,gconf)
975 ("intltool" ,intltool)
976 ("libtool" ,libtool) ;; For bootstrap
977 ("pkg-config" ,pkg-config)))
978 (inputs
979 `(("avahi" ,avahi)
980 ("cyrus-sasl" ,cyrus-sasl)
981 ("dbus" ,dbus)
982 ("dbus-glib" ,dbus-glib)
983 ;; ("evolution-data-server" ,evolution-data-server)
984 ("farstream" ,farstream)
985 ("gnutls" ,gnutls)
986 ("gstreamer" ,gstreamer)
987 ;; ("gtkspell2" ,gtkspell2)
988 ("libgadu" ,libgadu)
989 ("libgcrypt" ,libgcrypt)
990 ("libgnt" ,libgnt)
991 ("libice" ,libice)
992 ("libidn" ,libidn)
993 ("libltdl" ,libltdl)
994 ("libsm" ,libsm)
995 ("libx11" ,libx11)
996 ("libxext" ,libxext)
997 ("libxml2" ,libxml2)
998 ("libxscrnsaver" ,libxscrnsaver)
999 ("libxslt" ,libxslt)
1000 ;; ("libzephyr" ,libzephyr)
1001 ("meanwhile" ,meanwhile)
1002 ("ncurses" ,ncurses)
1003 ("network-manager" ,network-manager)
1004 ("nspr" ,nspr)
1005 ("nss" ,nss)
1006 ("pango" ,pango)
1007 ("perl" ,perl)
1008 ("python" ,python-2)
1009 ("python2-dbus" ,python2-dbus)
1010 ("silc" ,silc-toolkit)
1011 ("sqlite" ,sqlite)
1012 ("startup-notification" ,startup-notification)
1013 ("tcl" ,tcl)
1014 ("tk" ,tk)))
1015 (propagated-inputs
1016 (list glib gtk+-2))
1017 (arguments
1018 `(#:configure-flags
1019 (list
1020 (string-append "CFLAGS=-I"
1021 (assoc-ref %build-inputs "gst-plugins-base")
1022 "/include/gstreamer-1.0")
1023 "--disable-gtkspell"
1024 "--disable-gevolution"
1025 "--enable-cap"
1026 "--enable-cyrus-sasl"
1027 (string-append "--with-ncurses-headers="
1028 (assoc-ref %build-inputs "ncurses")
1029 "/include")
1030 (string-append "--with-tclconfig="
1031 (assoc-ref %build-inputs "tcl")
1032 "/lib")
1033 (string-append "--with-tkconfig="
1034 (assoc-ref %build-inputs "tk")
1035 "/lib"))))
1036 (native-search-paths
1037 (list
1038 (search-path-specification
1039 (variable "PURPLE_PLUGIN_PATH")
1040 (files
1041 (list
1042 (string-append "lib/purple-"
1043 (version-major version))
1044 "lib/pidgin")))))
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.")
1049 (license
1050 (list
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.")))))
1061
1062 (define-public pidgin-otr
1063 (package
1064 (name "pidgin-otr")
1065 (version "4.0.2")
1066 (source
1067 (origin
1068 (method url-fetch)
1069 (uri
1070 (string-append "https://otr.cypherpunks.ca/"
1071 name "-" version ".tar.gz"))
1072 (sha256
1073 (base32 "1i5s9rrgbyss9rszq6c6y53hwqyw1k86s40cpsfx5ccl9bprxdgl"))))
1074 (build-system gnu-build-system)
1075 (native-inputs
1076 (list gettext-minimal intltool pkg-config))
1077 (inputs
1078 (list glib
1079 gtk+-2
1080 libgcrypt
1081 libgpg-error
1082 libotr
1083 perl
1084 pidgin))
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+)))
1098
1099 (define-public znc
1100 (package
1101 (name "znc")
1102 (version "1.8.2")
1103 (source (origin
1104 (method url-fetch)
1105 (uri (string-append "https://znc.in/releases/archive/znc-"
1106 version ".tar.gz"))
1107 (sha256
1108 (base32
1109 "03fyi0j44zcanj1rsdx93hkdskwfvhbywjiwd17f9q1a7yp8l8zz"))))
1110 (build-system cmake-build-system)
1111 (arguments
1112 `(#:configure-flags
1113 (list "-DWANT_CYRUS=ON"
1114 "-DWANT_I18N=ON"
1115 "-DWANT_PERL=ON"
1116 "-DWANT_PYTHON=ON")
1117 #:phases
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"))
1124 (mkdir-p target)
1125 (copy-recursively source target)
1126 #t))))))
1127 (native-inputs
1128 `(("boost" ,boost)
1129 ("gettext" ,gettext-minimal)
1130 ("googletest-source" ,(package-source googletest))
1131 ("pkg-config" ,pkg-config)))
1132 (inputs
1133 (list cyrus-sasl
1134 icu4c
1135 openssl
1136 perl
1137 python
1138 zlib))
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)))
1146
1147 (define-public python-nbxmpp
1148 (package
1149 (name "python-nbxmpp")
1150 (version "3.1.0")
1151 (source
1152 (origin
1153 (method url-fetch)
1154 (uri
1155 (pypi-uri "nbxmpp" version))
1156 (sha256
1157 (base32 "0c32090gr1fiy7hkn73dcj4ad9gfdpks8hivl1dl8bql01jsfdnj"))))
1158 (build-system python-build-system)
1159 (native-inputs
1160 (list `(,glib "bin")))
1161 (inputs
1162 (list glib
1163 glib-networking
1164 libsoup-minimal-2
1165 python-gssapi
1166 python-idna
1167 python-precis-i18n
1168 python-pygobject))
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
1172 of xmpppy.")
1173 (home-page "https://dev.gajim.org/gajim/python-nbxmpp")
1174 (license license:gpl3+)))
1175
1176 (define-public gajim
1177 (package
1178 (name "gajim")
1179 (version "1.4.6")
1180 (source
1181 (origin
1182 (method url-fetch)
1183 (uri
1184 (string-append "https://gajim.org/downloads/"
1185 (version-major+minor version)
1186 "/gajim-" version ".tar.gz"))
1187 (sha256
1188 (base32 "0ks25hh7ksx0nfydixpixcli556w7qcylxp2z2xsx8mgzqv7c9la"))
1189 (patches (search-patches "gajim-honour-GAJIM_PLUGIN_PATH.patch"))))
1190 (build-system python-build-system)
1191 (arguments
1192 `(#:imported-modules
1193 (,@%python-build-system-modules
1194 (guix build glib-or-gtk-build-system))
1195 #:modules
1196 ((guix build python-build-system)
1197 ((guix build glib-or-gtk-build-system)
1198 #:prefix glib-or-gtk:)
1199 (guix build utils))
1200 #:phases
1201 (modify-phases %standard-phases
1202 (add-after 'unpack 'disable-failing-tests
1203 (lambda _
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")))
1208 (replace 'check
1209 (lambda _
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")))
1227 (for-each
1228 (lambda (name)
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")))
1232 (wrap-program file
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
1237 (list
1238 (search-path-specification
1239 (variable "GAJIM_PLUGIN_PATH")
1240 (separator #f) ;single entry
1241 (files
1242 (list
1243 "share/gajim/plugins")))
1244 ;; Gajim needs to use the propagated inputs of its plugins.
1245 (search-path-specification
1246 (variable "GUIX_PYTHONPATH")
1247 (files
1248 (list
1249 (string-append
1250 "lib/python"
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))
1254 "3.9"
1255 "/site-packages"))))))
1256 (native-inputs
1257 (list gettext-minimal
1258 `(,glib "bin")
1259 gobject-introspection
1260 `(,gtk+ "bin")
1261 python-distutils-extra
1262 python-setuptools
1263 xorg-server-for-tests))
1264 (inputs
1265 (list avahi
1266 dbus
1267 farstream
1268 geoclue
1269 glib
1270 glib-networking
1271 gsettings-desktop-schemas
1272 gsound
1273 gspell
1274 gstreamer
1275 gst-plugins-base
1276 gtk+
1277 gtksourceview-4
1278 gupnp-igd
1279 libappindicator
1280 libnice
1281 libsecret
1282 libsoup
1283 libxscrnsaver
1284 network-manager
1285 python-css-parser
1286 python-dbus
1287 python-gssapi
1288 python-keyring
1289 python-nbxmpp
1290 python-packaging
1291 python-pillow
1292 python-precis-i18n
1293 python-pycairo
1294 python-pygobject
1295 python-pyopenssl))
1296 (propagated-inputs
1297 (list dconf))
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)))
1304
1305 (define-public gajim-omemo
1306 (package
1307 (name "gajim-omemo")
1308 (version "2.8.15")
1309 (source
1310 (origin
1311 (method url-fetch/zipbomb)
1312 (uri
1313 (string-append
1314 "https://ftp.gajim.org/plugins/master/omemo/omemo_"
1315 version ".zip"))
1316 (sha256
1317 (base32 "1hf148ywr8knk5y3y5xvvwgw74ld1pcfjkp78g514ikcnzfycfcn"))))
1318 (build-system trivial-build-system)
1319 (arguments
1320 `(#:modules ((guix build utils))
1321 #:builder
1322 (begin
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")))
1327 (mkdir-p share)
1328 (copy-recursively source share)
1329 #t))))
1330 (propagated-inputs
1331 (list python-axolotl python-axolotl-curve25519 python-cryptography
1332 python-qrcode))
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.")
1337 (home-page
1338 "https://dev.gajim.org/gajim/gajim-plugins/-/wikis/OmemoGajimPlugin")
1339 (license license:gpl3+)))
1340
1341 (define-public gajim-openpgp
1342 (package
1343 (name "gajim-openpgp")
1344 (version "1.4.9")
1345 (source
1346 (origin
1347 (method url-fetch/zipbomb)
1348 (uri
1349 (string-append
1350 "https://ftp.gajim.org/plugins/master/openpgp/openpgp_"
1351 version ".zip"))
1352 (sha256
1353 (base32 "1xwmf6ai1z7z9x6p1ysglxji73r7d27c0gzc8ykab29cjhjyv0dq"))))
1354 (build-system trivial-build-system)
1355 (arguments
1356 `(#:modules ((guix build utils))
1357 #:builder
1358 (begin
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")))
1363 (mkdir-p share)
1364 (copy-recursively source share)
1365 #t))))
1366 (propagated-inputs
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+)))
1373
1374 (define-public dino
1375 (package
1376 (name "dino")
1377 (version "0.3.0")
1378 (source
1379 (origin
1380 (method url-fetch)
1381 (uri
1382 (string-append "https://github.com/dino/dino/releases/download/v"
1383 version "/dino-" version ".tar.gz"))
1384 (sha256
1385 (base32 "07nw275xfamczzvzps8hsnpbhzvr4qc726fx92w8ncmdag7wlw1r"))))
1386 (build-system cmake-build-system)
1387 (outputs '("out" "debug"))
1388 (arguments
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:)
1393 (guix build utils))
1394 #:imported-modules `(,@%gnu-build-system-modules
1395 (guix build cmake-build-system)
1396 (guix build glib-or-gtk-build-system))
1397 #:phases
1398 #~(modify-phases %standard-phases
1399 ;; For A/V support.
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")))
1405 (wrap-program dino
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))
1409 (replace 'check
1410 (lambda* (#:key tests? #:allow-other-keys)
1411 (when tests?
1412 (invoke "./libdino-test")
1413 (invoke "./signal-protocol-vala-test")
1414 (invoke "./xmpp-vala-test")))))))
1415 (native-inputs
1416 (list gettext-minimal
1417 `(,glib "bin")
1418 gobject-introspection
1419 `(,gtk+ "bin")
1420 pkg-config
1421 vala))
1422 (inputs
1423 (list atk
1424 cairo
1425 librsvg
1426 glib
1427 glib-networking
1428 gpgme
1429 gsettings-desktop-schemas
1430 gspell ;for spell-check support
1431 gstreamer ;for A/V support
1432 gst-plugins-base
1433 gst-plugins-good
1434 gtk+
1435 icu4c ;for emoji support
1436 libcanberra ;for sound-notification support
1437 libgcrypt
1438 libgee
1439 libnice
1440 libsignal-protocol-c
1441 libsoup-minimal-2
1442 libsrtp ;for calls support
1443 pango
1444 qrencode
1445 sqlite
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
1450 default.")
1451 (home-page "https://dino.im")
1452 (license license:gpl3+)))
1453
1454 (define-public kaidan
1455 (package
1456 (name "kaidan")
1457 (version "0.8.0")
1458 (source (origin
1459 (method url-fetch)
1460 (uri (string-append "mirror://kde/unstable/kaidan/" version
1461 "/kaidan-" version ".tar.xz"))
1462 (modules '((guix build utils)))
1463 (snippet
1464 #~(begin
1465 (delete-file-recursively "3rdparty")))
1466 (sha256
1467 (base32 "195iddv35gc3k83r226y17avsab2b9bszgd7z7ynbddsgbf75rx7"))))
1468 (build-system qt-build-system)
1469 (arguments
1470 (list #:configure-flags #~(list "-DBUILD_TESTS=true")))
1471 (native-inputs (list extra-cmake-modules
1472 perl
1473 pkg-config
1474 python-wrapper))
1475 (inputs (list kirigami
1476 knotifications
1477 qtbase-5
1478 qtdeclarative-5
1479 qtgraphicaleffects
1480 qtlocation
1481 qtquickcontrols2-5
1482 qtsvg-5
1483 qtmultimedia-5
1484 qtxmlpatterns
1485 qqc2-desktop-style
1486 qxmpp
1487 zxing-cpp))
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.")
1494 (license (list
1495 ;; Graphics
1496 license:cc-by-sa4.0
1497 ;; Files:
1498 ;; src/{StatusBar.cpp|StatusBar.h|singleapp/*|hsluv-c/*}
1499 ;; utils/generate-license.py
1500 license:expat
1501 ;; QrCodeVideoFrame
1502 license:asl2.0
1503 ;; Others
1504 license:gpl3+))))
1505
1506 (define-public prosody
1507 (package
1508 (name "prosody")
1509 (version "0.11.10")
1510 (source (origin
1511 (method url-fetch)
1512 (uri (string-append "https://prosody.im/downloads/source/"
1513 "prosody-" version ".tar.gz"))
1514 (sha256
1515 (base32
1516 "1q84s9cq7cgzd295qxa2iy0r3vd3v3chbck62bdx3pd6skk19my6"))))
1517 (build-system gnu-build-system)
1518 (arguments
1519 `(#:tests? #f ;tests require "busted"
1520 #:configure-flags (list "--no-example-certs")
1521 #:modules ((ice-9 match)
1522 (srfi srfi-1)
1523 (guix build gnu-build-system)
1524 (guix build utils))
1525 #:phases
1526 (modify-phases %standard-phases
1527 (add-after 'unpack 'fix-configure-script
1528 (lambda _
1529 ;; The configure script aborts when it encounters unexpected
1530 ;; arguments. Make it more tolerant.
1531 (substitute* "configure"
1532 (("exit 1") ""))))
1533 (add-after 'unpack 'fix-makefile
1534 (lambda _
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)
1549 directory #f)))
1550 inputs)))
1551 (lua-path (string-join
1552 (map (lambda (path)
1553 (string-append
1554 path "/share/lua/5.2/?.lua;"
1555 path "/share/lua/5.2/?/?.lua"))
1556 (cons out deps))
1557 ";"))
1558 (lua-cpath (string-join
1559 (map (lambda (path)
1560 (string-append
1561 path "/lib/lua/5.2/?.so;"
1562 path "/lib/lua/5.2/?/?.so"))
1563 (cons out deps))
1564 ";"))
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)
1571 (wrap-program file
1572 `("LUA_PATH" ";" = (,lua-path))
1573 `("LUA_CPATH" ";" = (,lua-cpath))
1574 `("PATH" ":" prefix ,path)))
1575 (find-files bin ".*"))))))))
1576 (inputs
1577 (list libidn
1578 openssl
1579 lua-5.2
1580 lua5.2-bitop
1581 lua5.2-expat
1582 lua5.2-socket
1583 lua5.2-filesystem
1584 lua5.2-sec))
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
1591 protocols.")
1592 (license license:x11)))
1593
1594 (define-public prosody-http-upload
1595 (let ((changeset "765735bb590b")
1596 (revision "1"))
1597 (package
1598 (name "prosody-http-upload")
1599 (version (string-append "0-" revision "." (string-take changeset 7)))
1600 (source (origin
1601 (method hg-fetch)
1602 (uri (hg-reference
1603 (url "https://hg.prosody.im/prosody-modules/")
1604 (changeset changeset)))
1605 (file-name (string-append name "-" version "-checkout"))
1606 (sha256
1607 (base32
1608 "142wrcism70nf8ffahhd961cqg2pi1h7ic8adfs3zwh0j3pnf41f"))))
1609 (build-system trivial-build-system)
1610 (arguments
1611 '(#:modules ((guix build utils))
1612 #:builder
1613 (begin
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))
1619 #t))))
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)))))
1625
1626 (define-public prosody-smacks
1627 (let ((changeset "67f1d1f22625")
1628 (revision "1"))
1629 (package
1630 (name "prosody-smacks")
1631 (version (string-append "0-" revision "." (string-take changeset 7)))
1632 (source (origin
1633 (method hg-fetch)
1634 (uri (hg-reference
1635 (url "https://hg.prosody.im/prosody-modules/")
1636 (changeset changeset)))
1637 (file-name (string-append name "-" version "-checkout"))
1638 (sha256
1639 (base32
1640 "020ngpax30fgarah98yvlj0ni8rcdwq60if03a9hqdw8mic0nxxs"))))
1641 (build-system trivial-build-system)
1642 (arguments
1643 '(#:modules ((guix build utils))
1644 #:builder
1645 (begin
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))
1651 #t))))
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)))))
1658
1659 (define-public libtoxcore
1660 (let ((revision "2")
1661 (commit "bf69b54f64003d160d759068f4816b2d9b2e1e21"))
1662 (package
1663 (name "libtoxcore")
1664 (version (string-append "0.0.0" "-"
1665 revision "."(string-take commit 7)))
1666 (source (origin
1667 (method git-fetch)
1668 (uri (git-reference
1669 (url "https://github.com/irungentoo/toxcore")
1670 (commit commit)))
1671 (file-name (string-append name "-" version "-checkout"))
1672 (sha256
1673 (base32
1674 "11lqra4yd7v293cp286ynff5lqz1pprzg8vn3wq6vryj08g88zqb"))))
1675 (build-system gnu-build-system)
1676 (arguments `(#:tests? #f)) ; FIXME: tests hang, some fail.
1677 (native-inputs
1678 (list autoconf automake libtool check pkg-config))
1679 (inputs
1680 (list libsodium opus libvpx))
1681 (synopsis "Library for the Tox encrypted messenger protocol")
1682 (description
1683 "C library implementation of the Tox encrypted messenger protocol.")
1684 (license license:gpl3+)
1685 (home-page "https://tox.chat"))))
1686
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
1691 (package
1692 (name "c-toxcore")
1693 (version "0.2.12")
1694 (source
1695 (origin
1696 (method git-fetch)
1697 (uri (git-reference
1698 (url "https://github.com/TokTok/c-toxcore")
1699 (commit (string-append "v" version))))
1700 (file-name (git-file-name name version))
1701 (sha256
1702 (base32
1703 "0a6sqpm00d2rn0nviqfz4gh9ck1wzci6rxgmqmcyryl5ca19ffvp"))))
1704 (arguments
1705 `(#:tests? #f)) ; FIXME: Testsuite seems to stay stuck on test 3. Disable
1706 ; for now.
1707 (build-system cmake-build-system)
1708 (native-inputs
1709 (list pkg-config))
1710 (propagated-inputs
1711 (list libsodium opus libvpx))
1712 (home-page "https://tox.chat")
1713 (synopsis "Library for the Tox encrypted messenger protocol")
1714 (description
1715 "Official fork of the C library implementation of the Tox encrypted
1716 messenger protocol.")
1717 (license license:gpl3+)))
1718
1719 (define-public utox
1720 (package
1721 (name "utox")
1722 (version "0.18.1")
1723 (source
1724 (origin
1725 (method git-fetch)
1726 (uri (git-reference
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"))
1731 (sha256
1732 (base32
1733 "01rvlf94d4rkrygnnjak3cg16hrrqyi1rn9nx65y17qk2nbyh68g"))))
1734 (build-system cmake-build-system)
1735 (arguments
1736 `(#:configure-flags '("-DENABLE_TESTS=on")
1737 #:phases
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"
1742 (("libgtk-3.so")
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")
1747 "/bin/utox")
1748 ;; For GtkFileChooserDialog.
1749 `("GSETTINGS_SCHEMA_DIR" =
1750 (,(string-append (assoc-ref inputs "gtk+")
1751 "/share/glib-2.0/schemas")))))))))
1752 (inputs
1753 `(("dbus" ,dbus)
1754 ("filteraudio" ,filteraudio)
1755 ("fontconfig" ,fontconfig)
1756 ("freetype" ,freetype)
1757 ("c-toxcore" ,c-toxcore)
1758 ("gtk+" ,gtk+)
1759 ("libvpx" ,libvpx)
1760 ("libx11" ,libx11)
1761 ("libxext" ,libxext)
1762 ("libxrender" ,libxrender)
1763 ("openal" ,openal)
1764 ("v4l-utils" ,v4l-utils)))
1765 (native-inputs
1766 (list check pkg-config))
1767 (synopsis "Lightweight Tox client")
1768 (description
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)))
1773
1774 (define-public qtox
1775 (package
1776 (name "qtox")
1777 (version "1.17.6")
1778 (source (origin
1779 (method url-fetch)
1780 (uri (string-append "https://github.com/qTox/qTox/releases"
1781 "/download/v" version
1782 "/v" version ".tar.gz"))
1783 (sha256
1784 (base32
1785 "1ml8z1xpp3qhip4vkr375jf7y5kc18g0apm91n5am6ricx37c01r"))
1786 (file-name (string-append name "-" version ".tar.gz"))))
1787 (build-system cmake-build-system)
1788 (arguments
1789 (list #:phases
1790 #~(modify-phases %standard-phases
1791 (add-after 'unpack 'fix-reproducibility-issues
1792 (lambda _
1793 (substitute* "src/main.cpp"
1794 (("__DATE__") "\"\"")
1795 (("__TIME__") "\"\"")
1796 (("TIMESTAMP") "\"\""))))
1797 (add-after 'unpack 'disable-network-tests
1798 (lambda _
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/"))))))))))
1811 (native-inputs
1812 (list pkg-config qttools-5))
1813 (inputs
1814 (list ffmpeg
1815 filteraudio
1816 glib
1817 gtk+-2
1818 libsodium
1819 c-toxcore
1820 libvpx
1821 libxscrnsaver
1822 libx11
1823 libexif
1824 sqlite
1825 openal
1826 qrencode
1827 qtbase-5
1828 qtsvg-5
1829 sqlcipher))
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+)))
1836
1837 (define-public ytalk
1838 (package
1839 (name "ytalk")
1840 (version "3.3.0")
1841 (source
1842 (origin
1843 (method url-fetch)
1844 (uri (string-append "ftp://ftp.ourproject.org/pub/ytalk/ytalk-"
1845 version ".tar.gz"))
1846 (sha256
1847 (base32
1848 "1d3jhnj8rgzxyxjwfa22vh45qwzjvxw1qh8fz6b7nfkj3zvk9jvf"))))
1849 (build-system gnu-build-system)
1850 (inputs
1851 (list ncurses))
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+)))
1859
1860 (define-public gloox
1861 (package
1862 (name "gloox")
1863 (version "1.0.24")
1864 (source
1865 (origin
1866 (method url-fetch)
1867 (uri (string-append "https://camaya.net/download/gloox-"
1868 version ".tar.bz2"))
1869 (sha256
1870 (base32 "1jgrd07qr9jvbb5hcmhrqz4w4lvwc51m30jls1fgxf1f5az6455f"))))
1871 (build-system gnu-build-system)
1872 (inputs
1873 (list libidn gnutls zlib))
1874 (native-inputs
1875 (list pkg-config))
1876 (synopsis "Portable high-level Jabber/XMPP library for C++")
1877 (description
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)))
1884
1885 (define-public perl-net-psyc
1886 (package
1887 (name "perl-net-psyc")
1888 (version "1.3")
1889 (source
1890 (origin
1891 (method url-fetch)
1892 (uri (string-append "https://perl.psyc.eu/"
1893 "perlpsyc-" version ".zip"))
1894 (file-name (string-append name "-" version ".zip"))
1895 (sha256
1896 (base32
1897 "0vsjclglkwgbyd9m5ad642fyysxw2x725nhq4r2m9pvqaq6s5yf2"))))
1898 (build-system perl-build-system)
1899 (native-inputs
1900 (list unzip))
1901 (inputs
1902 (list perl-curses perl-io-socket-ssl))
1903 (arguments
1904 `(#:phases
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.
1910 (replace 'build
1911 (lambda _ (invoke "make" "manuals")))
1912 (replace 'install
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))))
1922
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)
1934 #t)))
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)
1943 (wrap-program file
1944 `("PERL5LIB" ":" prefix (,path))))
1945 (find-files bin "\\.*$"))
1946 #t))))))
1947 (description
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:
1959 license:agpl3+))))
1960
1961 (define-public libpsyc
1962 (package
1963 (name "libpsyc")
1964 (version "20160913")
1965 (source (origin
1966 (method url-fetch)
1967 (uri (string-append "http://www.psyced.org/files/"
1968 name "-" version ".tar.xz"))
1969 (sha256
1970 (base32
1971 "14q89fxap05ajkfn20rnhc6b1h4i3i2adyr7y6hs5zqwb2lcmc1p"))))
1972 (build-system gnu-build-system)
1973 (native-inputs
1974 (list perl netcat procps))
1975 (arguments
1976 `(#:make-flags
1977 (list "CC=gcc"
1978 (string-append "PREFIX=" (assoc-ref %outputs "out")))
1979 #:phases
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")
1988 (description
1989 "@code{libpsyc} is a PSYC library in C which implements
1990 core aspects of PSYC, useful for all kinds of clients and servers
1991 including psyced.")
1992 (synopsis "PSYC library in C")
1993 (license license:agpl3+)))
1994
1995 (define-public loudmouth
1996 (package
1997 (name "loudmouth")
1998 (version "1.5.4")
1999 (source
2000 (origin
2001 (method url-fetch)
2002 (uri (string-append "https://mcabber.com/files/loudmouth/"
2003 name "-" version ".tar.bz2"))
2004 (sha256
2005 (base32
2006 "03adv5xc84l9brcx0dpyqyffmsclans8yfrpnd357k6x3wfckjri"))))
2007 (build-system gnu-build-system)
2008 (outputs '("out" "doc"))
2009 (arguments
2010 `(#:configure-flags
2011 (list
2012 "--disable-static"
2013 "--enable-gtk-doc"
2014 (string-append "--with-html-dir="
2015 (assoc-ref %outputs "doc")
2016 "/share/gtk-doc/html"))
2017 #:make-flags
2018 (list
2019 "CFLAGS=-Wno-error=all")))
2020 (inputs
2021 `(("glib" ,glib)
2022 ("gnutls" ,gnutls)
2023 ("krb5" ,mit-krb5)
2024 ("libidn" ,libidn)))
2025 (native-inputs
2026 (list pkg-config check
2027 `(,glib "bin") ; gtester
2028 gtk-doc))
2029 (home-page "https://mcabber.com/")
2030 (description
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
2034 protocol allows.")
2035 (synopsis "Asynchronous XMPP library")
2036 ;; The files have LGPL2.0+ headers, but COPYING specifies LGPL2.1.
2037 (license license:lgpl2.0+)))
2038
2039 (define-public mcabber
2040 (package
2041 (name "mcabber")
2042 (version "1.1.2")
2043 (source
2044 (origin
2045 (method url-fetch)
2046 (uri (string-append "https://mcabber.com/files/"
2047 name "-" version ".tar.bz2"))
2048 (sha256
2049 (base32 "0q1i5acyghsmzas88qswvki8kkk2nfpr8zapgnxbcd3lwcxl38f4"))))
2050 (build-system gnu-build-system)
2051 (arguments
2052 `(#:configure-flags
2053 (list
2054 "--disable-static"
2055 "--enable-otr"
2056 "--enable-enchant"
2057 "--enable-aspell")))
2058 (inputs
2059 (list gpgme
2060 libotr
2061 aspell
2062 enchant-1.6
2063 libidn
2064 glib
2065 ncurses
2066 loudmouth))
2067 (native-inputs
2068 `(("perl" ,perl)
2069 ("pkg-config" ,pkg-config)
2070 ("python" ,python-wrapper)))
2071 (home-page "https://mcabber.com")
2072 (description
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+)))
2079
2080 (define-public freetalk
2081 (package
2082 (name "freetalk")
2083 (version "4.2")
2084 (source (origin
2085 (method url-fetch)
2086 (uri (string-append "mirror://gnu/freetalk/freetalk-"
2087 version ".tar.gz"))
2088 (sha256
2089 (base32
2090 "105mw7pg2mcp85r82cs4rv77nwvbw8025047364jzbq6lwllynxv"))))
2091 (build-system gnu-build-system)
2092 (arguments
2093 (list #:phases
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")
2099 `("PATH" ":" suffix
2100 ,(map (lambda (command)
2101 (dirname
2102 (search-input-file
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.
2109 (native-inputs
2110 (list autoconf automake pkg-config texinfo))
2111 (inputs
2112 (list bash
2113 glib
2114 guile-3.0
2115 less
2116 loudmouth
2117 readline))
2118 (synopsis "Extensible console-based Jabber client")
2119 (description
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+)))
2126
2127 (define-public libstrophe
2128 (package
2129 (name "libstrophe")
2130 (version "0.12.0")
2131 (source
2132 (origin
2133 (method git-fetch)
2134 (uri (git-reference
2135 (url "https://github.com/strophe/libstrophe")
2136 (commit version)))
2137 (file-name (git-file-name name version))
2138 (sha256
2139 (base32 "1apply301lxyjax2677bd5mc0a3233nm5qb7fiqpawq2n7vh17v0"))))
2140 (build-system gnu-build-system)
2141 (arguments
2142 (list #:configure-flags '(list "--disable-static")
2143 #:phases
2144 #~(modify-phases %standard-phases
2145 (add-after 'unpack 'patch-make
2146 (lambda _
2147 (substitute* "Makefile.am"
2148 (("'\\^xmpp_'") "'.'"))
2149 #t))
2150 (add-after 'install-licence-files 'install-extra-licence-files
2151 (lambda _
2152 (let ((license-directory (string-append #$output
2153 "/share/doc/"
2154 #$name "-" #$version "/")))
2155 (install-file "MIT-LICENSE.txt" license-directory)))))))
2156 (inputs
2157 (list expat openssl))
2158 (native-inputs
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/")
2165 ;; Dual-licensed.
2166 (license (list license:gpl3+ license:x11))))
2167
2168 (define-public profanity
2169 (package
2170 (name "profanity")
2171 (version "0.12.1")
2172 (source
2173 (origin
2174 (method url-fetch)
2175 (uri
2176 (string-append "https://profanity-im.github.io/tarballs/profanity-"
2177 version ".tar.gz"))
2178 (sha256
2179 (base32
2180 "0vihmlzxr6n3y6v0vdzzxh5p1i09p0hx6sd1b2pnpcgkgcg4hi73"))))
2181 (build-system glib-or-gtk-build-system)
2182 (arguments
2183 `(#:configure-flags
2184 (list
2185 "--disable-static"
2186 "--enable-notifications"
2187 "--enable-python-plugins"
2188 "--enable-c-plugins"
2189 "--enable-plugins"
2190 "--enable-otr"
2191 "--enable-pgp"
2192 "--enable-omemo"
2193 "--enable-icons-and-clipboard")))
2194 (native-inputs
2195 (list autoconf
2196 autoconf-archive
2197 automake
2198 cmocka
2199 libtool
2200 pkg-config))
2201 (inputs
2202 (list curl
2203 expat
2204 glib
2205 gpgme
2206 gtk+-2
2207 libgcrypt
2208 libnotify
2209 libotr
2210 libsignal-protocol-c
2211 libstrophe
2212 ncurses
2213 openssl
2214 python-wrapper
2215 readline
2216 sqlite))
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+)))
2223
2224 (define-public libircclient
2225 (package
2226 (name "libircclient")
2227 (version "1.10")
2228 (source
2229 (origin
2230 (method url-fetch)
2231 (uri (string-append "mirror://sourceforge/libircclient/libircclient/"
2232 version "/libircclient-" version ".tar.gz"))
2233 (sha256
2234 (base32
2235 "0b9wa0h3xc31wpqlvgxgnvqp5wgx3kwsf5s9432m5cj8ycx6zcmv"))))
2236 (build-system gnu-build-system)
2237 (inputs
2238 (list openssl))
2239 (arguments
2240 `(#:configure-flags
2241 (list (string-append "--libdir="
2242 (assoc-ref %outputs "out") "/lib")
2243 "--enable-shared"
2244 "--enable-ipv6"
2245 "--enable-openssl")
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+)))
2254
2255 (define-public toxic
2256 (package
2257 (name "toxic")
2258 (version "0.8.4")
2259 (source
2260 (origin
2261 (method git-fetch)
2262 (uri (git-reference
2263 (url "https://github.com/JFreegman/toxic")
2264 (commit (string-append "v" version))))
2265 (sha256
2266 (base32 "0p1cmj1kyp506y5xm04mhlznhf5wcylvgsn6b307ms91vjqs3fg2"))
2267 (file-name (git-file-name name version))))
2268 (build-system gnu-build-system)
2269 (arguments
2270 `(#:tests? #f ; no tests
2271 #:make-flags
2272 (list
2273 "CC=gcc"
2274 (string-append "PREFIX="
2275 (assoc-ref %outputs "out")))
2276 #:phases
2277 (modify-phases %standard-phases
2278 (delete 'configure)
2279 (add-before 'build 'enable-python-scripting
2280 (lambda _
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")
2288 #t)))))
2289 (inputs
2290 (list c-toxcore
2291 curl
2292 freealut
2293 gdk-pixbuf ; for libnotify.pc
2294 libconfig
2295 libnotify
2296 libpng
2297 libvpx
2298 libx11
2299 ncurses
2300 openal
2301 python
2302 qrencode))
2303 (native-inputs
2304 (list pkg-config))
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+)))
2311
2312 (define-public libqmatrixclient
2313 (package
2314 (name "libqmatrixclient")
2315 (version "0.6.11")
2316 (source
2317 (origin
2318 (method git-fetch)
2319 (uri (git-reference
2320 (url "https://github.com/quotient-im/libQuotient")
2321 (commit version)))
2322 (file-name (git-file-name name version))
2323 (sha256
2324 (base32 "072d3irpdd0p4w77s5pp0baqf74hk7vqggw7ic7i42lzjdwp3yql"))))
2325 (build-system cmake-build-system)
2326 (inputs
2327 (list qtbase-5 qtmultimedia-5))
2328 (arguments
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+)))
2338
2339 (define-public mtxclient
2340 (package
2341 (name "mtxclient")
2342 (version "0.8.2")
2343 (source
2344 (origin
2345 (method git-fetch)
2346 (uri (git-reference
2347 (url "https://github.com/Nheko-Reborn/mtxclient")
2348 (commit (string-append "v" version))))
2349 (file-name (git-file-name name version))
2350 (sha256
2351 (base32 "041ckjvfxapv1q6x9xd8q70x43cz10x7p11aql58lnc0jp0kwry7"))))
2352 (arguments
2353 `(#:configure-flags
2354 (list
2355 ;; Disable example binaries (not installed)
2356 "-DBUILD_LIB_EXAMPLES=OFF")
2357 #:phases
2358 (modify-phases %standard-phases
2359 (add-before 'configure 'disable-network-tests
2360 (lambda _
2361 (substitute* "CMakeLists.txt"
2362 (("add_test\\((BasicConnectivity|ClientAPI|Devices|MediaAPI|Encryption|Pushrules)")
2363 "# add_test")))))))
2364 (build-system cmake-build-system)
2365 (inputs
2366 (list boost
2367 coeurl
2368 curl
2369 json-modern-cxx
2370 libevent
2371 libolm
2372 libsodium
2373 openssl
2374 spdlog
2375 zlib))
2376 (native-inputs
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)))
2383
2384 (define-public nheko
2385 (package
2386 (name "nheko")
2387 (version "0.10.1")
2388 (source
2389 (origin
2390 (method git-fetch)
2391 (uri (git-reference
2392 (url "https://github.com/Nheko-Reborn/nheko")
2393 (commit (string-append "v" version))))
2394 (file-name (git-file-name name version))
2395 (sha256
2396 (base32 "0a3wvv7vzh60hvyzy6776v6wa9d6n020684dqbcl4dw608mf4ahk"))
2397 (modules '((guix build utils)))
2398 (snippet
2399 '(begin
2400 (delete-file-recursively "third_party")))))
2401 (arguments
2402 (list
2403 #:tests? #f ;no test target
2404 #:configure-flags
2405 #~(list "-DCMAKE_BUILD_TYPE=Release"
2406 "-DBUILD_DOCS=ON"
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.
2411 "-DCOMPILE_QML=ON")
2412 #:phases
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")
2427 (string-append
2428 ;; Dynamic libraries
2429 "httplib" "\n" "blurhash" "\n"
2430 ;; Static library
2431 libSingleApplication.a))))))
2432 (add-after 'unpack 'fix-determinism
2433 (lambda _
2434 ;; Make Qt deterministic.
2435 (setenv "QT_RCC_SOURCE_DATE_OVERRIDE" "1")))
2436 (add-after 'install 'wrap-program
2437 (lambda _
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)
2442 (inputs
2443 (list boost
2444 blurhash
2445 cpp-httplib
2446 cmark
2447 coeurl
2448 curl
2449 gst-plugins-base
2450 gst-plugins-bad ; sdp & webrtc for voip
2451 gst-plugins-good ; rtpmanager for voip
2452 json-modern-cxx
2453 libevent
2454 libnice ; for voip
2455 libolm
2456 lmdb
2457 lmdbxx
2458 mtxclient
2459 openssl
2460 qtbase-5
2461 qtdeclarative-5
2462 qtkeychain
2463 qtgraphicaleffects
2464 qtmultimedia-5
2465 qtquickcontrols2-5
2466 qtsvg-5
2467 spdlog
2468 single-application-qt5
2469 xcb-util-wm
2470 zlib))
2471 (native-inputs
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
2477 client.
2478
2479 Many matrix features are supported, including user registration, rooms, typing
2480 notification, emojis, E2E encryption, and voip calls.")
2481 (license license:gpl3+)))
2482
2483 (define-public quaternion
2484 (package
2485 (name "quaternion")
2486 (version "0.0.95.1")
2487 (outputs '("out" "debug"))
2488 (source
2489 (origin
2490 (method git-fetch)
2491 (uri (git-reference
2492 (url "https://github.com/quotient-im/Quaternion")
2493 (commit version)))
2494 (file-name (git-file-name name version))
2495 (sha256
2496 (base32 "10mzcr4rpyq5bl3h8wzxxlk8rdz7slhiq863xs77bmsq2pzf6lp8"))))
2497 (build-system qt-build-system)
2498 (inputs
2499 (list libqmatrixclient
2500 qtbase-5
2501 qtdeclarative-5
2502 qtgraphicaleffects
2503 qtmultimedia-5
2504 qtquickcontrols-5
2505 qtquickcontrols2-5
2506 qtsvg-5
2507 qttools-5
2508 xdg-utils))
2509 (arguments
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
2519
2520 (define-public hangups
2521 (package
2522 (name "hangups")
2523 (version "0.4.18")
2524 (source
2525 (origin
2526 (method url-fetch)
2527 (uri (pypi-uri "hangups" version))
2528 (sha256
2529 (base32 "12mq22lygh6vz2h5dpvyjk18hx3jphb4kkavqsy298c7hw60hn7l"))))
2530 (build-system python-build-system)
2531 (arguments
2532 `(#:phases
2533 (modify-phases %standard-phases
2534 (add-before 'build 'relax-dependencies
2535 ;; Relax overly strict package version specifications.
2536 (lambda _
2537 (substitute* "setup.py"
2538 (("==") ">=")
2539 ((",<.*'") "'"))))
2540 (replace 'check
2541 (lambda* (#:key tests? #:allow-other-keys)
2542 (when tests?
2543 (invoke "pytest" "hangups")))))))
2544 (propagated-inputs
2545 (list python-aiohttp
2546 python-appdirs
2547 python-async-timeout
2548 python-configargparse
2549 python-mechanicalsoup
2550 python-protobuf
2551 python-readlike
2552 python-reparser
2553 python-requests
2554 python-urwid))
2555 (native-inputs
2556 (list python-httpretty python-pytest))
2557 (home-page "https://hangups.readthedocs.io/")
2558 (synopsis "Instant messaging client for Google Hangouts")
2559 (description
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.
2562
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)))
2567
2568 (define-public telegram-purple
2569 (package
2570 (name "telegram-purple")
2571 (version "1.4.7")
2572 (home-page "https://github.com/majn/telegram-purple")
2573 (source (origin
2574 (method git-fetch)
2575 (uri (git-reference
2576 (url home-page)
2577 (commit (string-append "v" version))
2578 (recursive? #t)))
2579 (sha256
2580 (base32
2581 "14h8lvj0kjvy1b5i84ha2w9rl3akxjwwvsp5j4dcxwfghrkzqgf2"))
2582 (modules '((guix build utils)))
2583 (snippet
2584 '(begin
2585 (substitute* "Makefile.in"
2586 ;; By default these two directories point to Pidgin's own
2587 ;; prefix.
2588 (("^PLUGIN_DIR_PURPLE=.*")
2589 (string-append
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")
2594
2595 ;; Honor sysconfdir instead of trying to write to /etc.
2596 (("DESTDIR\\)/etc/telegram-purple")
2597 "DESTDIR)@sysconfdir@/telegram-purple"))
2598 #t))
2599 (patches (search-patches "telegram-purple-adjust-test.patch"))
2600 (file-name (git-file-name name version))))
2601 (build-system gnu-build-system)
2602 (native-inputs
2603 `(("pkg-config" ,pkg-config)
2604 ("gettext" ,gettext-minimal)
2605 ("which" ,which)))
2606 (inputs
2607 (list pidgin
2608 libgcrypt
2609 libwebp
2610 glib
2611 gtk+-2
2612 zlib))
2613 (arguments
2614 `(#:phases
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
2621 (lambda _
2622 (with-output-to-file "./commit.h"
2623 (lambda ()
2624 (display
2625 (string-append "//generated by guix, use version instead of "
2626 "commit\n"
2627 "#ifndef GIT_COMMIT\n"
2628 "# define GIT_COMMIT \"v"
2629 ,version "\"\n"
2630 "#endif\n"))))
2631 #t))
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.
2635 (lambda _
2636 (let ((bash (which "bash")))
2637 (setenv "SHELL" bash)
2638 (setenv "CONFIG_SHELL" bash)
2639 #t))))))
2640 (synopsis "Telegram messaging support for Pidgin")
2641 (description
2642 "Telegram-purple is a plugin for Libpurple, the communication library
2643 used by the Pidgin instant messaging client, that adds support for the
2644 Telegram messenger.
2645
2646 This package is on ``life support'' until @code{tdlib-purple} is a full
2647 replacement.")
2648
2649 ;; Code under tgl/ (the Telegram library) is LGPLv2.1+, but the plugin
2650 ;; itself is GPLv2+.
2651 (license license:gpl2+)))
2652
2653 (define-public tdlib
2654 (package
2655 (name "tdlib")
2656 (version "1.8.4")
2657 (source
2658 (origin
2659 (method git-fetch)
2660 (uri (git-reference
2661 (url "https://github.com/tdlib/td")
2662 (commit "7eabd8ca60de025e45e99d4e5edd39f4ebd9467e")))
2663 (sha256
2664 (base32 "1chs0ibghjj275v9arsn3k68ppblpm7ysqk0za9kya5vdnldlld5"))
2665 (file-name (git-file-name name version))))
2666 (build-system cmake-build-system)
2667 (arguments
2668 (list
2669 #:build-type "Release"
2670 #:phases
2671 #~(modify-phases %standard-phases
2672 (add-after 'unpack 'remove-failing-tests
2673 (lambda _
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") "")))))))
2680 (native-inputs
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)))
2689
2690 (define-public tdlib-1.8.0
2691 (package
2692 (inherit tdlib)
2693 (name "tdlib-1.8.0")
2694 (version "1.8.0")
2695 (source (origin
2696 (method git-fetch)
2697 (uri (git-reference
2698 (url "https://github.com/tdlib/td")
2699 (commit (string-append "v" version))))
2700 (sha256
2701 (base32
2702 "19psqpyh9a2kzfdhgqkirpif4x8pzy89phvi59dq155y30a3661q"))))))
2703
2704 (define-public purple-mm-sms
2705 (package
2706 (name "purple-mm-sms")
2707 (version "0.1.4")
2708 (source (origin
2709 (method git-fetch)
2710 (uri (git-reference
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))
2714 (sha256
2715 (base32
2716 "1daf7zl8bhhm1szkgxflpqql69f2w9i9nlgf1n4p1nynxifz1bim"))))
2717 (build-system gnu-build-system)
2718 (arguments
2719 `(#:make-flags
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
2726 #:phases
2727 (modify-phases %standard-phases
2728 (delete 'configure))))
2729 (native-inputs
2730 `(("glib:bin" ,glib "bin")
2731 ("pkg-config" ,pkg-config)))
2732 (inputs
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+)))
2738
2739 (define-public purple-lurch
2740 (package
2741 (name "purple-lurch")
2742 (version "0.7.0")
2743 (source
2744 (origin
2745 (method git-fetch)
2746 (uri (git-reference (url "https://github.com/gkdr/lurch")
2747 (commit (string-append "v" version))))
2748 (modules '((guix build utils)))
2749 (snippet
2750 `(begin
2751 ;; Submodules
2752 (delete-file-recursively "lib")))
2753 (file-name
2754 (git-file-name name version))
2755 (sha256
2756 (base32 "1ipd9gwh04wbqv6c10yxi02lc2yjsr02hwjycgxhl4r9x8b33psd"))))
2757 (build-system cmake-build-system)
2758 (arguments
2759 `(#:phases (modify-phases %standard-phases
2760 (replace 'configure
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))
2770 (inputs (list axc
2771 glib
2772 libgcrypt
2773 libomemo
2774 libsignal-protocol-c
2775 libxml2
2776 minixml
2777 pidgin
2778 sqlite))
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
2786 asynchronicity.")
2787 (home-page "https://github.com/gkdr/lurch")
2788 (license license:gpl3+)))
2789
2790 (define-public libphonenumber
2791 (package
2792 (name "libphonenumber")
2793 (version "8.11.3")
2794 (source (origin
2795 (method git-fetch)
2796 (uri (git-reference
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"))
2802 (sha256
2803 (base32
2804 "06y3mh1d1mks6d0ynxp3980g712nkf8l5nyljpybsk326b246hg9"))))
2805 (arguments
2806 `(#:test-target "tests"
2807 #:phases
2808 (modify-phases %standard-phases
2809 (add-after 'unpack 'change-directory
2810 (lambda _ (chdir "cpp"))))))
2811 (build-system cmake-build-system)
2812 (native-inputs
2813 (list googletest pkg-config))
2814 (inputs
2815 (list boost protobuf icu4c))
2816 (synopsis "Library for parsing and using phone numbers")
2817 (description
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)))
2822
2823 (define-public chatty
2824 (package
2825 (name "chatty")
2826 (version "0.6.7")
2827 (source (origin
2828 (method git-fetch)
2829 (uri (git-reference
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))
2839 (sha256
2840 (base32
2841 "11q07vjrrjf3k00kk41vm79brpq0qigz7l328br3g0li979kz32v"))))
2842 (build-system meson-build-system)
2843 (arguments
2844 '(#:glib-or-gtk? #t
2845 #:phases
2846 (modify-phases %standard-phases
2847 (add-after 'unpack 'skip-updating-desktop-database
2848 (lambda _
2849 (substitute* "meson.build"
2850 (("meson.add_install_script.*") ""))))
2851 (add-before 'check 'pre-check
2852 (lambda* (#:key tests? #:allow-other-keys)
2853 (when tests?
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")))))))
2859 (native-inputs
2860 (list gettext-minimal
2861 `(,glib "bin")
2862 pkg-config
2863 protobuf
2864 xorg-server-for-tests))
2865 (inputs
2866 (list feedbackd
2867 folks-with-libsoup2
2868 gnome-desktop
2869 gsettings-desktop-schemas
2870 gspell
2871 json-glib
2872 libgcrypt
2873 libgee
2874 libhandy
2875 libolm
2876 libphonenumber
2877 modem-manager
2878 pidgin
2879 purple-mm-sms
2880 sqlite))
2881 (propagated-inputs
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+)))
2888
2889 (define-public mosquitto
2890 (package
2891 (name "mosquitto")
2892 (version "1.6.12")
2893 (source
2894 (origin
2895 (method url-fetch)
2896 (uri (string-append "https://mosquitto.org/files/source/mosquitto-"
2897 version ".tar.gz"))
2898 (sha256
2899 (base32
2900 "1yq7y329baa1ly488rw125c3mvsnsa7kjkik602xv1xpkz8p73al"))))
2901 (build-system cmake-build-system)
2902 (inputs
2903 (list openssl))
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.
2909
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/")
2915 ;; Dual licensed.
2916 (license (list license:epl1.0 license:edl1.0))))
2917
2918 (define-public python-paho-mqtt
2919 (package
2920 (name "python-paho-mqtt")
2921 (version "1.6.1")
2922 (source (origin
2923 (method git-fetch) ;for tests
2924 (uri (git-reference
2925 (url "https://github.com/eclipse/paho.mqtt.python")
2926 (commit (string-append "v" version))))
2927 (file-name (git-file-name name version))
2928 (sha256
2929 (base32
2930 "0679iafabd3kvk4fj4lvcl14zg82yq5pz5rji4z659lm2g2zlwgn"))))
2931 (build-system python-build-system)
2932 (arguments (list #:phases
2933 #~(modify-phases %standard-phases
2934 (replace 'check
2935 (lambda* (#:key tests? #:allow-other-keys)
2936 (when tests?
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
2947
2948 (define-public movim-desktop
2949 (let ((commit "83d583b83629dbd2ec448da9a1ffd81f6c1fb295")
2950 (revision "3"))
2951 (package
2952 (name "movim-desktop")
2953 (version
2954 (git-version "0.14.0" revision commit))
2955 (source
2956 (origin
2957 (method git-fetch)
2958 (uri
2959 (git-reference
2960 (url "https://github.com/movim/movim_desktop")
2961 (commit commit)))
2962 (file-name (git-file-name name version))
2963 (sha256
2964 (base32 "1lsa3k3wx1d2lk0qs0k5jc5bmapnmpzwynprjf2wihh8c8y3iwlz"))))
2965 (build-system qt-build-system)
2966 (arguments
2967 `(#:tests? #f ; No target
2968 #:phases
2969 (modify-phases %standard-phases
2970 (add-after 'unpack 'patch
2971 (lambda* (#:key outputs #:allow-other-keys)
2972 (substitute* `("CMakeLists.txt" "movim.desktop")
2973 (("/usr")
2974 (assoc-ref outputs "out"))
2975 (("\"build")
2976 "\"../build"))
2977 #t)))))
2978 (inputs
2979 (list qtbase-5 qtdeclarative-5 qtwebchannel-5))
2980 (propagated-inputs
2981 (list qtwebengine-5))
2982 (home-page "https://movim.eu/")
2983 (synopsis "Desktop Application for Movim")
2984 (description
2985 "Movim-Desktop is a desktop application, relying on Qt, for the Movim
2986 social and chat platform.")
2987 (license license:gpl3+))))
2988
2989 (define-public psi-plus
2990 (package
2991 (name "psi-plus")
2992 (version "1.5.1484")
2993 (source
2994 (origin
2995 (method git-fetch)
2996 (uri
2997 (git-reference
2998 (url "https://github.com/psi-plus/psi-plus-snapshots")
2999 (commit version)))
3000 (file-name (git-file-name name version))
3001 (modules '((guix build utils)))
3002 (snippet
3003 `(begin
3004 (delete-file-recursively "3rdparty")))
3005 (sha256
3006 (base32 "1jsm39nzzbqkp3zc0xqx7jid6p4q1ra28xad38wjr2l1jb8qjn24"))))
3007 (build-system qt-build-system)
3008 (arguments
3009 `(#:tests? #f ; No target
3010 #:imported-modules
3011 (,@%qt-build-system-modules
3012 (guix build glib-or-gtk-build-system))
3013 #:modules
3014 ((guix build qt-build-system)
3015 ((guix build glib-or-gtk-build-system)
3016 #:prefix glib-or-gtk:)
3017 (guix build utils))
3018 #:configure-flags
3019 (list
3020 "-DBUILD_PSIMEDIA=ON" ; For A/V support
3021 "-DENABLE_PLUGINS=ON"
3022 "-DUSE_HUNSPELL=OFF" ; Use Enchant instead
3023 "-DUSE_ENCHANT=ON"
3024 "-DUSE_CCACHE=OFF") ; Not required
3025 #:phases
3026 (modify-phases %standard-phases
3027 (add-after 'unpack 'patch-source
3028 (lambda _
3029 (substitute* "CMakeLists.txt"
3030 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/http-parser/http_parser.h")
3031 "")
3032 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qhttp/qhttp.pro")
3033 "")
3034 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qite/qite.pro")
3035 "")
3036 (("add_subdirectory\\( 3rdparty \\)")
3037 ""))
3038 (substitute* "src/CMakeLists.txt"
3039 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qite/libqite")
3040 "")
3041 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/http-parser")
3042 "")
3043 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qhttp/src/private")
3044 "")
3045 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qhttp/src")
3046 "")
3047 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty")
3048 "")
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")
3057 (("qite.h")
3058 "qite/qite.h")
3059 (("qiteaudio.h")
3060 "qite/qiteaudio.h")
3061 (("qiteaudiorecorder.h")
3062 "qite/qiteaudiorecorder.h"))
3063 #t))
3064 (add-after 'install 'wrap-env
3065 (lambda* (#:key outputs #:allow-other-keys)
3066 (let ((out (assoc-ref outputs "out")))
3067 (for-each
3068 (lambda (name)
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")))
3072 (wrap-program file
3073 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
3074 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))
3075 '("psi-plus")))
3076 #t))
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)))))
3081 (native-inputs
3082 `(("glib:bin" ,glib "bin")
3083 ("gobject-introspection" ,gobject-introspection)
3084 ("perl" ,perl)
3085 ("pkg-config" ,pkg-config)
3086 ("python" ,python-wrapper)
3087 ("ruby" ,ruby)))
3088 (inputs
3089 `(("blake2" ,libb2)
3090 ("dbus" ,dbus)
3091 ("enchant" ,enchant)
3092 ("glib" ,glib)
3093 ("gstreamer" ,gstreamer)
3094 ("gst-plugins-base" ,gst-plugins-base)
3095 ("http-parser" ,http-parser)
3096 ("libgcrypt" ,libgcrypt)
3097 ("libgpg-error" ,libgpg-error)
3098 ("libidn" ,libidn)
3099 ("libotr" ,libotr)
3100 ("libsignal-protocol-c" ,libsignal-protocol-c)
3101 ("libtidy" ,tidy-html)
3102 ("openssl" ,openssl)
3103 ("qca" ,qca)
3104 ("qhttp" ,qhttp)
3105 ("qite" ,qite)
3106 ("qtbase" ,qtbase-5)
3107 ("qtkeychain" ,qtkeychain)
3108 ("qtmultimedia-5" ,qtmultimedia-5)
3109 ("qtsvg-5" ,qtsvg-5)
3110 ("qtx11extras" ,qtx11extras)
3111 ("usrsctp" ,usrsctp)
3112 ("x11" ,libx11)
3113 ("xext" ,libxext)
3114 ("xcb" ,libxcb)
3115 ("xss" ,libxscrnsaver)
3116 ("zlib" ,zlib)))
3117 (home-page "https://psi-plus.com/")
3118 (synopsis "Qt-based XMPP Client")
3119 (description
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+)))
3123
3124 (define-public python-zulip
3125 (package
3126 (name "python-zulip")
3127 (version "0.7.1")
3128 (source
3129 (origin
3130 ;; There is no source on Pypi.
3131 (method git-fetch)
3132 (uri (git-reference
3133 (url "https://github.com/zulip/python-zulip-api")
3134 (commit version)))
3135 (file-name (git-file-name name version))
3136 (sha256
3137 (base32
3138 "0da1ki1v252avy27j6d7snnc0gyq0xa9fypm3qdmxhw2w79d6q36"))))
3139 (build-system python-build-system)
3140 (arguments
3141 `(#:phases
3142 (modify-phases %standard-phases
3143 (add-after 'unpack 'cd-to-zulip-dir
3144 (lambda _ (chdir "zulip")))
3145 (replace 'check
3146 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3147 (let ((test-zulip "../tools/test-zulip"))
3148 (when tests?
3149 (add-installed-pythonpath inputs outputs)
3150 (patch-shebang test-zulip)
3151 (invoke test-zulip))))))))
3152 (propagated-inputs
3153 (list python-matrix-client python-pyopenssl python-requests
3154 python-six))
3155 (native-inputs
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")
3159 (description
3160 "This package provides Python bindings to Zulip's API.")
3161 (license license:asl2.0)))
3162
3163 (define-public zulip-term
3164 (package
3165 (name "zulip-term")
3166 (version "0.5.2")
3167 (source
3168 (origin
3169 ;; Pypi package doesn't ship tests.
3170 (method git-fetch)
3171 (uri (git-reference
3172 (url "https://github.com/zulip/zulip-terminal")
3173 (commit version)))
3174 (file-name (git-file-name name version))
3175 (sha256
3176 (base32
3177 "1xhhy3v4wck74a83avil0rnmsi2grrh03cww19n5mv80p2q1cjmf"))
3178 (modules '((guix build utils)))
3179 (snippet
3180 '(begin
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
3185 #t))))
3186 (build-system python-build-system)
3187 (arguments
3188 '(#:phases
3189 (modify-phases %standard-phases
3190 (replace 'check
3191 (lambda* (#:key tests? #:allow-other-keys)
3192 (when tests?
3193 ;; Delete failing tests.
3194 (delete-file "tests/cli/test_run.py")
3195 (invoke "pytest"))
3196 #t)))))
3197 (inputs
3198 (list python-beautifulsoup4
3199 python-lxml
3200 python-mypy-extensions
3201 python-urwid
3202 python-urwid-readline
3203 python-zulip))
3204 (native-inputs
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)))
3211
3212 (define-public matterbridge
3213 (package
3214 (name "matterbridge")
3215 (version "1.25.2")
3216 (source (origin
3217 (method git-fetch)
3218 (uri (git-reference
3219 (url "https://github.com/42wim/matterbridge")
3220 (commit (string-append "v" version))))
3221 (file-name (git-file-name name version))
3222 (sha256
3223 (base32
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)
3231 (arguments
3232 `(#:phases (modify-phases %standard-phases
3233 (delete 'configure)
3234 (replace 'build
3235 (lambda* (#:key outputs #:allow-other-keys)
3236 (setenv "GOCACHE"
3237 (string-append (getcwd) "/go-build"))
3238 (setenv "GOBIN"
3239 (string-append (assoc-ref outputs "out") "/bin"))
3240 (invoke "go" "build" "-v" "-x")))
3241 (replace 'check
3242 (lambda* (#:key outputs tests? #:allow-other-keys)
3243 (when tests?
3244 (setenv "GOCACHE"
3245 (string-append (getcwd) "/go-build"))
3246 (setenv "GOBIN"
3247 (string-append (assoc-ref outputs "out")
3248 "/bin"))
3249 (invoke "go" "test" "-v" "-x"))))
3250 (replace 'install
3251 (lambda* (#:key outputs #:allow-other-keys)
3252 (setenv "GOCACHE"
3253 (string-append (getcwd) "/go-build"))
3254 (setenv "GOBIN"
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")
3259 (description
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)))
3267
3268 (define-public jj
3269 (package
3270 (name "jj")
3271 (version "2")
3272 (source (origin
3273 (method url-fetch)
3274 (uri (string-append "https://23.fi/jj/jj-" version ".tar.gz"))
3275 (sha256
3276 (base32
3277 "02xz2ci93bccvil5iff804mh3zr5iqkf6zx5mxgraz17xg0azlgh"))))
3278 (build-system gnu-build-system)
3279 (arguments
3280 (list #:tests? #f ;There are no tests.
3281 #:make-flags
3282 #~(list (string-append "CC=" #$(cc-for-target))
3283 (string-append "PREFIX=" #$output))
3284 #:phases
3285 #~(modify-phases %standard-phases
3286 (delete 'configure)
3287 (replace 'install
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")
3296 (description
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
3300 notifications.")
3301 (license license:expat)))
3302
3303 (define-public pounce
3304 (package
3305 (name "pounce")
3306 (version "3.0")
3307 (source
3308 (origin
3309 (method url-fetch)
3310 (uri (string-append "https://git.causal.agency/pounce/snapshot/pounce-"
3311 version ".tar.gz"))
3312 (sha256
3313 (base32 "1w4x34bspkqvk9p7bfj0zmvmbzvxb7lxrrr3g6lrfdj9f3qzfxpp"))))
3314 (build-system gnu-build-system)
3315 (arguments
3316 `(#:tests? #f ;there are no tests
3317 #:make-flags
3318 (list
3319 (string-append "CC=" ,(cc-for-target))
3320 (string-append "PREFIX=" %output))))
3321 (native-inputs
3322 (list pkg-config universal-ctags))
3323 (inputs
3324 (list libressl))
3325 (home-page "https://code.causal.agency/june/pounce")
3326 (synopsis "Simple multi-client TLS-only IRC bouncer")
3327 (description
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+)))
3332
3333 (define-public weechat-matrix
3334 (package
3335 (name "weechat-matrix")
3336 (version "0.3.0")
3337 (source
3338 (origin
3339 (method git-fetch)
3340 (uri (git-reference
3341 (url "https://github.com/poljar/weechat-matrix")
3342 (commit version)))
3343 (file-name (git-file-name name version))
3344 (sha256
3345 (base32
3346 "1iv55n4k05139f7jzkhczgw4qp6qwilrvfsy3c6v2m1kxffj12d3"))))
3347 (build-system python-build-system)
3348 (arguments
3349 `(#:phases
3350 (modify-phases %standard-phases
3351 (delete 'build)
3352 (replace 'install
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
3357 ;; weechat_matrix.
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)
3367 "/weechat_matrix"))
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
3374 all
3375 "import sys\n"
3376 (map (lambda (path)
3377 (string-append "sys.path.append('" path "')\n"))
3378 (string-split (getenv "GUIX_PYTHONPATH") #\:)))))
3379 ;; Install script.
3380 (mkdir-p weechat-python)
3381 (copy-file "main.py"
3382 (string-append weechat-python "/matrix.py")))))
3383 (replace 'check
3384 (lambda* (#:key tests? #:allow-other-keys)
3385 (when tests?
3386 (invoke "pytest")))))))
3387 (inputs
3388 (list python-matrix-nio python-pygments python-pyopenssl
3389 python-webcolors))
3390 (native-inputs
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)))
3397
3398 (define-public weechat-wee-slack
3399 (package
3400 (name "weechat-wee-slack")
3401 (version "2.9.0")
3402 (source
3403 (origin
3404 (method git-fetch)
3405 (uri (git-reference
3406 (url "https://github.com/wee-slack/wee-slack")
3407 (commit (string-append "v" version))))
3408 (file-name (git-file-name name version))
3409 (sha256
3410 (base32
3411 "01h9n6a39sgpczvjywvxb5z5vz3jb3h2xx2vspjkkz06gzwniijq"))))
3412 (build-system python-build-system)
3413 (arguments
3414 `(#:phases
3415 (modify-phases %standard-phases
3416 (delete 'build)
3417 (replace 'install
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
3423 all
3424 (map (lambda (path)
3425 (string-append "sys.path.append('" path "')\n"))
3426 (string-split (getenv "GUIX_PYTHONPATH") #\:)))))
3427 ;; Install script.
3428 (install-file "wee_slack.py"
3429 (string-append (assoc-ref outputs "out")
3430 "/share/weechat/python"))))
3431 (replace 'check
3432 (lambda* (#:key tests? #:allow-other-keys)
3433 (when tests?
3434 (invoke "pytest")))))))
3435 (inputs
3436 (list python-websocket-client))
3437 (native-inputs
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)))
3447
3448 (define-public python-librecaptcha
3449 (package
3450 (name "python-librecaptcha")
3451 (version "0.7.3")
3452 (source (origin
3453 (method git-fetch)
3454 (uri (git-reference
3455 (url "https://github.com/taylordotfish/librecaptcha")
3456 (commit version)))
3457 (file-name (string-append name "-" version "-checkout"))
3458 (sha256
3459 (base32
3460 "0r35ws6vdf31j01kpacvpjplddm254r0cgy0npmhgnfxd5kpjf3s"))))
3461 (build-system python-build-system)
3462 (propagated-inputs
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+)))
3468
3469 (define-public python-harmony
3470 (package
3471 (name "python-harmony")
3472 (version "0.7.1")
3473 (source (origin
3474 (method git-fetch)
3475 (uri (git-reference
3476 (url "https://github.com/taylordotfish/harmony.git")
3477 (commit version)))
3478 (file-name (string-append name "-" version "-checkout"))
3479 (sha256
3480 (base32
3481 "1bm9xcnzpnpj6rlhbrnl2abwclzl7ivgh1vb5644y9mnhcs489js"))))
3482 (build-system python-build-system)
3483 (native-inputs
3484 (list python-tox))
3485 (inputs
3486 (list python-librecaptcha python-keyring python-requests))
3487 (synopsis "Discord account management")
3488 (description "This package provides account management tools for
3489 Discord.")
3490 (home-page "https://github.com/taylordotfish/harmony")
3491 (license license:gpl3+)))
3492
3493 (define-public pn
3494 (package
3495 (name "pn")
3496 (version "0.9.0")
3497 (home-page "https://github.com/Orange-OpenSource/pn")
3498 (source (origin
3499 (method git-fetch)
3500 (uri (git-reference
3501 (url home-page)
3502 (commit (string-append "v" version))))
3503 (file-name (git-file-name name version))
3504 (sha256
3505 (base32
3506 "1lvzb0yixj7wmmqzsri20k9nn3gf06j0yjvmg2mi1zihywq7s4dx"))))
3507 (build-system cmake-build-system)
3508 (arguments
3509 (list #:tests? #f ;no tests
3510 #:phases #~(modify-phases %standard-phases
3511 (add-after 'unpack 'set-lib-destination
3512 (lambda _
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")
3518 (description
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)))
3523
3524 ;;; messaging.scm ends here