cc2525aa576f92e895bfd8432bae27149168ccef
[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 Marius Bakke <mbakke@fastmail.com>
24 ;;; Copyright © 2020 Reza Alizadeh Majd <r.majd@pantherx.org>
25 ;;; Copyright © 2020 Jonathan Brielmaier <jonathan.brielmaier@web.de>
26 ;;; Copyright © 2020 Mason Hock <chaosmonk@riseup.net>
27 ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
28 ;;; Copyright © 2020, 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 ;;;
39 ;;; This file is part of GNU Guix.
40 ;;;
41 ;;; GNU Guix is free software; you can redistribute it and/or modify it
42 ;;; under the terms of the GNU General Public License as published by
43 ;;; the Free Software Foundation; either version 3 of the License, or (at
44 ;;; your option) any later version.
45 ;;;
46 ;;; GNU Guix is distributed in the hope that it will be useful, but
47 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
48 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
49 ;;; GNU General Public License for more details.
50 ;;;
51 ;;; You should have received a copy of the GNU General Public License
52 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
53
54 (define-module (gnu packages messaging)
55 #:use-module (gnu packages)
56 #:use-module (gnu packages admin)
57 #:use-module (gnu packages aidc)
58 #:use-module (gnu packages aspell)
59 #:use-module (gnu packages audio)
60 #:use-module (gnu packages autotools)
61 #:use-module (gnu packages avahi)
62 #:use-module (gnu packages base)
63 #:use-module (gnu packages bash)
64 #:use-module (gnu packages bison)
65 #:use-module (gnu packages boost)
66 #:use-module (gnu packages check)
67 #:use-module (gnu packages code)
68 #:use-module (gnu packages compression)
69 #:use-module (gnu packages cpp)
70 #:use-module (gnu packages crypto)
71 #:use-module (gnu packages curl)
72 #:use-module (gnu packages cyrus-sasl)
73 #:use-module (gnu packages databases)
74 #:use-module (gnu packages docbook)
75 #:use-module (gnu packages documentation)
76 #:use-module (gnu packages enchant)
77 #:use-module (gnu packages fontutils)
78 #:use-module (gnu packages freedesktop)
79 #:use-module (gnu packages gettext)
80 #:use-module (gnu packages glib)
81 #:use-module (gnu packages gnome)
82 #:use-module (gnu packages gnupg)
83 #:use-module (gnu packages golang)
84 #:use-module (gnu packages gperf)
85 #:use-module (gnu packages graphviz)
86 #:use-module (gnu packages gstreamer)
87 #:use-module (gnu packages gtk)
88 #:use-module (gnu packages guile)
89 #:use-module (gnu packages icu4c)
90 #:use-module (gnu packages image)
91 #:use-module (gnu packages kde)
92 #:use-module (gnu packages kde-frameworks)
93 #:use-module (gnu packages kerberos)
94 #:use-module (gnu packages less)
95 #:use-module (gnu packages libcanberra)
96 #:use-module (gnu packages libevent)
97 #:use-module (gnu packages libffi)
98 #:use-module (gnu packages libidn)
99 #:use-module (gnu packages libreoffice)
100 #:use-module (gnu packages linux)
101 #:use-module (gnu packages logging)
102 #:use-module (gnu packages lua)
103 #:use-module (gnu packages man)
104 #:use-module (gnu packages markup)
105 #:use-module (gnu packages matrix)
106 #:use-module (gnu packages mono)
107 #:use-module (gnu packages mpd)
108 #:use-module (gnu packages ncurses)
109 #:use-module (gnu packages networking)
110 #:use-module (gnu packages nss)
111 #:use-module (gnu packages pcre)
112 #:use-module (gnu packages perl)
113 #:use-module (gnu packages photo)
114 #:use-module (gnu packages php)
115 #:use-module (gnu packages pkg-config)
116 #:use-module (gnu packages protobuf)
117 #:use-module (gnu packages python)
118 #:use-module (gnu packages python-check)
119 #:use-module (gnu packages python-crypto)
120 #:use-module (gnu packages python-web)
121 #:use-module (gnu packages python-xyz)
122 #:use-module (gnu packages qt)
123 #:use-module (gnu packages readline)
124 #:use-module (gnu packages ruby)
125 #:use-module (gnu packages sphinx)
126 #:use-module (gnu packages sqlite)
127 #:use-module (gnu packages tcl)
128 #:use-module (gnu packages telephony)
129 #:use-module (gnu packages texinfo)
130 #:use-module (gnu packages textutils)
131 #:use-module (gnu packages tls)
132 #:use-module (gnu packages video)
133 #:use-module (gnu packages web)
134 #:use-module (gnu packages xdisorg)
135 #:use-module (gnu packages xiph)
136 #:use-module (gnu packages xml)
137 #:use-module (gnu packages xorg)
138 #:use-module (guix build-system cmake)
139 #:use-module (guix build-system go)
140 #:use-module (guix build-system glib-or-gtk)
141 #:use-module (guix build-system gnu)
142 #:use-module (guix build-system meson)
143 #:use-module (guix build-system perl)
144 #:use-module (guix build-system python)
145 #:use-module (guix build-system qt)
146 #:use-module (guix build-system trivial)
147 #:use-module (guix download)
148 #:use-module (guix gexp)
149 #:use-module (guix git-download)
150 #:use-module (guix hg-download)
151 #:use-module ((guix licenses) #:prefix license:)
152 #:use-module (guix packages)
153 #:use-module (guix utils))
154
155 (define-public omemo-wget
156 (package
157 (name "omemo-wget")
158 (version "0.3.0")
159 (source
160 (origin
161 (method git-fetch)
162 (uri
163 (git-reference
164 (url "https://github.com/roobre/omemo-wget")
165 (commit (string-append "v" version))))
166 (file-name (git-file-name name version))
167 (sha256
168 (base32 "0s3vfaicw5xbjl9yiyr4ckrzhzqbvfh1w2ih1igavlfpgw4v7kva"))))
169 (build-system go-build-system)
170 (arguments
171 `(#:import-path "github.com/roobre/omemo-wget"
172 #:phases
173 (modify-phases %standard-phases
174 (add-after 'unpack 'patch
175 (lambda* (#:key inputs #:allow-other-keys)
176 (let* ((xdg-utils (assoc-ref inputs "xdg-utils"))
177 (xdg-open (string-append xdg-utils "/bin/xdg-open")))
178 (substitute* (find-files "." "\\.go$")
179 ;; Correct the import path of 'aesgcm' package.
180 (("roob\\.re/omemo-wget/aesgcm")
181 "github.com/roobre/omemo-wget/aesgcm")
182 ;; Use absolute path of 'xdg-open' program.
183 (("xdg-open") xdg-open))))))))
184 (inputs
185 (list go-github-com-pkg-errors xdg-utils))
186 (home-page "https://roob.re/omemo-wget")
187 (synopsis "Program to download and decrypt @code{aesgcm://} URLs")
188 (description "OMEMO-wget is a tool to handle cryptographic URLs, generated
189 by @acronym{OMEMO, OMEMO Multi-End Message and Object Encryption}, during
190 XMPP-based sessions.")
191 (license license:lgpl3+)))
192
193 (define-public psi
194 (package
195 (name "psi")
196 (version "1.5")
197 (source
198 (origin
199 (method url-fetch)
200 (uri
201 (string-append "mirror://sourceforge/psi/Psi/"
202 version "/psi-" version ".tar.xz"))
203 (modules '((guix build utils)))
204 (snippet
205 `(begin
206 (delete-file-recursively "3rdparty")))
207 (sha256
208 (base32 "1dxmm1d1zr0pfs51lba732ipm6hm2357jlfb934lvarzsh7karri"))))
209 (build-system qt-build-system)
210 (arguments
211 `(#:tests? #f ; No target
212 #:configure-flags
213 (list
214 "-DUSE_ENCHANT=ON"
215 "-DUSE_CCACHE=OFF")
216 #:phases
217 (modify-phases %standard-phases
218 (add-after 'unpack 'patch-cmake
219 (lambda _
220 (substitute* "cmake/modules/FindHunspell.cmake"
221 (("hunspell-1.6")
222 "hunspell-1.7"))
223 #t)))))
224 (native-inputs
225 `(("pkg-config" ,pkg-config)
226 ("python" ,python-wrapper)
227 ("ruby" ,ruby)))
228 (inputs
229 `(("aspell" ,aspell)
230 ("enchant" ,enchant-1.6)
231 ("hunspell" ,hunspell)
232 ("libidn" ,libidn)
233 ("qca" ,qca)
234 ("qtbase" ,qtbase-5)
235 ("qtmultimedia-5" ,qtmultimedia-5)
236 ("qtsvg-5" ,qtsvg-5)
237 ("qtwebkit" ,qtwebkit)
238 ("qtx11extras" ,qtx11extras)
239 ("x11" ,libx11)
240 ("xext" ,libxext)
241 ("xcb" ,libxcb)
242 ("zlib" ,zlib)))
243 (synopsis "Qt-based XMPP Client")
244 (description "Psi is a capable XMPP client aimed at experienced users.
245 Its design goals are simplicity and stability.")
246 (home-page "https://psi-im.org")
247 (license license:gpl2+)))
248
249 (define-public libgnt
250 (package
251 (name "libgnt")
252 (version "2.14.3")
253 (source
254 (origin
255 (method url-fetch)
256 (uri
257 (string-append "mirror://sourceforge/pidgin/libgnt/"
258 version "/libgnt-" version ".tar.xz"))
259 (sha256
260 (base32 "08v14fjcx2wx6c573wllq015l6zc8qkpz8rrl6qhp7crf9zlbxap"))))
261 (build-system meson-build-system)
262 (outputs '("out" "doc"))
263 (arguments
264 `(#:glib-or-gtk? #t ; To wrap binaries and/or compile schemas
265 #:phases
266 (modify-phases %standard-phases
267 (add-after 'unpack 'patch-ncurses-path
268 (lambda* (#:key inputs #:allow-other-keys)
269 (substitute* "meson.build"
270 (("'/usr'")
271 (string-append "'"
272 (assoc-ref inputs "ncurses")
273 "'")))))
274 (add-before 'configure 'patch-docbook-xml
275 (lambda* (#:key inputs #:allow-other-keys)
276 (with-directory-excursion "doc"
277 (substitute* "libgnt-docs.xml"
278 (("http://www.oasis-open.org/docbook/xml/4.1.2/")
279 (string-append (assoc-ref inputs "docbook-xml")
280 "/xml/dtd/docbook/"))))))
281 (add-after 'install 'move-doc
282 (lambda* (#:key outputs #:allow-other-keys)
283 (let* ((out (assoc-ref outputs "out"))
284 (doc (assoc-ref outputs "doc")))
285 (mkdir-p (string-append doc "/share"))
286 (rename-file
287 (string-append out "/share/gtk-doc")
288 (string-append doc "/share/gtk-doc"))))))))
289 (native-inputs
290 `(("docbook-xml" ,docbook-xml-4.1.2)
291 ("glib:bin" ,glib "bin")
292 ("gobject-introspection" ,gobject-introspection)
293 ("gtk-doc" ,gtk-doc)
294 ("pkg-config" ,pkg-config)))
295 (inputs
296 (list ncurses))
297 (propagated-inputs
298 `(("glib" ,glib)
299 ("libxml" ,libxml2)
300 ("python" ,python-2)))
301 (synopsis "GLib Ncurses Toolkit")
302 (description "GNT is an ncurses toolkit for creating text-mode graphical
303 user interfaces in a fast and easy way. It is based on GLib and ncurses.")
304 (home-page "https://keep.imfreedom.org/libgnt/libgnt")
305 (license license:gpl2+)))
306
307 (define-public libgadu
308 (package
309 (name "libgadu")
310 (version "1.12.2")
311 (source
312 (origin
313 (method git-fetch)
314 (uri
315 (git-reference
316 (url "https://github.com/wojtekka/libgadu.git")
317 (commit version)))
318 (file-name
319 (git-file-name name version))
320 (sha256
321 (base32 "1s16cripy5w9k12534qb012iwc5m9qcjyrywgsziyn3kl3i0aa8h"))))
322 (build-system gnu-build-system)
323 (arguments
324 ;; 'test/manual/userconfig.h' contains definitions in lieu of
325 ;; declarations, hence '-fcommon'.
326 `(#:configure-flags
327 (list "--disable-static" "CFLAGS=-O2 -g -fcommon")
328 #:phases
329 (modify-phases %standard-phases
330 (add-after 'unpack 'patch-shebangs
331 (lambda* (#:key inputs #:allow-other-keys)
332 (substitute* "protobufgen.sh"
333 (("/bin/sh")
334 (search-input-file inputs "/bin/sh"))))))))
335 (native-inputs
336 (list autoconf
337 automake
338 bash
339 doxygen
340 libtool
341 perl
342 pkg-config))
343 (inputs
344 `(("curl" ,curl)
345 ("expat" ,expat)
346 ("libprotobuf-c" ,protobuf-c)
347 ("libxml" ,libxml2)
348 ("openssl" ,openssl)
349 ("zlib" ,zlib)))
350 (propagated-inputs
351 (list gnutls))
352 (synopsis "Library for handling the protocol of Gadu-Gadu")
353 (description "LibGadu is library for handling Gadu-Gadu instant messenger
354 protocol. The library is written in C and aims to be operating system and
355 environment independent.")
356 (home-page "https://libgadu.net/index.en.html")
357 (license license:lgpl2.1+)))
358
359 (define-public silc-toolkit
360 (package
361 (name "silc-toolkit")
362 (version "1.1.12")
363 (source
364 (origin
365 (method url-fetch)
366 (uri
367 (string-append "mirror://sourceforge/silc/silc/toolkit/sources/silc-toolkit-"
368 version ".tar.gz"))
369 (sha256
370 (base32 "0mnvf9n7qriadg0p7a8qmvcayhnns2g9fhmcymavlm0v8xrky33y"))))
371 (build-system gnu-build-system)
372 (arguments
373 `(#:configure-flags
374 (list
375 "--disable-static"
376 "--enable-ipv6"
377 "--enable-stack-trace")
378 #:phases
379 (modify-phases %standard-phases
380 (add-after 'unpack 'trigger-bootstrap
381 (lambda _
382 (delete-file "configure")
383 (delete-file "Makefile.in")
384 #t)))))
385 (native-inputs
386 (list autoconf automake libtool perl pkg-config))
387 (synopsis "SILC ToolKit")
388 (description "SILC (Secure Internet Live Conferencing) is a modern and secure
389 conferencing protocol. It provides all the common conferencing services like
390 private messages, instant messages, channels and groups, and video and audio
391 conferencing.")
392 (home-page "https://silc.github.io/info")
393 (license
394 ;; Dual-licensed
395 (list
396 license:gpl2+
397 license:bsd-2))))
398
399 (define-public qxmpp
400 (package
401 (name "qxmpp")
402 (version "1.4.0")
403 (source
404 (origin
405 (method git-fetch)
406 (uri (git-reference
407 (url "https://github.com/qxmpp-project/qxmpp")
408 (commit (string-append "v" version))))
409 (file-name (git-file-name name version))
410 (sha256
411 (base32 "1knpq1jkwk0lxdwczbmzf7qrjvlxba9yr40nbq9s5nqkcx6q1c3i"))))
412 (build-system cmake-build-system)
413 (arguments
414 `(#:configure-flags (list "-DBUILD_EXAMPLES=false"
415 "-DWITH_GSTREAMER=true")
416 #:phases
417 (modify-phases %standard-phases
418 (replace 'check
419 (lambda* (#:key tests? #:allow-other-keys)
420 (when tests?
421 (invoke "ctest" "-E"
422 (string-join ;; These tests use the network.
423 (list "tst_qxmppiceconnection"
424 "tst_qxmppcallmanager"
425 "tst_qxmpptransfermanager")
426 "|"))))))))
427 (native-inputs
428 (list pkg-config))
429 (inputs
430 (list gstreamer qtbase-5))
431 (home-page "https://github.com/qxmpp-project/qxmpp")
432 (synopsis "XMPP client and server library")
433 (description
434 "QXmpp is a XMPP client and server library written in C++ and uses the Qt
435 framework. It builds XMPP clients complying with the XMPP Compliance Suites
436 2021 for IM and Advanced Mobile.")
437 (license license:lgpl2.1+)))
438
439 (define-public meanwhile
440 (package
441 (name "meanwhile")
442 (version "1.1.1")
443 (source
444 (origin
445 (method git-fetch)
446 (uri
447 (git-reference
448 (url "https://github.com/obriencj/meanwhile.git")
449 (commit
450 (string-append "v" version))))
451 (file-name
452 (git-file-name name version))
453 (sha256
454 (base32 "1k1gvmx1ikm0y1mdmm495rzkb00pl170jfaf2dy0n5aiiknkk7q3"))))
455 (build-system glib-or-gtk-build-system)
456 (native-inputs
457 (list autoconf automake doxygen libtool pkg-config))
458 (propagated-inputs
459 (list glib))
460 (synopsis "Library for Lotus Instant Messaging")
461 (description "Meanwhile is a library for connecting to a LIM (Lotus Instant
462 Messaging, formerly Lotus Sametime, formerly VPBuddy) community. It uses a
463 protocol based in part off of the IMPP draft(*1), and in part off of traces of
464 TCP sessions from existing clients.")
465 (home-page "https://github.com/obriencj/meanwhile")
466 (license license:lgpl3)))
467
468 (define-public poezio
469 (package
470 (name "poezio")
471 (version "0.13.2")
472 (source
473 (origin
474 (method git-fetch)
475 (uri
476 (git-reference
477 (url "https://lab.louiz.org/poezio/poezio.git")
478 (commit
479 (string-append "v" version))))
480 (file-name
481 (git-file-name name version))
482 (sha256
483 (base32 "0p92k8ssjsgavyfv1fd5cgzyw87dmdd84vaz7zvfsf5crvpr1mkf"))))
484 (build-system python-build-system)
485 (arguments
486 (list #:phases
487 #~(modify-phases %standard-phases
488 (add-after 'unpack 'patch
489 (lambda _
490 (substitute* "setup.py"
491 (("'CC', 'cc'")
492 "'CC', 'gcc'")))))))
493 (native-inputs
494 (list pkg-config python-setuptools python-sphinx))
495 (inputs
496 (list python-mpd2
497 python-potr
498 python-pyasn1
499 python-pyasn1-modules
500 python-pygments
501 python-pyinotify
502 python-qrcode
503 python-slixmpp))
504 (synopsis "Console Jabber/XMPP Client")
505 (description "Poezio is a free console XMPP client (the protocol on which
506 the Jabber IM network is built).
507 Its goal is to let you connect very easily (no account creation needed) to the
508 network and join various chatrooms, immediately. It tries to look like the
509 most famous IRC clients (weechat, irssi, etc). Many commands are identical and
510 you won't be lost if you already know these clients. Configuration can be
511 made in a configuration file or directly from the client.
512 You'll find the light, fast, geeky and anonymous spirit of IRC while using a
513 powerful, standard and open protocol.")
514 (home-page "https://poez.io/en/")
515 (license license:zlib)))
516
517 (define-public libotr
518 (package
519 (name "libotr")
520 (version "4.1.1")
521 (source
522 (origin
523 (method url-fetch)
524 (uri (string-append "https://otr.cypherpunks.ca/libotr-"
525 version ".tar.gz"))
526 (sha256
527 (base32 "1x8rliydhbibmzwdbyr7pd7n87m2jmxnqkpvaalnf4154hj1hfwb"))
528 (patches
529 (search-patches "libotr-test-auth-fix.patch"))))
530 (build-system gnu-build-system)
531 (native-inputs
532 (list perl)) ; for the test suite
533 (inputs
534 (list libgpg-error))
535 (propagated-inputs
536 (list libgcrypt)) ; libotr headers include gcrypt.h
537 (synopsis "Off-the-Record (OTR) Messaging Library and Toolkit")
538 (description "OTR allows you to have private conversations over instant
539 messaging by providing: (1) Encryption: No one else can read your instant
540 messages. (2) Authentication: You are assured the correspondent is who you
541 think it is. (3) Deniability: The messages you send do not have digital
542 signatures that are checkable by a third party. Anyone can forge messages
543 after a conversation to make them look like they came from you. However,
544 during a conversation, your correspondent is assured the messages he sees are
545 authentic and unmodified. (4) Perfect forward secrecy: If you lose control of
546 your private keys, no previous conversation is compromised.")
547 (home-page "https://otr.cypherpunks.ca/")
548 (license
549 (list
550 ;; Library
551 license:lgpl2.1+
552 ;; Others
553 license:gpl2+))))
554
555 (define-public libsignal-protocol-c
556 (package
557 (name "libsignal-protocol-c")
558 (version "2.3.3")
559 (source (origin
560 (method git-fetch)
561 (uri (git-reference
562 (url "https://github.com/WhisperSystems/libsignal-protocol-c")
563 (commit (string-append "v" version))))
564 (file-name (git-file-name name version))
565 (sha256
566 (base32
567 "0z5p03vk15i6h870azfjgyfgxhv31q2vq6rfhnybrnkxq2wqzwhk"))))
568 (arguments
569 `(;; Required for proper linking and for tests to run.
570 #:configure-flags '("-DBUILD_SHARED_LIBS=on" "-DBUILD_TESTING=1")))
571 (build-system cmake-build-system)
572 (inputs (list ;; Required for tests:
573 check openssl))
574 (native-inputs (list pkg-config))
575 (home-page "https://github.com/WhisperSystems/libsignal-protocol-c")
576 (synopsis "Implementation of a ratcheting forward secrecy protocol")
577 (description "libsignal-protocol-c is an implementation of a ratcheting
578 forward secrecy protocol that works in synchronous and asynchronous
579 messaging environments. It can be used with messaging software to provide
580 end-to-end encryption.")
581 (license license:gpl3+)))
582
583 (define-public axc
584 (package
585 (name "axc")
586 (version "0.3.7")
587 (source
588 (origin
589 (method git-fetch)
590 (uri (git-reference
591 (url "https://github.com/gkdr/axc")
592 (commit (string-append "v" version))))
593 (modules '((guix build utils)))
594 (snippet
595 `(begin
596 ;; Empty directories meant to hold submodules that we provide as
597 ;; proper inputs below.
598 (delete-file-recursively "lib")))
599 (file-name
600 (git-file-name name version))
601 (sha256
602 (base32 "0b02b9flri374f8aw6xfz7mm9s57rb7393r8mdphv7kcsf76i7i5"))))
603 (build-system cmake-build-system)
604 (arguments
605 `(#:phases (modify-phases %standard-phases
606 (replace 'configure
607 (lambda* (#:key outputs #:allow-other-keys)
608 (let ((out (assoc-ref outputs "out")))
609 (setenv "CC" "gcc")
610 (setenv "PREFIX" out)))))
611 #:parallel-tests? #f))
612 (native-inputs (list cmocka pkg-config))
613 (inputs (list glib libgcrypt libsignal-protocol-c sqlite))
614 (synopsis "Client library for libsignal-protocol-c")
615 (description "This is a client library for @code{libsignal-protocol-c}.
616 It implements the necessary interfaces using @code{libgcrypt} and
617 @code{sqlite}.")
618 (home-page "https://github.com/gkdr/axc")
619 (license license:gpl3))) ;GPLv3-only, per license headers
620
621 (define-public libomemo
622 (package
623 (name "libomemo")
624 (version "0.7.1")
625 (source
626 (origin
627 (method git-fetch)
628 (uri (git-reference
629 (url "https://github.com/gkdr/libomemo")
630 (commit (string-append "v" version))))
631 (file-name
632 (git-file-name name version))
633 (sha256
634 (base32 "1q3vyj8zk3vm0a4v6w8qya5dhk2yw04bga8799a0zl6907nf122k"))))
635 (build-system cmake-build-system)
636 (arguments
637 `(#:phases (modify-phases %standard-phases
638 (replace 'configure
639 (lambda* (#:key outputs #:allow-other-keys)
640 (let ((out (assoc-ref outputs "out")))
641 (setenv "CC" "gcc")
642 (setenv "PREFIX" out)))))
643 #:parallel-tests? #f))
644 (native-inputs (list cmocka pkg-config))
645 (inputs (list glib libgcrypt minixml sqlite))
646 (synopsis "OMEMO C library")
647 (description "This library implements @acronym{OMEMO, OMEMO Multi-End
648 Message and Object Encryption} of XMPP (XEP-0384) in C.")
649 (home-page "https://github.com/gkdr/libomemo")
650 (license license:expat)))
651
652 (define-public bitlbee
653 (package
654 (name "bitlbee")
655 (version "3.6")
656 (source (origin
657 (method url-fetch)
658 (uri (string-append "https://get.bitlbee.org/src/bitlbee-"
659 version ".tar.gz"))
660 (sha256
661 (base32 "0zhhcbcr59sx9h4maf8zamzv2waya7sbsl7w74gbyilvy93dw5cz"))))
662 (build-system gnu-build-system)
663 (native-inputs (list pkg-config
664 ;; Note: Change to 'check' for versions > 3.6.
665 check-0.12))
666 (inputs (list glib libotr gnutls python perl))
667 (arguments
668 `(#:phases
669 (modify-phases %standard-phases
670 (add-before 'configure 'set-python
671 (lambda _ (setenv "PYTHON" (which "python3")) #t))
672 (add-after 'install 'install-etc
673 (lambda* (#:key (make-flags '()) #:allow-other-keys)
674 (apply invoke "make" "install-etc" make-flags)))
675 (add-after 'install-etc 'install-lib
676 (lambda* (#:key (make-flags '()) #:allow-other-keys)
677 (apply invoke "make" "install-dev" make-flags)))
678 (replace 'configure
679 ;; bitlbee's configure script does not tolerate many of the
680 ;; variable settings that Guix would pass to it.
681 (lambda* (#:key outputs #:allow-other-keys)
682 (invoke "./configure"
683 (string-append "--prefix="
684 (assoc-ref outputs "out"))
685 "--otr=1"))))))
686 (synopsis "IRC to instant messaging gateway")
687 (description "BitlBee brings IM (instant messaging) to IRC clients, for
688 people who have an IRC client running all the time and don't want to run an
689 additional IM client. BitlBee currently supports XMPP/Jabber (including
690 Google Talk), MSN Messenger, Yahoo! Messenger, AIM and ICQ, and the Twitter
691 microblogging network (plus all other Twitter API compatible services like
692 identi.ca and status.net).")
693 (home-page "https://www.bitlbee.org/")
694 (license (list license:gpl2+ license:bsd-2))))
695
696 (define-public bitlbee-purple
697 ;; This variant uses libpurple, which provides support for more protocols at
698 ;; the expense of a much bigger closure.
699 (package/inherit bitlbee
700 (name "bitlbee-purple")
701 (synopsis "IRC to instant messaging gateway (using Pidgin's libpurple)")
702 (inputs (modify-inputs (package-inputs bitlbee)
703 (prepend pidgin)))
704 (native-search-paths
705 (list (search-path-specification
706 (variable "PURPLE_PLUGIN_PATH")
707 ;; XXX: Should be (version-major (package-version pidgin)) but
708 ;; can't due to circular references.
709 (files (list (string-append "lib/purple-2")
710 "lib/pidgin")))))
711 (arguments
712 (substitute-keyword-arguments (package-arguments bitlbee)
713 ((#:phases phases '%standard-phases)
714 `(modify-phases ,phases
715 (replace 'configure ;add "--purple=1"
716 (lambda* (#:key outputs #:allow-other-keys)
717 (invoke "./configure"
718 (string-append "--prefix="
719 (assoc-ref outputs "out"))
720 "--otr=1" "--purple=1")))))
721 ((#:tests? _ #t)
722 ;; XXX: Tests fail to link, and ./configure says that it's "supported
723 ;; on a best-effort basis" anyway.
724 #f)))))
725
726 (define-public bitlbee-discord
727 ;; Version 0.4.3 of bitlbee-discord was prepared to work for
728 ;; glib@2.68. However, version 2.69 of glib introduced a breaking change
729 ;; causing bitlbee-discord to throw:
730 ;;
731 ;; discord - Login error: Failed to switch to websocket mode
732 ;;
733 ;; This makes the plugin unable to connect and therefore unusable:
734 ;; https://github.com/sm00th/bitlbee-discord/issues/226
735 ;; The specified commit fixes incompatibility with glib@2.69 and newer.
736 (let ((commit "607f9887ca85f246e970778e3d40aa5c346365a7")
737 (revision "1"))
738 (package
739 (name "bitlbee-discord")
740 (version (git-version "0.4.3" revision commit))
741 (source
742 (origin
743 (method git-fetch)
744 (uri (git-reference
745 (url "https://github.com/sm00th/bitlbee-discord")
746 (commit commit)))
747 (file-name (git-file-name name version))
748 (sha256
749 (base32 "0jkwhx2walx2ay0vc9x13q0j1qq4r5x30ss03a3j7ks28xvsnxc7"))))
750 (build-system gnu-build-system)
751 (arguments
752 `(#:configure-flags
753 (let ((out (assoc-ref %outputs "out")))
754 (list (string-append "--with-bdatadir=" out "/share/bitlbee/")
755 (string-append "--with-plugindir=" out "/lib/bitlbee/")))
756 #:phases
757 (modify-phases %standard-phases
758 (add-after 'unpack 'patch-autogen
759 (lambda _
760 (let ((sh (which "sh")))
761 (substitute* "autogen.sh" (("/bin/sh") sh))
762 (setenv "CONFIG_SHELL" sh)))))))
763 (inputs (list glib))
764 (native-inputs (list pkg-config
765 autoconf
766 automake
767 texinfo
768 libtool
769 bitlbee ; needs bitlbee headers
770 bash))
771 (synopsis "Discord plugin for Bitlbee")
772 (description "Bitlbee-discord is a plugin for Bitlbee which provides
773 access to servers running the Discord protocol.")
774 (home-page "https://github.com/sm00th/bitlbee-discord/")
775 (license license:gpl2+))))
776
777 (define-public purple-mattermost
778 ;; The latest release (1.2) only supports Mattermost's /api/v3. Choose a
779 ;; commit that supports /api/v4.
780 (let ((commit "158ce2052af9aaf3d1f6f045f0cfba276e0e91cf")
781 (revision "0"))
782 (package
783 (name "purple-mattermost")
784 (version (git-version "1.2" revision commit))
785 (home-page "https://github.com/EionRobb/purple-mattermost")
786 (source (origin
787 (method git-fetch)
788 (uri (git-reference (url home-page)
789 (commit commit)))
790 (file-name (git-file-name name version))
791 (sha256
792 (base32
793 "1481zm20pnfq52ncg7hxayjq8cw3a6yh9m4jm1m5s8chsq04015l"))))
794 (build-system gnu-build-system)
795 (arguments
796 `(#:phases (modify-phases %standard-phases
797 (replace 'configure
798 (lambda* (#:key inputs outputs #:allow-other-keys)
799 ;; Adjust the makefile to install files in the right
800 ;; place.
801 (let ((out (assoc-ref outputs "out")))
802 (substitute* "Makefile"
803 (("MATTERMOST_DEST = .*")
804 (string-append "MATTERMOST_DEST = " out
805 "/lib/purple-2\n")) ;XXX: hardcoded
806 (("MATTERMOST_ICONS_DEST = .*")
807 (string-append "MATTERMOST_ICONS_DEST = "
808 out
809 "/share/pixmaps/pidgin/protocols\n")))
810 #t))))
811 #:make-flags (list "CC=gcc"
812 ,(string-append "PLUGIN_VERSION=" version))
813 #:tests? #f))
814 (inputs (list glib json-glib discount pidgin))
815 (native-inputs (list pkg-config))
816 (synopsis "Purple plug-in to access Mattermost instant messaging")
817 (description
818 "Purple-Mattermost is a plug-in for Purple, the instant messaging library
819 used by Pidgin and Bitlbee, among others, to access
820 @uref{https://mattermost.com/, Mattermost} servers.")
821 (license license:gpl3+))))
822
823 (define-public hexchat
824 (package
825 (name "hexchat")
826 (version "2.16.1")
827 (source
828 (origin
829 (method url-fetch)
830 (uri (string-append "https://dl.hexchat.net/hexchat/hexchat-"
831 version ".tar.xz"))
832 (sha256
833 (base32 "1iy4ln6yfgy3xysrfpjxw8fn38i3qx8jsn2mk2prshfzf7d9gr57"))))
834 (build-system meson-build-system)
835 (native-inputs `(("gettext" ,gettext-minimal)
836 ("glib:bin" ,glib "bin") ;need glib-genmarshal
837 ("perl" ,perl)
838 ("pkg-config" ,pkg-config)))
839 (inputs `(("dbus-glib" ,dbus-glib)
840 ("dbus" ,dbus)
841 ("enchant" ,enchant)
842 ("gtk" ,gtk+-2)
843 ("libcanberra" ,libcanberra)
844 ("openssl" ,openssl)
845
846 ;; Bindings for add-on scripts.
847 ("luajit" ,luajit)
848 ("perl-xml-parser" ,perl-xml-parser)
849 ("python" ,python)
850 ("python-cffi" ,python-cffi)
851
852 ;; For the ensuing WRAP-PROGRAM.
853 ("bash-minimal" ,bash-minimal)))
854 (arguments
855 `(#:phases
856 (modify-phases %standard-phases
857 (add-after 'unpack 'skip-desktop-database-updates
858 (lambda _
859 ;; The build scripts update icon and desktop file databases when
860 ;; DESTDIR is not set. We can't update these databases from
861 ;; within the build chroot, but we also don't set DESTDIR. So, we
862 ;; just skip this code.
863 (substitute* "meson_post_install.py"
864 (("if 'DESTDIR' not in os.environ:")
865 "if False:"))))
866 (add-after 'install 'wrap-program
867 ;; Let it ‘initialize the Python-CFFI embedding logic’ at run time.
868 (lambda* (#:key outputs #:allow-other-keys)
869 (let* ((out (assoc-ref outputs "out"))
870 (bin (string-append out "/bin")))
871 (wrap-program (string-append bin "/hexchat")
872 `("GUIX_PYTHONPATH" ":" prefix
873 (,(getenv "GUIX_PYTHONPATH"))))))))))
874 (synopsis "Graphical IRC client")
875 (description
876 "HexChat lets you connect to multiple IRC networks at once. The main
877 window shows the list of currently connected networks and their channels, the
878 current conversation and the list of users. It uses colors to differentiate
879 between users and to highlight messages. It checks spelling using available
880 dictionaries. HexChat can be extended with multiple addons.")
881 (home-page "https://hexchat.net/")
882 (license license:gpl2+)))
883
884 (define-public ngircd
885 (package
886 (name "ngircd")
887 (version "26.1")
888 (source (origin
889 (method url-fetch)
890 (uri (string-append "https://arthur.barton.de/pub/ngircd/ngircd-"
891 version ".tar.xz"))
892 (sha256
893 (base32
894 "0m32v0c7mq96rshws4h6d0pi4bm0hynfzx3x01mgrxh9c396zham"))
895 (patches (search-patches "ngircd-handle-zombies.patch"))))
896 (build-system gnu-build-system)
897 ;; Needed for the test suite.
898 (native-inputs (list procps expect inetutils openssl))
899 ;; XXX Add libident.
900 (inputs `(("zlib" ,zlib)
901 ("libwrap" ,tcp-wrappers)
902 ("gnutls" ,gnutls)
903 ,@(if (string-suffix? "-linux"
904 (or (%current-target-system)
905 (%current-system)))
906 `(("linux-pam" ,linux-pam))
907 '())))
908 (arguments
909 `(#:configure-flags
910 '("--with-gnutls" "--with-iconv" "--enable-ipv6" "--with-tcp-wrappers"
911 ,@(if (string-suffix? "-linux"
912 (or (%current-target-system)
913 (%current-system)))
914 '("--with-pam")
915 '()))
916 #:phases
917 (modify-phases %standard-phases
918 ;; Necessary for the test suite.
919 (add-after 'configure 'post-configure
920 (lambda _
921 (substitute* "src/ngircd/Makefile"
922 (("/bin/sh") (which "sh")))
923 ;; The default getpid.sh does a sloppy grep over 'ps -ax' output,
924 ;; which fails arbitrarily.
925 (with-output-to-file "src/testsuite/getpid.sh"
926 (lambda ()
927 (display
928 (string-append
929 "#!" (which "sh") "\n"
930 "ps -C \"$1\" -o pid=\n"))))
931 ;; Our variant of getpid.sh does not match interpreter names
932 ;; when the script's shebang is invoked directly as "./foo".
933 ;; Patch cases where the test suite relies on this.
934 (substitute* "src/testsuite/start-server.sh"
935 ;; It runs 'getpid.sh sh' to test if it works at all. Run it on
936 ;; 'make' instead.
937 (("getpid.sh sh") "getpid.sh make")))))))
938 (home-page "https://ngircd.barton.de/")
939 (synopsis "Lightweight Internet Relay Chat server for small networks")
940 (description
941 "ngIRCd is a lightweight @dfn{Internet Relay Chat} (IRC) server for small
942 or private networks. It is easy to configure, can cope with dynamic IP
943 addresses, and supports IPv6, SSL-protected connections, as well as PAM for
944 authentication.")
945 (license license:gpl2+)))
946
947 (define-public pidgin
948 (package
949 (name "pidgin")
950 (version "2.14.5")
951 (source
952 (origin
953 (method url-fetch)
954 (uri
955 (string-append "mirror://sourceforge/pidgin/Pidgin/"
956 version "/pidgin-" version ".tar.gz"))
957 (sha256
958 (base32 "12llip3r8126gph82r638xjv2v2rg34qgggn1nbwfmc3s7halimr"))
959 (patches
960 (search-patches "pidgin-add-search-path.patch"))
961 (modules '((guix build utils)))
962 (snippet
963 '(begin
964 ;; Remove stale generated file after applying patches.
965 (delete-file "configure")
966 #t))))
967 (build-system glib-or-gtk-build-system)
968 (native-inputs
969 `(("autoconf" ,autoconf) ;; For bootstrap
970 ("automake" ,automake) ;; For bootstrap
971 ("check" ,check)
972 ("dot" ,graphviz)
973 ("gconf" ,gconf)
974 ("intltool" ,intltool)
975 ("libtool" ,libtool) ;; For bootstrap
976 ("pkg-config" ,pkg-config)))
977 (inputs
978 `(("avahi" ,avahi)
979 ("cyrus-sasl" ,cyrus-sasl)
980 ("dbus" ,dbus)
981 ("dbus-glib" ,dbus-glib)
982 ;; ("evolution-data-server" ,evolution-data-server)
983 ("farstream" ,farstream)
984 ("gnutls" ,gnutls)
985 ("gstreamer" ,gstreamer)
986 ;; ("gtkspell2" ,gtkspell2)
987 ("libgadu" ,libgadu)
988 ("libgcrypt" ,libgcrypt)
989 ("libgnt" ,libgnt)
990 ("libice" ,libice)
991 ("libidn" ,libidn)
992 ("libltdl" ,libltdl)
993 ("libsm" ,libsm)
994 ("libx11" ,libx11)
995 ("libxext" ,libxext)
996 ("libxml2" ,libxml2)
997 ("libxscrnsaver" ,libxscrnsaver)
998 ("libxslt" ,libxslt)
999 ;; ("libzephyr" ,libzephyr)
1000 ("meanwhile" ,meanwhile)
1001 ("mono" ,mono)
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-mono"
1027 "--enable-cyrus-sasl"
1028 (string-append "--with-ncurses-headers="
1029 (assoc-ref %build-inputs "ncurses")
1030 "/include")
1031 (string-append "--with-tclconfig="
1032 (assoc-ref %build-inputs "tcl")
1033 "/lib")
1034 (string-append "--with-tkconfig="
1035 (assoc-ref %build-inputs "tk")
1036 "/lib"))))
1037 (native-search-paths
1038 (list
1039 (search-path-specification
1040 (variable "PURPLE_PLUGIN_PATH")
1041 (files
1042 (list
1043 (string-append "lib/purple-"
1044 (version-major version))
1045 "lib/pidgin")))))
1046 (home-page "https://www.pidgin.im/")
1047 (synopsis "Graphical multi-protocol instant messaging client")
1048 (description "Pidgin is a modular instant messaging client that supports
1049 many popular chat protocols.")
1050 (license
1051 (list
1052 license:gpl2+ ; Most of the code
1053 license:lgpl2.1 ; GG protocol plugin (libpurple/protocols/gg/lib)
1054 license:lgpl2.0+ ; OSCAR protocol plugin (libpurple/protocols/oscar)
1055 ;; The following licenses cover the zephyr protocol plugin:
1056 (license:non-copyleft
1057 "file://libpurple/protocols/zephyr/mit-copyright.h"
1058 "See libpurple/protocols/zephyr/mit-copyright.h in the distribution.")
1059 (license:non-copyleft
1060 "file://libpurple/protocols/zephyr/mit-sipb-copyright.h"
1061 "See libpurple/protocols/zephyr/mit-sipb-copyright.h in the distribution.")))))
1062
1063 (define-public pidgin-otr
1064 (package
1065 (name "pidgin-otr")
1066 (version "4.0.2")
1067 (source
1068 (origin
1069 (method url-fetch)
1070 (uri
1071 (string-append "https://otr.cypherpunks.ca/"
1072 name "-" version ".tar.gz"))
1073 (sha256
1074 (base32 "1i5s9rrgbyss9rszq6c6y53hwqyw1k86s40cpsfx5ccl9bprxdgl"))))
1075 (build-system gnu-build-system)
1076 (native-inputs
1077 (list gettext-minimal intltool pkg-config))
1078 (inputs
1079 (list glib
1080 gtk+-2
1081 libgcrypt
1082 libgpg-error
1083 libotr
1084 perl
1085 pidgin))
1086 (home-page "https://otr.cypherpunks.ca/")
1087 (synopsis "Off-the-Record Messaging plugin for Pidgin")
1088 (description "Pidgin-OTR is a plugin that adds support for OTR to the Pidgin
1089 instant messaging client. OTR (Off-the-Record) Messaging allows you to have
1090 private conversations over instant messaging by providing: (1) Encryption: No
1091 one else can read your instant messages. (2) Authentication: You are assured
1092 the correspondent is who you think it is. (3) Deniability: The messages you
1093 send do not have digital signatures that are checkable by a third party. Anyone
1094 can forge messages after a conversation to make them look like they came from
1095 you. However, during a conversation, your correspondent is assured the messages
1096 he sees are authentic and unmodified. (4) Perfect forward secrecy: If you lose
1097 control of your private keys, no previous conversation is compromised.")
1098 (license license:gpl2+)))
1099
1100 (define-public znc
1101 (package
1102 (name "znc")
1103 (version "1.8.2")
1104 (source (origin
1105 (method url-fetch)
1106 (uri (string-append "https://znc.in/releases/archive/znc-"
1107 version ".tar.gz"))
1108 (sha256
1109 (base32
1110 "03fyi0j44zcanj1rsdx93hkdskwfvhbywjiwd17f9q1a7yp8l8zz"))))
1111 (build-system cmake-build-system)
1112 (arguments
1113 `(#:configure-flags
1114 (list "-DWANT_CYRUS=ON"
1115 "-DWANT_I18N=ON"
1116 "-DWANT_PERL=ON"
1117 "-DWANT_PYTHON=ON")
1118 #:phases
1119 (modify-phases %standard-phases
1120 (add-after 'unpack 'unpack-googletest
1121 ;; Copy the googletest sources to where the CMake build expects them.
1122 (lambda* (#:key inputs #:allow-other-keys)
1123 (let ((source (assoc-ref inputs "googletest-source"))
1124 (target "third_party/googletest"))
1125 (mkdir-p target)
1126 (copy-recursively source target)
1127 #t))))))
1128 (native-inputs
1129 `(("boost" ,boost)
1130 ("gettext" ,gettext-minimal)
1131 ("googletest-source" ,(package-source googletest))
1132 ("pkg-config" ,pkg-config)))
1133 (inputs
1134 (list cyrus-sasl
1135 icu4c
1136 openssl
1137 perl
1138 python
1139 zlib))
1140 (home-page "https://wiki.znc.in/ZNC")
1141 (synopsis "IRC network bouncer")
1142 (description "ZNC is an @dfn{IRC network bouncer} or @dfn{BNC}. It can
1143 detach the client from the actual IRC server, and also from selected channels.
1144 Multiple clients from different locations can connect to a single ZNC account
1145 simultaneously and therefore appear under the same nickname on IRC.")
1146 (license license:asl2.0)))
1147
1148 (define-public python-nbxmpp
1149 (package
1150 (name "python-nbxmpp")
1151 (version "3.1.0")
1152 (source
1153 (origin
1154 (method url-fetch)
1155 (uri
1156 (pypi-uri "nbxmpp" version))
1157 (sha256
1158 (base32 "0c32090gr1fiy7hkn73dcj4ad9gfdpks8hivl1dl8bql01jsfdnj"))))
1159 (build-system python-build-system)
1160 (native-inputs
1161 (list `(,glib "bin")))
1162 (inputs
1163 (list glib
1164 glib-networking
1165 libsoup-minimal-2
1166 python-gssapi
1167 python-idna
1168 python-precis-i18n
1169 python-pygobject))
1170 (synopsis "Non-blocking XMPP Module")
1171 (description "Python-nbxmpp is a Python library that provides a way for
1172 Python applications to use the XMPP network. This library was initially a fork
1173 of xmpppy.")
1174 (home-page "https://dev.gajim.org/gajim/python-nbxmpp")
1175 (license license:gpl3+)))
1176
1177 (define-public gajim
1178 (package
1179 (name "gajim")
1180 (version "1.4.6")
1181 (source
1182 (origin
1183 (method url-fetch)
1184 (uri
1185 (string-append "https://gajim.org/downloads/"
1186 (version-major+minor version)
1187 "/gajim-" version ".tar.gz"))
1188 (sha256
1189 (base32 "0ks25hh7ksx0nfydixpixcli556w7qcylxp2z2xsx8mgzqv7c9la"))
1190 (patches (search-patches "gajim-honour-GAJIM_PLUGIN_PATH.patch"))))
1191 (build-system python-build-system)
1192 (arguments
1193 `(#:imported-modules
1194 (,@%python-build-system-modules
1195 (guix build glib-or-gtk-build-system))
1196 #:modules
1197 ((guix build python-build-system)
1198 ((guix build glib-or-gtk-build-system)
1199 #:prefix glib-or-gtk:)
1200 (guix build utils))
1201 #:phases
1202 (modify-phases %standard-phases
1203 (add-after 'unpack 'disable-failing-tests
1204 (lambda _
1205 ;; XXX Gajim builds fine on some (my) machines but fails elsewhere:
1206 ;; ModuleNotFoundError: No module named 'gajim.gui.emoji_data'
1207 ;; https://dev.gajim.org/gajim/gajim/-/issues/11041
1208 (delete-file "test/no_gui/test_styling.py")))
1209 (replace 'check
1210 (lambda _
1211 ;; Tests require a running X server.
1212 (system "Xvfb :1 +extension GLX &")
1213 (setenv "DISPLAY" ":1")
1214 ;; For missing '/etc/machine-id'.
1215 (setenv "DBUS_FATAL_WARNINGS" "0")
1216 (invoke "dbus-launch" "python" "./setup.py" "test")))
1217 ;; Loading gajim_remote require running session bus,
1218 ;; which in-turn requires running elogind for XDG_RUNTIME_DIR;
1219 ;; neither of which are possible inside build environment.
1220 (delete 'sanity-check)
1221 (add-after 'install 'glib-or-gtk-compile-schemas
1222 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
1223 (add-after 'install 'glib-or-gtk-wrap
1224 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))
1225 (add-after 'install 'wrap-env
1226 (lambda* (#:key outputs #:allow-other-keys)
1227 (let ((out (assoc-ref outputs "out")))
1228 (for-each
1229 (lambda (name)
1230 (let ((file (string-append out "/bin/" name))
1231 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH"))
1232 (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
1233 (wrap-program file
1234 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
1235 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))
1236 '("gajim" "gajim-remote"))))))))
1237 (native-search-paths
1238 (list
1239 (search-path-specification
1240 (variable "GAJIM_PLUGIN_PATH")
1241 (separator #f) ;single entry
1242 (files
1243 (list
1244 "share/gajim/plugins")))
1245 ;; Gajim needs to use the propagated inputs of its plugins.
1246 (search-path-specification
1247 (variable "GUIX_PYTHONPATH")
1248 (files
1249 (list
1250 (string-append
1251 "lib/python"
1252 ;; FIXME: Cannot use this expression as it would
1253 ;; introduce a circular dependency at the top level.
1254 ;; (version-major+minor (package-version python))
1255 "3.9"
1256 "/site-packages"))))))
1257 (native-inputs
1258 `(("gettext" ,gettext-minimal)
1259 ("glib:bin" ,glib "bin")
1260 ("gobject-introspection" ,gobject-introspection)
1261 ("gtk+:bin" ,gtk+ "bin")
1262 ("python-distutils-extra" ,python-distutils-extra)
1263 ("python-setuptools" ,python-setuptools)
1264 ("xorg-server" ,xorg-server-for-tests)))
1265 (inputs
1266 `(("avahi" ,avahi)
1267 ("dbus" ,dbus)
1268 ("farstream" ,farstream)
1269 ("geoclue" ,geoclue)
1270 ("glib" ,glib)
1271 ("glib-networking" ,glib-networking)
1272 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
1273 ("gsound",gsound)
1274 ("gspell" ,gspell)
1275 ("gstreamer" ,gstreamer)
1276 ("gst-plugins-base" ,gst-plugins-base)
1277 ("gtk+" ,gtk+)
1278 ("gtksourceview" ,gtksourceview)
1279 ("gupnp-igd" ,gupnp-igd)
1280 ("libappindicator" ,libappindicator)
1281 ("libnice" ,libnice)
1282 ("libsecret" ,libsecret)
1283 ("libsoup" ,libsoup)
1284 ("libxss" ,libxscrnsaver)
1285 ("network-manager" ,network-manager)
1286 ("python-css-parser" ,python-css-parser)
1287 ("python-dbus" ,python-dbus)
1288 ("python-gssapi" ,python-gssapi)
1289 ("python-keyring" ,python-keyring)
1290 ("python-nbxmpp" ,python-nbxmpp)
1291 ("python-packaging" ,python-packaging)
1292 ("python-pillow" ,python-pillow)
1293 ("python-precis-i18n" ,python-precis-i18n)
1294 ("python-pycairo" ,python-pycairo)
1295 ("python-pygobject" ,python-pygobject)
1296 ("python-pyopenssl" ,python-pyopenssl)))
1297 (propagated-inputs
1298 (list dconf))
1299 (synopsis "Fully-featured XMPP client")
1300 (description "Gajim aims to be an easy to use and fully-featured XMPP chat
1301 client. It is extensible via plugins, supports end-to-end encryption (OMEMO
1302 and OpenPGP) and available in 29 languages.")
1303 (home-page "https://gajim.org/")
1304 (license license:gpl3)))
1305
1306 (define-public gajim-omemo
1307 (package
1308 (name "gajim-omemo")
1309 (version "2.8.15")
1310 (source
1311 (origin
1312 (method url-fetch/zipbomb)
1313 (uri
1314 (string-append
1315 "https://ftp.gajim.org/plugins/master/omemo/omemo_"
1316 version ".zip"))
1317 (sha256
1318 (base32 "1hf148ywr8knk5y3y5xvvwgw74ld1pcfjkp78g514ikcnzfycfcn"))))
1319 (build-system trivial-build-system)
1320 (arguments
1321 `(#:modules ((guix build utils))
1322 #:builder
1323 (begin
1324 (use-modules (guix build utils))
1325 (let* ((out (assoc-ref %outputs "out"))
1326 (share (in-vicinity out "share/gajim/plugins/omemo"))
1327 (source (assoc-ref %build-inputs "source")))
1328 (mkdir-p share)
1329 (copy-recursively source share)
1330 #t))))
1331 (propagated-inputs
1332 (list python-axolotl python-axolotl-curve25519 python-cryptography
1333 python-qrcode))
1334 (synopsis "Gajim OMEMO plugin")
1335 (description "Gajim-OMEMO is a plugin that adds support for the OMEMO
1336 Encryption to Gajim. OMEMO is an XMPP Extension Protocol (XEP) for secure
1337 multi-client end-to-end encryption.")
1338 (home-page
1339 "https://dev.gajim.org/gajim/gajim-plugins/-/wikis/OmemoGajimPlugin")
1340 (license license:gpl3+)))
1341
1342 (define-public gajim-openpgp
1343 (package
1344 (name "gajim-openpgp")
1345 (version "1.4.9")
1346 (source
1347 (origin
1348 (method url-fetch/zipbomb)
1349 (uri
1350 (string-append
1351 "https://ftp.gajim.org/plugins/master/openpgp/openpgp_"
1352 version ".zip"))
1353 (sha256
1354 (base32 "1xwmf6ai1z7z9x6p1ysglxji73r7d27c0gzc8ykab29cjhjyv0dq"))))
1355 (build-system trivial-build-system)
1356 (arguments
1357 `(#:modules ((guix build utils))
1358 #:builder
1359 (begin
1360 (use-modules (guix build utils))
1361 (let* ((out (assoc-ref %outputs "out"))
1362 (share (in-vicinity out "share/gajim/plugins/openpgp"))
1363 (source (assoc-ref %build-inputs "source")))
1364 (mkdir-p share)
1365 (copy-recursively source share)
1366 #t))))
1367 (propagated-inputs
1368 (list python-cryptography python-gnupg python-gpg))
1369 (synopsis "Gajim OpenPGP plugin")
1370 (description "Gajim-OpenPGP is a plugin that adds support for the OpenPGP
1371 Encryption to Gajim.")
1372 (home-page "https://dev.gajim.org/gajim/gajim-plugins/-/wikis/OpenPGPplugin")
1373 (license license:gpl3+)))
1374
1375 (define-public dino
1376 (package
1377 (name "dino")
1378 (version "0.3.0")
1379 (source
1380 (origin
1381 (method url-fetch)
1382 (uri
1383 (string-append "https://github.com/dino/dino/releases/download/v"
1384 version "/dino-" version ".tar.gz"))
1385 (sha256
1386 (base32 "07nw275xfamczzvzps8hsnpbhzvr4qc726fx92w8ncmdag7wlw1r"))))
1387 (build-system cmake-build-system)
1388 (outputs '("out" "debug"))
1389 (arguments
1390 (list #:configure-flags #~(list "-DBUILD_TESTS=true")
1391 #:parallel-build? #f ; not supported
1392 #:modules '((guix build cmake-build-system)
1393 ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
1394 (guix build utils))
1395 #:imported-modules `(,@%gnu-build-system-modules
1396 (guix build cmake-build-system)
1397 (guix build glib-or-gtk-build-system))
1398 #:phases
1399 #~(modify-phases %standard-phases
1400 ;; For A/V support.
1401 (add-after 'install 'wrap
1402 (lambda* (#:key outputs #:allow-other-keys)
1403 (let* ((out (assoc-ref outputs "out"))
1404 (dino (string-append out "/bin/dino"))
1405 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
1406 (wrap-program dino
1407 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))))))
1408 (add-after 'install 'glib-or-gtk-wrap
1409 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))
1410 (replace 'check
1411 (lambda* (#:key tests? #:allow-other-keys)
1412 (when tests?
1413 (invoke "./libdino-test")
1414 (invoke "./signal-protocol-vala-test")
1415 (invoke "./xmpp-vala-test")))))))
1416 (native-inputs
1417 (list gettext-minimal
1418 `(,glib "bin")
1419 gobject-introspection
1420 `(,gtk+ "bin")
1421 pkg-config
1422 vala))
1423 (inputs
1424 (list atk
1425 cairo
1426 librsvg
1427 glib
1428 glib-networking
1429 gpgme
1430 gsettings-desktop-schemas
1431 gspell ;for spell-check support
1432 gstreamer ;for A/V support
1433 gst-plugins-base
1434 gst-plugins-good
1435 gtk+
1436 icu4c ;for emoji support
1437 libcanberra ;for sound-notification support
1438 libgcrypt
1439 libgee
1440 libnice
1441 libsignal-protocol-c
1442 libsoup-minimal-2
1443 libsrtp ;for calls support
1444 pango
1445 qrencode
1446 sqlite
1447 webrtc-audio-processing)) ;for A/V support
1448 (synopsis "Graphical Jabber/XMPP Client using GTK+/Vala")
1449 (description "Dino is a chat client for the desktop. It focuses on providing
1450 a minimal yet reliable Jabber/XMPP experience and having encryption enabled by
1451 default.")
1452 (home-page "https://dino.im")
1453 (license license:gpl3+)))
1454
1455 (define-public kaidan
1456 (package
1457 (name "kaidan")
1458 (version "0.8.0")
1459 (source (origin
1460 (method url-fetch)
1461 (uri (string-append "mirror://kde/unstable/kaidan/" version
1462 "/kaidan-" version ".tar.xz"))
1463 (modules '((guix build utils)))
1464 (snippet
1465 #~(begin
1466 (delete-file-recursively "3rdparty")))
1467 (sha256
1468 (base32 "195iddv35gc3k83r226y17avsab2b9bszgd7z7ynbddsgbf75rx7"))))
1469 (build-system qt-build-system)
1470 (arguments
1471 (list #:configure-flags #~(list "-DBUILD_TESTS=true")))
1472 (native-inputs (list extra-cmake-modules
1473 perl
1474 pkg-config
1475 python-wrapper))
1476 (inputs (list kirigami
1477 knotifications
1478 qtbase-5
1479 qtdeclarative-5
1480 qtgraphicaleffects
1481 qtlocation
1482 qtquickcontrols2
1483 qtsvg-5
1484 qtmultimedia-5
1485 qtxmlpatterns
1486 qqc2-desktop-style
1487 qxmpp
1488 zxing-cpp))
1489 (home-page "https://www.kaidan.im/")
1490 (synopsis "Qt-based XMPP/Jabber Client")
1491 (description "Kaidan is a chat client. It uses the open communication
1492 protocol XMPP (Jabber). The user interface makes use of Kirigami and QtQuick,
1493 while the back-end of Kaidan is entirely written in C++ using Qt and the
1494 Qt-based XMPP library QXmpp.")
1495 (license (list
1496 ;; Graphics
1497 license:cc-by-sa4.0
1498 ;; Files:
1499 ;; src/{StatusBar.cpp|StatusBar.h|singleapp/*|hsluv-c/*}
1500 ;; utils/generate-license.py
1501 license:expat
1502 ;; QrCodeVideoFrame
1503 license:asl2.0
1504 ;; Others
1505 license:gpl3+))))
1506
1507 (define-public prosody
1508 (package
1509 (name "prosody")
1510 (version "0.11.10")
1511 (source (origin
1512 (method url-fetch)
1513 (uri (string-append "https://prosody.im/downloads/source/"
1514 "prosody-" version ".tar.gz"))
1515 (sha256
1516 (base32
1517 "1q84s9cq7cgzd295qxa2iy0r3vd3v3chbck62bdx3pd6skk19my6"))))
1518 (build-system gnu-build-system)
1519 (arguments
1520 `(#:tests? #f ;tests require "busted"
1521 #:configure-flags (list "--no-example-certs")
1522 #:modules ((ice-9 match)
1523 (srfi srfi-1)
1524 (guix build gnu-build-system)
1525 (guix build utils))
1526 #:phases
1527 (modify-phases %standard-phases
1528 (add-after 'unpack 'fix-configure-script
1529 (lambda _
1530 ;; The configure script aborts when it encounters unexpected
1531 ;; arguments. Make it more tolerant.
1532 (substitute* "configure"
1533 (("exit 1") ""))))
1534 (add-after 'unpack 'fix-makefile
1535 (lambda _
1536 (substitute* "GNUmakefile"
1537 ;; prosodyctl needs to read the configuration file.
1538 (("^INSTALLEDCONFIG =.*") "INSTALLEDCONFIG = /etc/prosody\n")
1539 ;; prosodyctl needs a place to put auto-generated certificates.
1540 (("^INSTALLEDDATA =.*") "INSTALLEDDATA = /var/lib/prosody\n"))))
1541 (add-after 'install 'wrap-programs
1542 (lambda* (#:key inputs outputs #:allow-other-keys)
1543 ;; Make sure all executables in "bin" find the required Lua
1544 ;; modules at runtime.
1545 (let* ((out (assoc-ref outputs "out"))
1546 (bin (string-append out "/bin/"))
1547 (deps (delete #f (map (match-lambda
1548 ((label . directory)
1549 (if (string-prefix? "lua" label)
1550 directory #f)))
1551 inputs)))
1552 (lua-path (string-join
1553 (map (lambda (path)
1554 (string-append
1555 path "/share/lua/5.2/?.lua;"
1556 path "/share/lua/5.2/?/?.lua"))
1557 (cons out deps))
1558 ";"))
1559 (lua-cpath (string-join
1560 (map (lambda (path)
1561 (string-append
1562 path "/lib/lua/5.2/?.so;"
1563 path "/lib/lua/5.2/?/?.so"))
1564 (cons out deps))
1565 ";"))
1566 (openssl (assoc-ref inputs "openssl"))
1567 (coreutils (assoc-ref inputs "coreutils"))
1568 (path (map (lambda (dir)
1569 (string-append dir "/bin"))
1570 (list openssl coreutils))))
1571 (for-each (lambda (file)
1572 (wrap-program file
1573 `("LUA_PATH" ";" = (,lua-path))
1574 `("LUA_CPATH" ";" = (,lua-cpath))
1575 `("PATH" ":" prefix ,path)))
1576 (find-files bin ".*"))))))))
1577 (inputs
1578 (list libidn
1579 openssl
1580 lua-5.2
1581 lua5.2-bitop
1582 lua5.2-expat
1583 lua5.2-socket
1584 lua5.2-filesystem
1585 lua5.2-sec))
1586 (home-page "https://prosody.im/")
1587 (synopsis "Jabber (XMPP) server")
1588 (description "Prosody is a modern XMPP communication server. It aims to
1589 be easy to set up and configure, and efficient with system resources.
1590 Additionally, for developers it aims to be easy to extend and give a flexible
1591 system on which to rapidly develop added functionality, or prototype new
1592 protocols.")
1593 (license license:x11)))
1594
1595 (define-public prosody-http-upload
1596 (let ((changeset "765735bb590b")
1597 (revision "1"))
1598 (package
1599 (name "prosody-http-upload")
1600 (version (string-append "0-" revision "." (string-take changeset 7)))
1601 (source (origin
1602 (method hg-fetch)
1603 (uri (hg-reference
1604 (url "https://hg.prosody.im/prosody-modules/")
1605 (changeset changeset)))
1606 (file-name (string-append name "-" version "-checkout"))
1607 (sha256
1608 (base32
1609 "142wrcism70nf8ffahhd961cqg2pi1h7ic8adfs3zwh0j3pnf41f"))))
1610 (build-system trivial-build-system)
1611 (arguments
1612 '(#:modules ((guix build utils))
1613 #:builder
1614 (begin
1615 (use-modules (guix build utils))
1616 (let ((out (assoc-ref %outputs "out"))
1617 (source (assoc-ref %build-inputs "source")))
1618 (with-directory-excursion (in-vicinity source "mod_http_upload")
1619 (install-file "mod_http_upload.lua" out))
1620 #t))))
1621 (home-page "https://modules.prosody.im/mod_http_upload.html")
1622 (synopsis "XEP-0363: Allow clients to upload files over HTTP")
1623 (description "This module implements XEP-0363: it allows clients to
1624 upload files over HTTP.")
1625 (license (package-license prosody)))))
1626
1627 (define-public prosody-smacks
1628 (let ((changeset "67f1d1f22625")
1629 (revision "1"))
1630 (package
1631 (name "prosody-smacks")
1632 (version (string-append "0-" revision "." (string-take changeset 7)))
1633 (source (origin
1634 (method hg-fetch)
1635 (uri (hg-reference
1636 (url "https://hg.prosody.im/prosody-modules/")
1637 (changeset changeset)))
1638 (file-name (string-append name "-" version "-checkout"))
1639 (sha256
1640 (base32
1641 "020ngpax30fgarah98yvlj0ni8rcdwq60if03a9hqdw8mic0nxxs"))))
1642 (build-system trivial-build-system)
1643 (arguments
1644 '(#:modules ((guix build utils))
1645 #:builder
1646 (begin
1647 (use-modules (guix build utils))
1648 (let ((out (assoc-ref %outputs "out"))
1649 (source (assoc-ref %build-inputs "source")))
1650 (with-directory-excursion (in-vicinity source "mod_smacks")
1651 (install-file "mod_smacks.lua" out))
1652 #t))))
1653 (home-page "https://modules.prosody.im/mod_smacks.html")
1654 (synopsis "XEP-0198: Reliability and fast reconnects for XMPP")
1655 (description "This module implements XEP-0198: when supported by both
1656 the client and server, it can allow clients to resume a disconnected session,
1657 and prevent message loss.")
1658 (license (package-license prosody)))))
1659
1660 (define-public libtoxcore
1661 (let ((revision "2")
1662 (commit "bf69b54f64003d160d759068f4816b2d9b2e1e21"))
1663 (package
1664 (name "libtoxcore")
1665 (version (string-append "0.0.0" "-"
1666 revision "."(string-take commit 7)))
1667 (source (origin
1668 (method git-fetch)
1669 (uri (git-reference
1670 (url "https://github.com/irungentoo/toxcore")
1671 (commit commit)))
1672 (file-name (string-append name "-" version "-checkout"))
1673 (sha256
1674 (base32
1675 "11lqra4yd7v293cp286ynff5lqz1pprzg8vn3wq6vryj08g88zqb"))))
1676 (build-system gnu-build-system)
1677 (arguments `(#:tests? #f)) ; FIXME: tests hang, some fail.
1678 (native-inputs
1679 (list autoconf automake libtool check pkg-config))
1680 (inputs
1681 (list libsodium opus libvpx))
1682 (synopsis "Library for the Tox encrypted messenger protocol")
1683 (description
1684 "C library implementation of the Tox encrypted messenger protocol.")
1685 (license license:gpl3+)
1686 (home-page "https://tox.chat"))))
1687
1688 ;; Some tox clients move to c-toxcore, which seems to be where all the
1689 ;; recent development happens. It is run by the same developers as toxcore,
1690 ;; forked into a group namespace.
1691 (define-public c-toxcore
1692 (package
1693 (name "c-toxcore")
1694 (version "0.2.12")
1695 (source
1696 (origin
1697 (method git-fetch)
1698 (uri (git-reference
1699 (url "https://github.com/TokTok/c-toxcore")
1700 (commit (string-append "v" version))))
1701 (file-name (git-file-name name version))
1702 (sha256
1703 (base32
1704 "0a6sqpm00d2rn0nviqfz4gh9ck1wzci6rxgmqmcyryl5ca19ffvp"))))
1705 (arguments
1706 `(#:tests? #f)) ; FIXME: Testsuite seems to stay stuck on test 3. Disable
1707 ; for now.
1708 (build-system cmake-build-system)
1709 (native-inputs
1710 (list pkg-config))
1711 (propagated-inputs
1712 (list libsodium opus libvpx))
1713 (home-page "https://tox.chat")
1714 (synopsis "Library for the Tox encrypted messenger protocol")
1715 (description
1716 "Official fork of the C library implementation of the Tox encrypted
1717 messenger protocol.")
1718 (license license:gpl3+)))
1719
1720 (define-public utox
1721 (package
1722 (name "utox")
1723 (version "0.18.1")
1724 (source
1725 (origin
1726 (method git-fetch)
1727 (uri (git-reference
1728 (url "https://github.com/uTox/uTox")
1729 (commit (string-append "v" version))
1730 (recursive? #t))) ;; Needed for 'minini' git submodule.
1731 (file-name (string-append name "-" version "-checkout"))
1732 (sha256
1733 (base32
1734 "01rvlf94d4rkrygnnjak3cg16hrrqyi1rn9nx65y17qk2nbyh68g"))))
1735 (build-system cmake-build-system)
1736 (arguments
1737 `(#:configure-flags '("-DENABLE_TESTS=on")
1738 #:phases
1739 (modify-phases %standard-phases
1740 (add-before 'build 'patch-absolute-filename-libgtk-3
1741 (lambda* (#:key inputs outputs #:allow-other-keys)
1742 (substitute* "../source/src/xlib/gtk.c"
1743 (("libgtk-3.so")
1744 (search-input-file inputs "/lib/libgtk-3.so")))))
1745 (add-after 'install 'wrap-program
1746 (lambda* (#:key inputs outputs #:allow-other-keys)
1747 (wrap-program (string-append (assoc-ref outputs "out")
1748 "/bin/utox")
1749 ;; For GtkFileChooserDialog.
1750 `("GSETTINGS_SCHEMA_DIR" =
1751 (,(string-append (assoc-ref inputs "gtk+")
1752 "/share/glib-2.0/schemas")))))))))
1753 (inputs
1754 `(("dbus" ,dbus)
1755 ("filteraudio" ,filteraudio)
1756 ("fontconfig" ,fontconfig)
1757 ("freetype" ,freetype)
1758 ("c-toxcore" ,c-toxcore)
1759 ("gtk+" ,gtk+)
1760 ("libvpx" ,libvpx)
1761 ("libx11" ,libx11)
1762 ("libxext" ,libxext)
1763 ("libxrender" ,libxrender)
1764 ("openal" ,openal)
1765 ("v4l-utils" ,v4l-utils)))
1766 (native-inputs
1767 (list check pkg-config))
1768 (synopsis "Lightweight Tox client")
1769 (description
1770 "uTox is a lightweight Tox client. Tox is a distributed and secure
1771 instant messenger with audio and video chat capabilities.")
1772 (home-page "https://github.com/uTox/uTox")
1773 (license license:gpl3)))
1774
1775 (define-public qtox
1776 (package
1777 (name "qtox")
1778 (version "1.17.6")
1779 (source (origin
1780 (method url-fetch)
1781 (uri (string-append "https://github.com/qTox/qTox/releases"
1782 "/download/v" version
1783 "/v" version ".tar.gz"))
1784 (sha256
1785 (base32
1786 "1ml8z1xpp3qhip4vkr375jf7y5kc18g0apm91n5am6ricx37c01r"))
1787 (file-name (string-append name "-" version ".tar.gz"))))
1788 (build-system cmake-build-system)
1789 (arguments
1790 (list #:phases
1791 #~(modify-phases %standard-phases
1792 (add-after 'unpack 'fix-reproducibility-issues
1793 (lambda _
1794 (substitute* "src/main.cpp"
1795 (("__DATE__") "\"\"")
1796 (("__TIME__") "\"\"")
1797 (("TIMESTAMP") "\"\""))))
1798 (add-after 'unpack 'disable-network-tests
1799 (lambda _
1800 ;; These tests require network access.
1801 (substitute* "cmake/Testing.cmake"
1802 (("auto_test\\(core core\\)") "# auto_test(core core)")
1803 (("auto_test\\(net bsu\\)") "# auto_test(net bsu)"))))
1804 ;; Ensure that icons are found at runtime.
1805 (add-after 'install 'wrap-executable
1806 (lambda* (#:key inputs outputs #:allow-other-keys)
1807 (let ((out (assoc-ref outputs "out")))
1808 (wrap-program (string-append out "/bin/qtox")
1809 `("QT_PLUGIN_PATH" prefix
1810 ,(list (search-input-directory
1811 inputs "lib/qt5/plugins/"))))))))))
1812 (native-inputs
1813 (list pkg-config qttools))
1814 (inputs
1815 (list ffmpeg
1816 filteraudio
1817 glib
1818 gtk+-2
1819 libsodium
1820 c-toxcore
1821 libvpx
1822 libxscrnsaver
1823 libx11
1824 libexif
1825 sqlite
1826 openal
1827 qrencode
1828 qtbase-5
1829 qtsvg-5
1830 sqlcipher))
1831 (home-page "https://qtox.github.io/")
1832 (synopsis "Tox chat client using Qt")
1833 (description "qTox is a Tox client that follows the Tox design
1834 guidelines. It provides an easy to use application that allows you to
1835 connect with friends and family without anyone else listening in.")
1836 (license license:gpl3+)))
1837
1838 (define-public ytalk
1839 (package
1840 (name "ytalk")
1841 (version "3.3.0")
1842 (source
1843 (origin
1844 (method url-fetch)
1845 (uri (string-append "ftp://ftp.ourproject.org/pub/ytalk/ytalk-"
1846 version ".tar.gz"))
1847 (sha256
1848 (base32
1849 "1d3jhnj8rgzxyxjwfa22vh45qwzjvxw1qh8fz6b7nfkj3zvk9jvf"))))
1850 (build-system gnu-build-system)
1851 (inputs
1852 (list ncurses))
1853 (home-page "https://ytalk.ourproject.org")
1854 (synopsis "Multi-user chat program")
1855 (description "Ytalk is a replacement for the BSD talk program. Its main
1856 advantage is the ability to communicate with any arbitrary number of users at
1857 once. It supports both talk protocols (\"talk\" and \"ntalk\") and can communicate
1858 with several different talk daemons at the same time.")
1859 (license license:gpl2+)))
1860
1861 (define-public gloox
1862 (package
1863 (name "gloox")
1864 (version "1.0.24")
1865 (source
1866 (origin
1867 (method url-fetch)
1868 (uri (string-append "https://camaya.net/download/gloox-"
1869 version ".tar.bz2"))
1870 (sha256
1871 (base32 "1jgrd07qr9jvbb5hcmhrqz4w4lvwc51m30jls1fgxf1f5az6455f"))))
1872 (build-system gnu-build-system)
1873 (inputs
1874 (list libidn gnutls zlib))
1875 (native-inputs
1876 (list pkg-config))
1877 (synopsis "Portable high-level Jabber/XMPP library for C++")
1878 (description
1879 "gloox is a full-featured Jabber/XMPP client library,
1880 written in ANSI C++. It makes writing spec-compliant clients easy
1881 and allows for hassle-free integration of Jabber/XMPP functionality
1882 into existing applications.")
1883 (home-page "https://camaya.net/gloox")
1884 (license license:gpl3)))
1885
1886 (define-public perl-net-psyc
1887 (package
1888 (name "perl-net-psyc")
1889 (version "1.3")
1890 (source
1891 (origin
1892 (method url-fetch)
1893 (uri (string-append "https://perl.psyc.eu/"
1894 "perlpsyc-" version ".zip"))
1895 (file-name (string-append name "-" version ".zip"))
1896 (sha256
1897 (base32
1898 "0vsjclglkwgbyd9m5ad642fyysxw2x725nhq4r2m9pvqaq6s5yf2"))))
1899 (build-system perl-build-system)
1900 (native-inputs
1901 (list unzip))
1902 (inputs
1903 (list perl-curses perl-io-socket-ssl))
1904 (arguments
1905 `(#:phases
1906 (modify-phases %standard-phases
1907 (delete 'configure) ; No configure script
1908 ;; There is a Makefile, but it does not install everything
1909 ;; (leaves out psycion) and says
1910 ;; "# Just to give you a rough idea". XXX: Fix it upstream.
1911 (replace 'build
1912 (lambda _ (invoke "make" "manuals")))
1913 (replace 'install
1914 (lambda* (#:key outputs #:allow-other-keys)
1915 (let* ((out (assoc-ref outputs "out"))
1916 (doc (string-append out "/share/doc/perl-net-psyc"))
1917 (man1 (string-append out "/share/man/man1"))
1918 (man3 (string-append out "/share/man/man3"))
1919 (bin (string-append out "/bin"))
1920 (libpsyc (string-append out "/lib/psyc/ion"))
1921 (libperl (string-append out "/lib/perl5/site_perl/"
1922 ,(package-version perl))))
1923
1924 (copy-recursively "lib/perl5" libperl)
1925 (copy-recursively "lib/psycion" libpsyc)
1926 (copy-recursively "bin" bin)
1927 (install-file "cgi/psycpager" (string-append doc "/cgi"))
1928 (copy-recursively "contrib" (string-append doc "/contrib"))
1929 (copy-recursively "hooks" (string-append doc "/hooks"))
1930 (copy-recursively "sdj" (string-append doc "/sdj"))
1931 (install-file "README.txt" doc)
1932 (install-file "TODO.txt" doc)
1933 (copy-recursively "share/man/man1" man1)
1934 (copy-recursively "share/man/man3" man3)
1935 #t)))
1936 (add-after 'install 'wrap-programs
1937 (lambda* (#:key outputs #:allow-other-keys)
1938 ;; Make sure all executables in "bin" find the Perl modules
1939 ;; provided by this package at runtime.
1940 (let* ((out (assoc-ref outputs "out"))
1941 (bin (string-append out "/bin/"))
1942 (path (getenv "PERL5LIB")))
1943 (for-each (lambda (file)
1944 (wrap-program file
1945 `("PERL5LIB" ":" prefix (,path))))
1946 (find-files bin "\\.*$"))
1947 #t))))))
1948 (description
1949 "@code{Net::PSYC} with support for TCP, UDP, Event.pm, @code{IO::Select} and
1950 Gtk2 event loops. This package includes 12 applications and additional scripts:
1951 psycion (a @uref{https://about.psyc.eu,PSYC} chat client), remotor (a control console
1952 for @uref{https://torproject.org,tor} router) and many more.")
1953 (synopsis "Perl implementation of PSYC protocol")
1954 (home-page "https://perl.psyc.eu")
1955 (license (list license:gpl2
1956 license:perl-license
1957 ;; contrib/irssi-psyc.pl:
1958 license:public-domain
1959 ;; bin/psycplay states AGPL with no version:
1960 license:agpl3+))))
1961
1962 (define-public libpsyc
1963 (package
1964 (name "libpsyc")
1965 (version "20160913")
1966 (source (origin
1967 (method url-fetch)
1968 (uri (string-append "http://www.psyced.org/files/"
1969 name "-" version ".tar.xz"))
1970 (sha256
1971 (base32
1972 "14q89fxap05ajkfn20rnhc6b1h4i3i2adyr7y6hs5zqwb2lcmc1p"))))
1973 (build-system gnu-build-system)
1974 (native-inputs
1975 (list perl netcat procps))
1976 (arguments
1977 `(#:make-flags
1978 (list "CC=gcc"
1979 (string-append "PREFIX=" (assoc-ref %outputs "out")))
1980 #:phases
1981 (modify-phases %standard-phases
1982 ;; The rust bindings are the only ones in use, the lpc bindings
1983 ;; are in psyclpc. The other bindings are not used by anything,
1984 ;; the chances are high that the bindings do not even work,
1985 ;; therefore we do not include them.
1986 ;; TODO: Get a cargo build system in Guix.
1987 (delete 'configure)))) ; no configure script
1988 (home-page "https://about.psyc.eu/libpsyc")
1989 (description
1990 "@code{libpsyc} is a PSYC library in C which implements
1991 core aspects of PSYC, useful for all kinds of clients and servers
1992 including psyced.")
1993 (synopsis "PSYC library in C")
1994 (license license:agpl3+)))
1995
1996 (define-public loudmouth
1997 (package
1998 (name "loudmouth")
1999 (version "1.5.4")
2000 (source
2001 (origin
2002 (method url-fetch)
2003 (uri (string-append "https://mcabber.com/files/loudmouth/"
2004 name "-" version ".tar.bz2"))
2005 (sha256
2006 (base32
2007 "03adv5xc84l9brcx0dpyqyffmsclans8yfrpnd357k6x3wfckjri"))))
2008 (build-system gnu-build-system)
2009 (outputs '("out" "doc"))
2010 (arguments
2011 `(#:configure-flags
2012 (list
2013 "--disable-static"
2014 "--enable-gtk-doc"
2015 (string-append "--with-html-dir="
2016 (assoc-ref %outputs "doc")
2017 "/share/gtk-doc/html"))
2018 #:make-flags
2019 (list
2020 "CFLAGS=-Wno-error=all")))
2021 (inputs
2022 `(("glib" ,glib)
2023 ("gnutls" ,gnutls)
2024 ("krb5" ,mit-krb5)
2025 ("libidn" ,libidn)))
2026 (native-inputs
2027 (list pkg-config check
2028 `(,glib "bin") ; gtester
2029 gtk-doc))
2030 (home-page "https://mcabber.com/")
2031 (description
2032 "Loudmouth is a lightweight and easy-to-use C library for programming
2033 with the XMPP (formerly known as Jabber) protocol. It is designed to be
2034 easy to get started with and yet extensible to let you do anything the XMPP
2035 protocol allows.")
2036 (synopsis "Asynchronous XMPP library")
2037 ;; The files have LGPL2.0+ headers, but COPYING specifies LGPL2.1.
2038 (license license:lgpl2.0+)))
2039
2040 (define-public mcabber
2041 (package
2042 (name "mcabber")
2043 (version "1.1.2")
2044 (source
2045 (origin
2046 (method url-fetch)
2047 (uri (string-append "https://mcabber.com/files/"
2048 name "-" version ".tar.bz2"))
2049 (sha256
2050 (base32 "0q1i5acyghsmzas88qswvki8kkk2nfpr8zapgnxbcd3lwcxl38f4"))))
2051 (build-system gnu-build-system)
2052 (arguments
2053 `(#:configure-flags
2054 (list
2055 "--disable-static"
2056 "--enable-otr"
2057 "--enable-enchant"
2058 "--enable-aspell")))
2059 (inputs
2060 (list gpgme
2061 libotr
2062 aspell
2063 enchant-1.6
2064 libidn
2065 glib
2066 ncurses
2067 loudmouth))
2068 (native-inputs
2069 `(("perl" ,perl)
2070 ("pkg-config" ,pkg-config)
2071 ("python" ,python-wrapper)))
2072 (home-page "https://mcabber.com")
2073 (description
2074 "Mcabber is a small XMPP (Jabber) console client, which includes features
2075 such as SASL and TLS support, @dfn{Multi-User Chat} (MUC) support, logging,
2076 command-completion, OpenPGP encryption, @dfn{Off-the-Record Messaging} (OTR)
2077 support, and more.")
2078 (synopsis "Small XMPP console client")
2079 (license license:gpl2+)))
2080
2081 (define-public freetalk
2082 (package
2083 (name "freetalk")
2084 (version "4.2")
2085 (source (origin
2086 (method url-fetch)
2087 (uri (string-append "mirror://gnu/freetalk/freetalk-"
2088 version ".tar.gz"))
2089 (sha256
2090 (base32
2091 "105mw7pg2mcp85r82cs4rv77nwvbw8025047364jzbq6lwllynxv"))))
2092 (build-system gnu-build-system)
2093 (arguments
2094 (list #:phases
2095 #~(modify-phases %standard-phases
2096 (add-after 'install 'wrap-program
2097 (lambda* (#:key inputs outputs #:allow-other-keys)
2098 (let ((out (assoc-ref outputs "out")))
2099 (wrap-program (string-append out "/bin/freetalk")
2100 `("PATH" ":" suffix
2101 ,(map (lambda (command)
2102 (dirname
2103 (search-input-file
2104 inputs (string-append "bin/" command))))
2105 ;; This list is not exhaustive: we assume that,
2106 ;; e.g., cat is packaged with other coreutils.
2107 (list "bash" ; src/{commands,util}.c et al
2108 "cat" ; extensions/first-time-run.sh
2109 "less")))))))))) ; extensions/history.scm.
2110 (native-inputs
2111 (list autoconf automake pkg-config texinfo))
2112 (inputs
2113 (list bash
2114 glib
2115 guile-3.0
2116 less
2117 loudmouth
2118 readline))
2119 (synopsis "Extensible console-based Jabber client")
2120 (description
2121 "GNU Freetalk is a command-line Jabber/XMPP chat client. It notably uses
2122 the Readline library to handle input, so it features convenient navigation of
2123 text as well as tab-completion of buddy names, commands and English words. It
2124 is also scriptable and extensible via Guile.")
2125 (home-page "https://www.gnu.org/software/freetalk/")
2126 (license license:gpl3+)))
2127
2128 (define-public libstrophe
2129 (package
2130 (name "libstrophe")
2131 (version "0.12.0")
2132 (source
2133 (origin
2134 (method git-fetch)
2135 (uri (git-reference
2136 (url "https://github.com/strophe/libstrophe")
2137 (commit version)))
2138 (file-name (git-file-name name version))
2139 (sha256
2140 (base32 "1apply301lxyjax2677bd5mc0a3233nm5qb7fiqpawq2n7vh17v0"))))
2141 (build-system gnu-build-system)
2142 (arguments
2143 (list #:configure-flags '(list "--disable-static")
2144 #:phases
2145 #~(modify-phases %standard-phases
2146 (add-after 'unpack 'patch-make
2147 (lambda _
2148 (substitute* "Makefile.am"
2149 (("'\\^xmpp_'") "'.'"))
2150 #t))
2151 (add-after 'install-licence-files 'install-extra-licence-files
2152 (lambda _
2153 (let ((license-directory (string-append #$output
2154 "/share/doc/"
2155 #$name "-" #$version "/")))
2156 (install-file "MIT-LICENSE.txt" license-directory)))))))
2157 (inputs
2158 (list expat openssl))
2159 (native-inputs
2160 (list autoconf automake libtool pkg-config))
2161 (synopsis "C library for writing XMPP clients")
2162 (description "Libstrophe is a minimal XMPP library written in C. It has
2163 almost no external dependencies, only an XML parsing library (expat or libxml
2164 are both supported).")
2165 (home-page "https://strophe.im/libstrophe/")
2166 ;; Dual-licensed.
2167 (license (list license:gpl3+ license:x11))))
2168
2169 (define-public profanity
2170 (package
2171 (name "profanity")
2172 (version "0.12.1")
2173 (source
2174 (origin
2175 (method url-fetch)
2176 (uri
2177 (string-append "https://profanity-im.github.io/tarballs/profanity-"
2178 version ".tar.gz"))
2179 (sha256
2180 (base32
2181 "0vihmlzxr6n3y6v0vdzzxh5p1i09p0hx6sd1b2pnpcgkgcg4hi73"))))
2182 (build-system glib-or-gtk-build-system)
2183 (arguments
2184 `(#:configure-flags
2185 (list
2186 "--disable-static"
2187 "--enable-notifications"
2188 "--enable-python-plugins"
2189 "--enable-c-plugins"
2190 "--enable-plugins"
2191 "--enable-otr"
2192 "--enable-pgp"
2193 "--enable-omemo"
2194 "--enable-icons-and-clipboard")))
2195 (native-inputs
2196 (list autoconf
2197 autoconf-archive
2198 automake
2199 cmocka
2200 libtool
2201 pkg-config))
2202 (inputs
2203 (list curl
2204 expat
2205 glib
2206 gpgme
2207 gtk+-2
2208 libgcrypt
2209 libnotify
2210 libotr
2211 libsignal-protocol-c
2212 libstrophe
2213 ncurses
2214 openssl
2215 python-wrapper
2216 readline
2217 sqlite))
2218 (synopsis "Console-based XMPP client")
2219 (description "Profanity is a console based XMPP client written in C
2220 using ncurses and libmesode, inspired by Irssi.")
2221 (home-page "https://profanity-im.github.io")
2222 (properties `((release-monitoring-url . ,home-page)))
2223 (license license:gpl3+)))
2224
2225 (define-public libircclient
2226 (package
2227 (name "libircclient")
2228 (version "1.10")
2229 (source
2230 (origin
2231 (method url-fetch)
2232 (uri (string-append "mirror://sourceforge/libircclient/libircclient/"
2233 version "/libircclient-" version ".tar.gz"))
2234 (sha256
2235 (base32
2236 "0b9wa0h3xc31wpqlvgxgnvqp5wgx3kwsf5s9432m5cj8ycx6zcmv"))))
2237 (build-system gnu-build-system)
2238 (inputs
2239 (list openssl))
2240 (arguments
2241 `(#:configure-flags
2242 (list (string-append "--libdir="
2243 (assoc-ref %outputs "out") "/lib")
2244 "--enable-shared"
2245 "--enable-ipv6"
2246 "--enable-openssl")
2247 #:tests? #f)) ; no test suite
2248 (home-page "https://www.ulduzsoft.com/libircclient/")
2249 (synopsis "Library implementing the client IRC protocol")
2250 (description "Libircclient is a library which implements the client IRC
2251 protocol. It is designed to be small, fast, portable and compatible with the
2252 RFC standards as well as non-standard but popular features. It can be used for
2253 building the IRC clients and bots.")
2254 (license license:lgpl3+)))
2255
2256 (define-public toxic
2257 (package
2258 (name "toxic")
2259 (version "0.8.4")
2260 (source
2261 (origin
2262 (method git-fetch)
2263 (uri (git-reference
2264 (url "https://github.com/JFreegman/toxic")
2265 (commit (string-append "v" version))))
2266 (sha256
2267 (base32 "0p1cmj1kyp506y5xm04mhlznhf5wcylvgsn6b307ms91vjqs3fg2"))
2268 (file-name (git-file-name name version))))
2269 (build-system gnu-build-system)
2270 (arguments
2271 `(#:tests? #f ; no tests
2272 #:make-flags
2273 (list
2274 "CC=gcc"
2275 (string-append "PREFIX="
2276 (assoc-ref %outputs "out")))
2277 #:phases
2278 (modify-phases %standard-phases
2279 (delete 'configure)
2280 (add-before 'build 'enable-python-scripting
2281 (lambda _
2282 ;; XXX: For compatibility with Python 3.8, adjust python3-config
2283 ;; invokation to include --embed; see
2284 ;; <https://github.com/JFreegman/toxic/issues/533>.
2285 (substitute* "cfg/checks/python.mk"
2286 (("python3-config --ldflags")
2287 "python3-config --ldflags --embed"))
2288 (setenv "ENABLE_PYTHON" "1")
2289 #t)))))
2290 (inputs
2291 (list c-toxcore
2292 curl
2293 freealut
2294 gdk-pixbuf ; for libnotify.pc
2295 libconfig
2296 libnotify
2297 libpng
2298 libvpx
2299 libx11
2300 ncurses
2301 openal
2302 python
2303 qrencode))
2304 (native-inputs
2305 (list pkg-config))
2306 (home-page "https://github.com/JFreegman/toxic")
2307 (synopsis "Tox chat client using ncurses")
2308 (description "Toxic is a console-based instant messaging client, using
2309 c-toxcore and ncurses. It provides audio calls, sound and desktop
2310 notifications, and Python scripting support.")
2311 (license license:gpl3+)))
2312
2313 (define-public libqmatrixclient
2314 (package
2315 (name "libqmatrixclient")
2316 (version "0.5.3.2")
2317 (source
2318 (origin
2319 (method git-fetch)
2320 (uri (git-reference
2321 (url "https://github.com/quotient-im/libQuotient")
2322 (commit version)))
2323 (file-name (git-file-name name version))
2324 (sha256
2325 (base32 "0gkwr3yw6k2m0j8cc085b5p2q788rf5nhp1p5hc5d55pc7mci2qs"))))
2326 (build-system cmake-build-system)
2327 (inputs
2328 (list qtbase-5 qtmultimedia-5))
2329 (arguments
2330 `(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON")
2331 #:tests? #f)) ; no tests
2332 (home-page "https://matrix.org/docs/projects/sdk/libqmatrixclient.html")
2333 (synopsis "Qt5 client library for the Matrix instant messaging protocol")
2334 (description "libqmatrixclient is a Qt5 library to write clients for the
2335 Matrix instant messaging protocol. Quaternion is the reference client
2336 implementation. Quaternion and libqmatrixclient together form the
2337 QMatrixClient project.")
2338 (license license:lgpl2.1+)))
2339
2340 (define-public mtxclient
2341 (package
2342 (name "mtxclient")
2343 (version "0.7.0")
2344 (source
2345 (origin
2346 (method git-fetch)
2347 (uri (git-reference
2348 (url "https://github.com/Nheko-Reborn/mtxclient")
2349 (commit (string-append "v" version))))
2350 (file-name (git-file-name name version))
2351 (sha256
2352 (base32 "0kgz9i3xgyk1a82sv48a1m8gdxg0cl5pgd5imgwy519vvjlkwv48"))))
2353 (arguments
2354 `(#:configure-flags
2355 (list
2356 ;; Disable example binaries (not installed)
2357 "-DBUILD_LIB_EXAMPLES=OFF")
2358 #:phases
2359 (modify-phases %standard-phases
2360 (add-before 'configure 'disable-network-tests
2361 (lambda _
2362 (substitute* "CMakeLists.txt"
2363 (("add_test\\((BasicConnectivity|ClientAPI|Devices|MediaAPI|Encryption|Pushrules)")
2364 "# add_test")))))))
2365 (build-system cmake-build-system)
2366 (inputs
2367 (list boost
2368 coeurl
2369 curl
2370 json-modern-cxx
2371 libevent
2372 libolm
2373 libsodium
2374 openssl
2375 spdlog
2376 zlib))
2377 (native-inputs
2378 (list googletest pkg-config))
2379 (home-page "https://github.com/Nheko-Reborn/mtxclient")
2380 (synopsis "Client API library for the Matrix protocol")
2381 (description "@code{mtxclient} is a C++ library that implements client API
2382 for the Matrix protocol. It is built on to of @code{Boost.Asio}.")
2383 (license license:expat)))
2384
2385 (define-public nheko
2386 (package
2387 (name "nheko")
2388 (version "0.9.3")
2389 (source
2390 (origin
2391 (method git-fetch)
2392 (uri (git-reference
2393 (url "https://github.com/Nheko-Reborn/nheko")
2394 (commit (string-append "v" version))))
2395 (file-name (git-file-name name version))
2396 (sha256
2397 (base32 "1941jvk72qy9g41cs2p3d6fphkg8ccjlsiclwymvzdyi7s3ilml7"))
2398 (modules '((guix build utils)))
2399 (snippet
2400 '(begin
2401 (delete-file-recursively "third_party")))))
2402 (arguments
2403 (list
2404 #:tests? #f ;no test target
2405 #:configure-flags
2406 #~(list "-DCMAKE_BUILD_TYPE=Release"
2407 "-DBUILD_DOCS=ON"
2408 ;; Fix required because we are using a static SingleApplication
2409 "-DCMAKE_CXX_FLAGS= \"-DQAPPLICATION_CLASS=QApplication\" "
2410 ;; Compile Qml will make Nheko faster, but you will need to recompile
2411 ;; it, when you update Qt. That's fine for us.
2412 "-DCOMPILE_QML=ON")
2413 #:phases
2414 #~(modify-phases %standard-phases
2415 (add-after 'unpack 'unbundle-dependencies
2416 (lambda _
2417 (let ((single-app #$(this-package-input "single-application-qt5")))
2418 (substitute* "CMakeLists.txt"
2419 ;; Remove include and source dirs,replace with the correct one
2420 (("third_party/blurhash/blurhash.cpp") "")
2421 (("third_party/cpp-httplib-0.5.12")
2422 (string-append "\"" single-app "/include\""))
2423 (("add_subdirectory.*third_party/SingleApplication.*") "")
2424 ;; Link using the correct static/shared libs
2425 (("SingleApplication::SingleApplication")
2426 (string-append
2427 ;; Dynamic libraries
2428 "httplib" "\n" "blurhash" "\n"
2429 ;; Static library
2430 single-app "/lib/libSingleApplication.a"))))))
2431 (add-after 'unpack 'fix-determinism
2432 (lambda _
2433 ;; Make Qt deterministic.
2434 (setenv "QT_RCC_SOURCE_DATE_OVERRIDE" "1")))
2435 (add-after 'install 'wrap-program
2436 (lambda _
2437 (let ((gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
2438 (wrap-program (string-append #$output "/bin/nheko")
2439 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path)))))))))
2440 (build-system qt-build-system)
2441 (inputs
2442 (list boost
2443 blurhash
2444 cpp-httplib
2445 cmark
2446 coeurl
2447 curl
2448 gst-plugins-base
2449 gst-plugins-bad ; sdp & webrtc for voip
2450 gst-plugins-good ; rtpmanager for voip
2451 json-modern-cxx
2452 libevent
2453 libnice ; for voip
2454 libolm
2455 lmdb
2456 lmdbxx
2457 mtxclient
2458 openssl
2459 qtbase-5
2460 qtdeclarative-5
2461 qtkeychain
2462 qtgraphicaleffects
2463 qtmultimedia-5
2464 qtquickcontrols2
2465 qtsvg-5
2466 spdlog
2467 single-application-qt5
2468 xcb-util-wm
2469 zlib))
2470 (native-inputs
2471 (list asciidoc doxygen graphviz pkg-config qttools))
2472 (home-page "https://github.com/Nheko-Reborn/nheko")
2473 (synopsis "Desktop client for Matrix using Qt and C++14")
2474 (description "@code{Nheko} want to provide a native desktop app for the
2475 Matrix protocol that feels more like a mainstream chat app and less like an IRC
2476 client.
2477
2478 Many matrix features are supported, including user registration, rooms, typing
2479 notification, emojis, E2E encryption, and voip calls.")
2480 (license license:gpl3+)))
2481
2482 (define-public quaternion
2483 (package
2484 (name "quaternion")
2485 (version "0.0.9.4f")
2486 (outputs '("out" "debug"))
2487 (source
2488 (origin
2489 (method git-fetch)
2490 (uri (git-reference
2491 (url "https://github.com/quotient-im/Quaternion")
2492 (commit version)))
2493 (file-name (git-file-name name version))
2494 (sha256
2495 (base32 "1q9ddz4rs02a0w3lwrsjnh59khv38cq9f0kv09vnwvazvayn87ck"))))
2496 (build-system qt-build-system)
2497 (inputs
2498 (list libqmatrixclient
2499 qtbase-5
2500 qtdeclarative-5
2501 qtmultimedia-5
2502 qtquickcontrols
2503 qtquickcontrols2
2504 qtsvg-5
2505 qttools
2506 xdg-utils))
2507 (arguments
2508 `(#:tests? #f)) ; no tests
2509 (home-page "https://matrix.org/docs/projects/client/quaternion.html")
2510 (synopsis "Graphical client for the Matrix instant messaging protocol")
2511 (description "Quaternion is a Qt5 desktop client for the Matrix instant
2512 messaging protocol. It uses libqmatrixclient and is its reference client
2513 implementation. Quaternion and libqmatrixclient together form the
2514 QMatrixClient project.")
2515 (license (list license:gpl3+ ; all source code
2516 license:lgpl3+)))) ; icons/breeze
2517
2518 (define-public hangups
2519 (package
2520 (name "hangups")
2521 (version "0.4.18")
2522 (source
2523 (origin
2524 (method url-fetch)
2525 (uri (pypi-uri "hangups" version))
2526 (sha256
2527 (base32 "12mq22lygh6vz2h5dpvyjk18hx3jphb4kkavqsy298c7hw60hn7l"))))
2528 (build-system python-build-system)
2529 (arguments
2530 `(#:phases
2531 (modify-phases %standard-phases
2532 (add-before 'build 'relax-dependencies
2533 ;; Relax overly strict package version specifications.
2534 (lambda _
2535 (substitute* "setup.py"
2536 (("==") ">=")
2537 ((",<.*'") "'"))))
2538 (replace 'check
2539 (lambda* (#:key tests? #:allow-other-keys)
2540 (when tests?
2541 (invoke "pytest" "hangups")))))))
2542 (propagated-inputs
2543 (list python-aiohttp
2544 python-appdirs
2545 python-async-timeout
2546 python-configargparse
2547 python-mechanicalsoup
2548 python-protobuf
2549 python-readlike
2550 python-reparser
2551 python-requests
2552 python-urwid))
2553 (native-inputs
2554 (list python-httpretty python-pytest))
2555 (home-page "https://hangups.readthedocs.io/")
2556 (synopsis "Instant messaging client for Google Hangouts")
2557 (description
2558 "Hangups is an instant messaging client for Google Hangouts. It includes
2559 both a Python library and a reference client with a text-based user interface.
2560
2561 Hangups is implements a reverse-engineered version of Hangouts' proprietary,
2562 non-interoperable protocol, which allows it to support features like group
2563 messaging that aren’t available to clients that connect over XMPP.")
2564 (license license:expat)))
2565
2566 (define-public telegram-purple
2567 (package
2568 (name "telegram-purple")
2569 (version "1.4.7")
2570 (home-page "https://github.com/majn/telegram-purple")
2571 (source (origin
2572 (method git-fetch)
2573 (uri (git-reference
2574 (url home-page)
2575 (commit (string-append "v" version))
2576 (recursive? #t)))
2577 (sha256
2578 (base32
2579 "14h8lvj0kjvy1b5i84ha2w9rl3akxjwwvsp5j4dcxwfghrkzqgf2"))
2580 (modules '((guix build utils)))
2581 (snippet
2582 '(begin
2583 (substitute* "Makefile.in"
2584 ;; By default these two directories point to Pidgin's own
2585 ;; prefix.
2586 (("^PLUGIN_DIR_PURPLE=.*")
2587 (string-append
2588 "exec_prefix := @exec_prefix@\n"
2589 "PLUGIN_DIR_PURPLE := @libdir@/purple-2\n"))
2590 (("^DATA_ROOT_DIR_PURPLE=.*")
2591 "DATA_ROOT_DIR_PURPLE := @datarootdir@\n")
2592
2593 ;; Honor sysconfdir instead of trying to write to /etc.
2594 (("DESTDIR\\)/etc/telegram-purple")
2595 "DESTDIR)@sysconfdir@/telegram-purple"))
2596 #t))
2597 (patches (search-patches "telegram-purple-adjust-test.patch"))
2598 (file-name (git-file-name name version))))
2599 (build-system gnu-build-system)
2600 (native-inputs
2601 `(("pkg-config" ,pkg-config)
2602 ("gettext" ,gettext-minimal)
2603 ("which" ,which)))
2604 (inputs
2605 (list pidgin
2606 libgcrypt
2607 libwebp
2608 glib
2609 gtk+-2
2610 zlib))
2611 (arguments
2612 `(#:phases
2613 (modify-phases %standard-phases
2614 ;; We're using release tag for repository checkout - let's prepare
2615 ;; header defining GIT_COMMIT manually instead of running git to
2616 ;; identify version which is being compiled. Git repository
2617 ;; is removed anyway and only source code is kept.
2618 (add-after 'unpack 'prepare-commit.h
2619 (lambda _
2620 (with-output-to-file "./commit.h"
2621 (lambda ()
2622 (display
2623 (string-append "//generated by guix, use version instead of "
2624 "commit\n"
2625 "#ifndef GIT_COMMIT\n"
2626 "# define GIT_COMMIT \"v"
2627 ,version "\"\n"
2628 "#endif\n"))))
2629 #t))
2630 (add-before 'configure 'set-SHELL-variables
2631 ;; Set these environment variables so that 'tgl/configure' uses the
2632 ;; right shell and not /bin/sh.
2633 (lambda _
2634 (let ((bash (which "bash")))
2635 (setenv "SHELL" bash)
2636 (setenv "CONFIG_SHELL" bash)
2637 #t))))))
2638 (synopsis "Telegram messaging support for Pidgin")
2639 (description
2640 "Telegram-purple is a plugin for Libpurple, the communication library
2641 used by the Pidgin instant messaging client, that adds support for the
2642 Telegram messenger.
2643
2644 This package is on ``life support'' until @code{tdlib-purple} is a full
2645 replacement.")
2646
2647 ;; Code under tgl/ (the Telegram library) is LGPLv2.1+, but the plugin
2648 ;; itself is GPLv2+.
2649 (license license:gpl2+)))
2650
2651 (define-public tdlib
2652 (package
2653 (name "tdlib")
2654 (version "1.8.0")
2655 (source
2656 (origin
2657 (method git-fetch)
2658 (uri (git-reference
2659 (url "https://github.com/tdlib/td")
2660 (commit (string-append "v" version))))
2661 (sha256
2662 (base32 "19psqpyh9a2kzfdhgqkirpif4x8pzy89phvi59dq155y30a3661q"))
2663 (file-name (git-file-name name version))))
2664 (build-system cmake-build-system)
2665 (arguments
2666 `(#:configure-flags
2667 (list "-DCMAKE_BUILD_TYPE=Release"
2668 "-DTD_ENABLE_LTO=OFF") ; FIXME: Get LTO to work.
2669 #:phases
2670 (modify-phases %standard-phases
2671 (add-after 'unpack 'remove-failing-tests
2672 (lambda _
2673 (substitute* "test/CMakeLists.txt"
2674 ;; The test cases are compiled into a distinct binary
2675 ;; which uses mtproto.cpp to attempt to connect to
2676 ;; a remote server. Removing this file from the sources
2677 ;; list disables those specific test cases.
2678 (("\\$\\{CMAKE_CURRENT_SOURCE_DIR\\}/mtproto.cpp") "")))))))
2679 (native-inputs
2680 (list gperf openssl zlib php doxygen))
2681 (synopsis "Cross-platform library for building Telegram clients")
2682 (description "Tdlib is a cross-platform library for creating custom
2683 Telegram clients following the official Telegram API. It can be easily used
2684 from almost any programming language with a C-FFI and features first-class
2685 support for high performance Telegram Bot creation.")
2686 (home-page "https://core.telegram.org/tdlib")
2687 (license license:boost1.0)))
2688
2689 (define-public purple-mm-sms
2690 (package
2691 (name "purple-mm-sms")
2692 (version "0.1.4")
2693 (source (origin
2694 (method git-fetch)
2695 (uri (git-reference
2696 (url "https://source.puri.sm/Librem5/purple-mm-sms.git")
2697 (commit (string-append "v" version))))
2698 (file-name (git-file-name name version))
2699 (sha256
2700 (base32
2701 "1daf7zl8bhhm1szkgxflpqql69f2w9i9nlgf1n4p1nynxifz1bim"))))
2702 (build-system gnu-build-system)
2703 (arguments
2704 `(#:make-flags
2705 (let ((out (assoc-ref %outputs "out")))
2706 ;; Fix hardcoded paths
2707 (list (string-append "PREFIX=" out)
2708 (string-append "PLUGIN_DIR_PURPLE=" out "/lib/purple-2")
2709 (string-append "DATA_ROOT_DIR_PURPLE=" out "/share")))
2710 #:tests? #f ; no tests
2711 #:phases
2712 (modify-phases %standard-phases
2713 (delete 'configure))))
2714 (native-inputs
2715 `(("glib:bin" ,glib "bin")
2716 ("pkg-config" ,pkg-config)))
2717 (inputs
2718 (list modem-manager pidgin))
2719 (synopsis "Libpurple plugin for SMS via ModemManager")
2720 (description "Plugin for libpurple to allow sending SMS using ModemManager.")
2721 (home-page "https://source.puri.sm/Librem5/purple-mm-sms")
2722 (license license:gpl2+)))
2723
2724 (define-public purple-lurch
2725 (package
2726 (name "purple-lurch")
2727 (version "0.7.0")
2728 (source
2729 (origin
2730 (method git-fetch)
2731 (uri (git-reference (url "https://github.com/gkdr/lurch")
2732 (commit (string-append "v" version))))
2733 (modules '((guix build utils)))
2734 (snippet
2735 `(begin
2736 ;; Submodules
2737 (delete-file-recursively "lib")))
2738 (file-name
2739 (git-file-name name version))
2740 (sha256
2741 (base32 "1ipd9gwh04wbqv6c10yxi02lc2yjsr02hwjycgxhl4r9x8b33psd"))))
2742 (build-system cmake-build-system)
2743 (arguments
2744 `(#:phases (modify-phases %standard-phases
2745 (replace 'configure
2746 (lambda* (#:key outputs #:allow-other-keys)
2747 (let ((out (assoc-ref outputs "out")))
2748 (substitute* "Makefile"
2749 (("^PURPLE_PLUGIN_DIR = .*")
2750 (string-append "PURPLE_PLUGIN_DIR = " out
2751 "/lib/purple-2\n")))
2752 (setenv "CC" "gcc")))))
2753 #:parallel-tests? #f))
2754 (native-inputs (list cmocka pkg-config))
2755 (inputs (list axc
2756 glib
2757 libgcrypt
2758 libomemo
2759 libsignal-protocol-c
2760 libxml2
2761 minixml
2762 pidgin
2763 sqlite))
2764 (synopsis "OMEMO Encryption for libpurple")
2765 (description "Purple-lurch plugin adds end-to-end encryption support
2766 through the Double Ratchet (Axolotl) algorithm, to @code{libpurple}
2767 applications using @acronym{XMPP, Extensible Messaging and Presence Protocol},
2768 through its standard XEP-0384: @acronym{OMEMO, OMEMO Multi-End Message and
2769 Object Encryption} Encryption. It provides confidentiality, (weak) forward
2770 secrecy, break-in recovery, authentication, integrity, deniability, and
2771 asynchronicity.")
2772 (home-page "https://github.com/gkdr/lurch")
2773 (license license:gpl3+)))
2774
2775 (define-public libphonenumber
2776 (package
2777 (name "libphonenumber")
2778 (version "8.11.3")
2779 (source (origin
2780 (method git-fetch)
2781 (uri (git-reference
2782 (url "https://github.com/google/libphonenumber")
2783 (commit (string-append "v" version))))
2784 (file-name (git-file-name name version))
2785 (patches (search-patches
2786 "libphonenumber-reproducible-build.patch"))
2787 (sha256
2788 (base32
2789 "06y3mh1d1mks6d0ynxp3980g712nkf8l5nyljpybsk326b246hg9"))))
2790 (arguments
2791 `(#:test-target "tests"
2792 #:phases
2793 (modify-phases %standard-phases
2794 (add-after 'unpack 'change-directory
2795 (lambda _ (chdir "cpp"))))))
2796 (build-system cmake-build-system)
2797 (native-inputs
2798 (list googletest pkg-config))
2799 (inputs
2800 (list boost protobuf icu4c))
2801 (synopsis "Library for parsing and using phone numbers")
2802 (description
2803 "This package provides a C++ library for parsing, formatting, and
2804 validating international phone numbers.")
2805 (home-page "https://github.com/google/libphonenumber")
2806 (license license:asl2.0)))
2807
2808 (define-public chatty
2809 (package
2810 (name "chatty")
2811 (version "0.4.0")
2812 (source (origin
2813 (method git-fetch)
2814 (uri (git-reference
2815 (url "https://source.puri.sm/Librem5/chatty.git")
2816 (commit (string-append "v" version))))
2817 (file-name (git-file-name name version))
2818 (sha256
2819 (base32
2820 "12k1a5xrwd6zk4x0m53hbzggk695z3bpbzy1wcikzy0jvch7h13d"))))
2821 (build-system meson-build-system)
2822 (arguments
2823 '(#:phases
2824 (modify-phases %standard-phases
2825 (add-after 'unpack 'skip-updating-desktop-database
2826 (lambda _
2827 (substitute* "meson.build"
2828 (("meson.add_install_script.*") "")))))))
2829 (native-inputs
2830 (list gettext-minimal `(,glib "bin") pkg-config protobuf))
2831 (inputs
2832 (list feedbackd
2833 folks
2834 gsettings-desktop-schemas
2835 gspell
2836 json-glib
2837 libgcrypt
2838 libgee
2839 libhandy
2840 libolm
2841 libphonenumber
2842 modem-manager
2843 pidgin
2844 purple-mm-sms
2845 sqlite))
2846 (propagated-inputs
2847 (list adwaita-icon-theme evolution-data-server))
2848 (synopsis "Mobile client for XMPP and SMS messaging")
2849 (description "Chatty is a chat program for XMPP and SMS. It works on mobile
2850 as well as on desktop platforms. It's based on libpurple and ModemManager.")
2851 (home-page "https://source.puri.sm/Librem5/chatty")
2852 (license license:gpl3+)))
2853
2854 (define-public mosquitto
2855 (package
2856 (name "mosquitto")
2857 (version "1.6.12")
2858 (source
2859 (origin
2860 (method url-fetch)
2861 (uri (string-append "https://mosquitto.org/files/source/mosquitto-"
2862 version ".tar.gz"))
2863 (sha256
2864 (base32
2865 "1yq7y329baa1ly488rw125c3mvsnsa7kjkik602xv1xpkz8p73al"))))
2866 (build-system cmake-build-system)
2867 (inputs
2868 (list openssl))
2869 (synopsis "Message broker")
2870 (description "This package provides Eclipse Mosquitto, a message broker
2871 that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1. Mosquitto
2872 is lightweight and is suitable for use on all devices from low power single
2873 board computers to full servers.
2874
2875 The MQTT protocol provides a lightweight method of carrying out messaging
2876 using a publish/subscribe model. This makes it suitable for Internet of
2877 Things messaging such as with low power sensors or mobile devices such
2878 as phones, embedded computers or microcontrollers.")
2879 (home-page "https://mosquitto.org/")
2880 ;; Dual licensed.
2881 (license (list license:epl1.0 license:edl1.0))))
2882
2883 (define-public movim-desktop
2884 (let ((commit "83d583b83629dbd2ec448da9a1ffd81f6c1fb295")
2885 (revision "3"))
2886 (package
2887 (name "movim-desktop")
2888 (version
2889 (git-version "0.14.0" revision commit))
2890 (source
2891 (origin
2892 (method git-fetch)
2893 (uri
2894 (git-reference
2895 (url "https://github.com/movim/movim_desktop")
2896 (commit commit)))
2897 (file-name (git-file-name name version))
2898 (sha256
2899 (base32 "1lsa3k3wx1d2lk0qs0k5jc5bmapnmpzwynprjf2wihh8c8y3iwlz"))))
2900 (build-system qt-build-system)
2901 (arguments
2902 `(#:tests? #f ; No target
2903 #:phases
2904 (modify-phases %standard-phases
2905 (add-after 'unpack 'patch
2906 (lambda* (#:key outputs #:allow-other-keys)
2907 (substitute* `("CMakeLists.txt" "movim.desktop")
2908 (("/usr")
2909 (assoc-ref outputs "out"))
2910 (("\"build")
2911 "\"../build"))
2912 #t)))))
2913 (inputs
2914 (list qtbase-5 qtdeclarative-5 qtwebchannel))
2915 (propagated-inputs
2916 (list qtwebengine))
2917 (home-page "https://movim.eu/")
2918 (synopsis "Desktop Application for Movim")
2919 (description
2920 "Movim-Desktop is a desktop application, relying on Qt, for the Movim
2921 social and chat platform.")
2922 (license license:gpl3+))))
2923
2924 (define-public psi-plus
2925 (package
2926 (name "psi-plus")
2927 (version "1.5.1484")
2928 (source
2929 (origin
2930 (method git-fetch)
2931 (uri
2932 (git-reference
2933 (url "https://github.com/psi-plus/psi-plus-snapshots")
2934 (commit version)))
2935 (file-name (git-file-name name version))
2936 (modules '((guix build utils)))
2937 (snippet
2938 `(begin
2939 (delete-file-recursively "3rdparty")))
2940 (sha256
2941 (base32 "1jsm39nzzbqkp3zc0xqx7jid6p4q1ra28xad38wjr2l1jb8qjn24"))))
2942 (build-system qt-build-system)
2943 (arguments
2944 `(#:tests? #f ; No target
2945 #:imported-modules
2946 (,@%qt-build-system-modules
2947 (guix build glib-or-gtk-build-system))
2948 #:modules
2949 ((guix build qt-build-system)
2950 ((guix build glib-or-gtk-build-system)
2951 #:prefix glib-or-gtk:)
2952 (guix build utils))
2953 #:configure-flags
2954 (list
2955 "-DBUILD_PSIMEDIA=ON" ; For A/V support
2956 "-DENABLE_PLUGINS=ON"
2957 "-DUSE_HUNSPELL=OFF" ; Use Enchant instead
2958 "-DUSE_ENCHANT=ON"
2959 "-DUSE_CCACHE=OFF") ; Not required
2960 #:phases
2961 (modify-phases %standard-phases
2962 (add-after 'unpack 'patch-source
2963 (lambda _
2964 (substitute* "CMakeLists.txt"
2965 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/http-parser/http_parser.h")
2966 "")
2967 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qhttp/qhttp.pro")
2968 "")
2969 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qite/qite.pro")
2970 "")
2971 (("add_subdirectory\\( 3rdparty \\)")
2972 ""))
2973 (substitute* "src/CMakeLists.txt"
2974 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qite/libqite")
2975 "")
2976 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/http-parser")
2977 "")
2978 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qhttp/src/private")
2979 "")
2980 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qhttp/src")
2981 "")
2982 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty")
2983 "")
2984 (("add_dependencies\\(\\$\\{PROJECT_NAME\\} qhttp\\)")
2985 "target_link_libraries(${PROJECT_NAME} qhttp)"))
2986 (substitute* "src/src.cmake"
2987 (("include\\(\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qite/libqite/libqite.cmake\\)")
2988 "list(APPEND EXTRA_LIBS qite)"))
2989 (substitute* '("src/filesharingmanager.h" "src/widgets/psirichtext.cpp"
2990 "src/filesharingmanager.cpp" "src/widgets/psitextview.cpp"
2991 "src/chatview_te.cpp" "src/msgmle.cpp")
2992 (("qite.h")
2993 "qite/qite.h")
2994 (("qiteaudio.h")
2995 "qite/qiteaudio.h")
2996 (("qiteaudiorecorder.h")
2997 "qite/qiteaudiorecorder.h"))
2998 #t))
2999 (add-after 'install 'wrap-env
3000 (lambda* (#:key outputs #:allow-other-keys)
3001 (let ((out (assoc-ref outputs "out")))
3002 (for-each
3003 (lambda (name)
3004 (let ((file (string-append out "/bin/" name))
3005 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH"))
3006 (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
3007 (wrap-program file
3008 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
3009 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))
3010 '("psi-plus")))
3011 #t))
3012 (add-after 'wrap-env 'glib-or-gtk-compile-schemas
3013 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
3014 (add-after 'glib-or-gtk-compile-schemas 'glib-or-gtk-wrap
3015 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
3016 (native-inputs
3017 `(("glib:bin" ,glib "bin")
3018 ("gobject-introspection" ,gobject-introspection)
3019 ("perl" ,perl)
3020 ("pkg-config" ,pkg-config)
3021 ("python" ,python-wrapper)
3022 ("ruby" ,ruby)))
3023 (inputs
3024 `(("blake2" ,libb2)
3025 ("dbus" ,dbus)
3026 ("enchant" ,enchant)
3027 ("glib" ,glib)
3028 ("gstreamer" ,gstreamer)
3029 ("gst-plugins-base" ,gst-plugins-base)
3030 ("http-parser" ,http-parser)
3031 ("libgcrypt" ,libgcrypt)
3032 ("libgpg-error" ,libgpg-error)
3033 ("libidn" ,libidn)
3034 ("libotr" ,libotr)
3035 ("libsignal-protocol-c" ,libsignal-protocol-c)
3036 ("libtidy" ,tidy-html)
3037 ("openssl" ,openssl)
3038 ("qca" ,qca)
3039 ("qhttp" ,qhttp)
3040 ("qite" ,qite)
3041 ("qtbase" ,qtbase-5)
3042 ("qtkeychain" ,qtkeychain)
3043 ("qtmultimedia-5" ,qtmultimedia-5)
3044 ("qtsvg-5" ,qtsvg-5)
3045 ("qtx11extras" ,qtx11extras)
3046 ("usrsctp" ,usrsctp)
3047 ("x11" ,libx11)
3048 ("xext" ,libxext)
3049 ("xcb" ,libxcb)
3050 ("xss" ,libxscrnsaver)
3051 ("zlib" ,zlib)))
3052 (home-page "https://psi-plus.com/")
3053 (synopsis "Qt-based XMPP Client")
3054 (description
3055 "Psi+ is a spin-off of Psi XMPP client. It is a powerful XMPP client
3056 designed for experienced users.")
3057 (license license:gpl2+)))
3058
3059 (define-public python-zulip
3060 (package
3061 (name "python-zulip")
3062 (version "0.7.1")
3063 (source
3064 (origin
3065 ;; There is no source on Pypi.
3066 (method git-fetch)
3067 (uri (git-reference
3068 (url "https://github.com/zulip/python-zulip-api")
3069 (commit version)))
3070 (file-name (git-file-name name version))
3071 (sha256
3072 (base32
3073 "0da1ki1v252avy27j6d7snnc0gyq0xa9fypm3qdmxhw2w79d6q36"))))
3074 (build-system python-build-system)
3075 (arguments
3076 `(#:phases
3077 (modify-phases %standard-phases
3078 (add-after 'unpack 'cd-to-zulip-dir
3079 (lambda _ (chdir "zulip")))
3080 (replace 'check
3081 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3082 (let ((test-zulip "../tools/test-zulip"))
3083 (when tests?
3084 (add-installed-pythonpath inputs outputs)
3085 (patch-shebang test-zulip)
3086 (invoke test-zulip))))))))
3087 (propagated-inputs
3088 (list python-matrix-client python-pyopenssl python-requests
3089 python-six))
3090 (native-inputs
3091 (list python-cython python-distro python-pytest))
3092 (home-page "https://github.com/zulip/python-zulip-api")
3093 (synopsis "Zulip's API Python bindings")
3094 (description
3095 "This package provides Python bindings to Zulip's API.")
3096 (license license:asl2.0)))
3097
3098 (define-public zulip-term
3099 (package
3100 (name "zulip-term")
3101 (version "0.5.2")
3102 (source
3103 (origin
3104 ;; Pypi package doesn't ship tests.
3105 (method git-fetch)
3106 (uri (git-reference
3107 (url "https://github.com/zulip/zulip-terminal")
3108 (commit version)))
3109 (file-name (git-file-name name version))
3110 (sha256
3111 (base32
3112 "1xhhy3v4wck74a83avil0rnmsi2grrh03cww19n5mv80p2q1cjmf"))
3113 (modules '((guix build utils)))
3114 (snippet
3115 '(begin
3116 (substitute* "setup.py"
3117 (("\\=\\=1\\.7") ">=1.7") ; pytest-mock
3118 (("\\=\\=2\\.5") ">=2.5") ; pytest-cov
3119 (("4\\.5\\.2") "4.4.2")) ; lxml
3120 #t))))
3121 (build-system python-build-system)
3122 (arguments
3123 '(#:phases
3124 (modify-phases %standard-phases
3125 (replace 'check
3126 (lambda* (#:key tests? #:allow-other-keys)
3127 (when tests?
3128 ;; Delete failing tests.
3129 (delete-file "tests/cli/test_run.py")
3130 (invoke "pytest"))
3131 #t)))))
3132 (inputs
3133 (list python-beautifulsoup4
3134 python-lxml
3135 python-mypy-extensions
3136 python-urwid
3137 python-urwid-readline
3138 python-zulip))
3139 (native-inputs
3140 (list python-distro python-pytest python-pytest-cov
3141 python-pytest-mock))
3142 (home-page "https://github.com/zulip/zulip-terminal")
3143 (synopsis "Zulip's official terminal client")
3144 (description "This package contains Zulip's official terminal client.")
3145 (license license:asl2.0)))
3146
3147 (define-public matterbridge
3148 (package
3149 (name "matterbridge")
3150 (version "1.24.0")
3151 (source (origin
3152 (method git-fetch)
3153 (uri (git-reference
3154 (url "https://github.com/42wim/matterbridge")
3155 (commit (string-append "v" version))))
3156 (file-name (git-file-name name version))
3157 (sha256
3158 (base32
3159 "0cd70x9685162c0imdici1ipl9lziq700wzyb5bsg610wfak3ms7"))))
3160 ;; Using the go-build-system results in the same error message
3161 ;; than in the bug 1551[1]. So we fix it by running go build
3162 ;; manually in the git repository as-is as this is the solution
3163 ;; given to that bug by the matterbridge developers.
3164 ;; [1]https://github.com/42wim/matterbridge/issues/1551
3165 (build-system gnu-build-system)
3166 (arguments
3167 `(#:phases (modify-phases %standard-phases
3168 (delete 'configure)
3169 (replace 'build
3170 (lambda* (#:key outputs #:allow-other-keys)
3171 (setenv "GOCACHE"
3172 (string-append (getcwd) "/go-build"))
3173 (setenv "GOBIN"
3174 (string-append (assoc-ref outputs "out") "/bin"))
3175 (invoke "go" "build" "-v" "-x")))
3176 (replace 'check
3177 (lambda* (#:key outputs tests? #:allow-other-keys)
3178 (when tests?
3179 (setenv "GOCACHE"
3180 (string-append (getcwd) "/go-build"))
3181 (setenv "GOBIN"
3182 (string-append (assoc-ref outputs "out")
3183 "/bin"))
3184 (invoke "go" "test" "-v" "-x"))))
3185 (replace 'install
3186 (lambda* (#:key outputs #:allow-other-keys)
3187 (setenv "GOCACHE"
3188 (string-append (getcwd) "/go-build"))
3189 (setenv "GOBIN"
3190 (string-append (assoc-ref outputs "out") "/bin"))
3191 (invoke "go" "install" "-v" "-x"))))))
3192 (native-inputs (list go))
3193 (synopsis "Bridge together various messaging networks and protocols")
3194 (description
3195 "Relays messages between different channels from various
3196 messaging networks and protocols. So far it supports mattermost, IRC, gitter,
3197 xmpp, slack, discord, telegram, rocketchat, twitch, ssh-chat, zulip, whatsapp,
3198 keybase, matrix, microsoft teams, nextcloud, mumble, vk and more with REST
3199 API. Mattermost is not required.")
3200 (home-page "https://github.com/42wim/matterbridge")
3201 (license license:asl2.0)))
3202
3203 (define-public jj
3204 (package
3205 (name "jj")
3206 (version "2")
3207 (source (origin
3208 (method url-fetch)
3209 (uri (string-append "https://23.fi/jj/jj-" version ".tar.gz"))
3210 (sha256
3211 (base32
3212 "02xz2ci93bccvil5iff804mh3zr5iqkf6zx5mxgraz17xg0azlgh"))))
3213 (build-system gnu-build-system)
3214 (arguments
3215 (list #:tests? #f ;There are no tests.
3216 #:make-flags
3217 #~(list (string-append "CC=" #$(cc-for-target))
3218 (string-append "PREFIX=" #$output))
3219 #:phases
3220 #~(modify-phases %standard-phases
3221 (delete 'configure)
3222 (replace 'install
3223 (lambda* (#:key inputs outputs #:allow-other-keys)
3224 (let* ((out (assoc-ref outputs "out"))
3225 (bin (string-append out "/bin")))
3226 (install-file "jj" bin)))))))
3227 (native-inputs (list pkg-config))
3228 (inputs (list glib loudmouth))
3229 (home-page "https://23.fi/jj/")
3230 (synopsis "FIFO based Jabber client")
3231 (description
3232 "jj is a simple file-system-based Jabber client, inspired by ii IRC
3233 client. Interaction with jj is done by writing and reading files from the
3234 server directory which jj creates. It is perfect for bots and
3235 notifications.")
3236 (license license:expat)))
3237
3238 (define-public pounce
3239 (package
3240 (name "pounce")
3241 (version "3.0")
3242 (source
3243 (origin
3244 (method url-fetch)
3245 (uri (string-append "https://git.causal.agency/pounce/snapshot/pounce-"
3246 version ".tar.gz"))
3247 (sha256
3248 (base32 "1w4x34bspkqvk9p7bfj0zmvmbzvxb7lxrrr3g6lrfdj9f3qzfxpp"))))
3249 (build-system gnu-build-system)
3250 (arguments
3251 `(#:tests? #f ;there are no tests
3252 #:make-flags
3253 (list
3254 (string-append "CC=" ,(cc-for-target))
3255 (string-append "PREFIX=" %output))))
3256 (native-inputs
3257 (list pkg-config universal-ctags))
3258 (inputs
3259 (list libressl))
3260 (home-page "https://code.causal.agency/june/pounce")
3261 (synopsis "Simple multi-client TLS-only IRC bouncer")
3262 (description
3263 "@command{pounce} is a multi-client, TLS-only IRC bouncer. It maintains
3264 a persistent connection to an IRC server, acting as a proxy and buffer for
3265 a number of clients.")
3266 (license license:gpl3+)))
3267
3268 (define-public weechat-matrix
3269 (package
3270 (name "weechat-matrix")
3271 (version "0.3.0")
3272 (source
3273 (origin
3274 (method git-fetch)
3275 (uri (git-reference
3276 (url "https://github.com/poljar/weechat-matrix")
3277 (commit version)))
3278 (file-name (git-file-name name version))
3279 (sha256
3280 (base32
3281 "1iv55n4k05139f7jzkhczgw4qp6qwilrvfsy3c6v2m1kxffj12d3"))))
3282 (build-system python-build-system)
3283 (arguments
3284 `(#:phases
3285 (modify-phases %standard-phases
3286 (delete 'build)
3287 (replace 'install
3288 (lambda* (#:key inputs outputs #:allow-other-keys)
3289 (let* ((weechat-python (string-append (assoc-ref outputs "out")
3290 "/share/weechat/python")))
3291 ;; Avoid circular import by renaming the matrix module to
3292 ;; weechat_matrix.
3293 (substitute* (cons "main.py"
3294 (append (find-files "matrix")
3295 (find-files "tests")))
3296 (("from matrix") "from weechat_matrix")
3297 (("import matrix") "import weechat_matrix"))
3298 ;; Install python modules.
3299 (invoke "make" "install-lib"
3300 (string-append "INSTALLDIR="
3301 (site-packages inputs outputs)
3302 "/weechat_matrix"))
3303 ;; Extend PYTHONPATH to find installed python modules.
3304 (add-installed-pythonpath inputs outputs)
3305 ;; Augment sys.path so that dependencies are found.
3306 (substitute* "main.py"
3307 (("import os\n" all)
3308 (apply string-append
3309 all
3310 "import sys\n"
3311 (map (lambda (path)
3312 (string-append "sys.path.append('" path "')\n"))
3313 (string-split (getenv "GUIX_PYTHONPATH") #\:)))))
3314 ;; Install script.
3315 (mkdir-p weechat-python)
3316 (copy-file "main.py"
3317 (string-append weechat-python "/matrix.py")))))
3318 (replace 'check
3319 (lambda* (#:key tests? #:allow-other-keys)
3320 (when tests?
3321 (invoke "pytest")))))))
3322 (inputs
3323 (list python-matrix-nio python-pygments python-pyopenssl
3324 python-webcolors))
3325 (native-inputs
3326 (list python-pytest))
3327 (home-page "https://github.com/poljar/weechat-matrix")
3328 (synopsis "Weechat Matrix protocol script")
3329 (description "@code{weechat-matrix} is a Python plugin for Weechat that lets
3330 Weechat communicate over the Matrix protocol.")
3331 (license license:isc)))
3332
3333 (define-public weechat-wee-slack
3334 (package
3335 (name "weechat-wee-slack")
3336 (version "2.8.0")
3337 (source
3338 (origin
3339 (method git-fetch)
3340 (uri (git-reference
3341 (url "https://github.com/wee-slack/wee-slack")
3342 (commit (string-append "v" version))))
3343 (file-name (git-file-name name version))
3344 (sha256
3345 (base32
3346 "0xfklr0gsc9jgxfyrrb2j756lclz9g8imcb0pk0xgyj8mhsw23zk"))))
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 ;; Augment sys.path so that dependencies are found.
3355 (substitute* "wee_slack.py"
3356 (("import sys\n" all)
3357 (apply string-append
3358 all
3359 (map (lambda (path)
3360 (string-append "sys.path.append('" path "')\n"))
3361 (string-split (getenv "GUIX_PYTHONPATH") #\:)))))
3362 ;; Install script.
3363 (install-file "wee_slack.py"
3364 (string-append (assoc-ref outputs "out")
3365 "/share/weechat/python"))))
3366 (replace 'check
3367 (lambda* (#:key tests? #:allow-other-keys)
3368 (when tests?
3369 (invoke "pytest")))))))
3370 (inputs
3371 (list python-websocket-client))
3372 (native-inputs
3373 (list python-pytest))
3374 (home-page "https://github.com/wee-slack/wee-slack")
3375 (synopsis "Weechat Slack script")
3376 (description "@code{weechat-wee-slack} is a WeeChat native client for
3377 Slack. It provides supplemental features only available in the web/mobile
3378 clients such as synchronizing read markers, typing notification, threads (and
3379 more)! It connects via the Slack API, and maintains a persistent websocket
3380 for notification of events.")
3381 (license license:expat)))
3382
3383 (define-public python-librecaptcha
3384 (package
3385 (name "python-librecaptcha")
3386 (version "0.7.3")
3387 (source (origin
3388 (method git-fetch)
3389 (uri (git-reference
3390 (url "https://github.com/taylordotfish/librecaptcha")
3391 (commit version)))
3392 (file-name (string-append name "-" version "-checkout"))
3393 (sha256
3394 (base32
3395 "0r35ws6vdf31j01kpacvpjplddm254r0cgy0npmhgnfxd5kpjf3s"))))
3396 (build-system python-build-system)
3397 (propagated-inputs
3398 (list python-pillow python-requests python-esprima python-pygobject gobject-introspection gtk+))
3399 (synopsis "Show CAPTCHA without running proprietary code.")
3400 (description "This package shows CAPTCHA without running proprietary code.")
3401 (home-page "https://github.com/taylordotfish/librecaptcha")
3402 (license license:gpl3+)))
3403
3404 (define-public python-harmony
3405 (package
3406 (name "python-harmony")
3407 (version "0.7.1")
3408 (source (origin
3409 (method git-fetch)
3410 (uri (git-reference
3411 (url "https://github.com/taylordotfish/harmony.git")
3412 (commit version)))
3413 (file-name (string-append name "-" version "-checkout"))
3414 (sha256
3415 (base32
3416 "1bm9xcnzpnpj6rlhbrnl2abwclzl7ivgh1vb5644y9mnhcs489js"))))
3417 (build-system python-build-system)
3418 (native-inputs
3419 (list python-tox))
3420 (inputs
3421 (list python-librecaptcha python-keyring python-requests))
3422 (synopsis "Discord account management")
3423 (description "This package provides account management tools for
3424 Discord.")
3425 (home-page "https://github.com/taylordotfish/harmony")
3426 (license license:gpl3+)))
3427
3428 ;;; messaging.scm ends here