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