mailmap: Update entries for Nikita.
[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 Ricardo Wurmus <rekado@elephly.net>
7 ;;; Copyright © 2015, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
8 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
9 ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
10 ;;; Copyright © 2016, 2017, 2018, 2019 Clément Lassieur <clement@lassieur.org>
11 ;;; Copyright © 2017 Mekeor Melire <mekeor.melire@gmail.com>
12 ;;; Copyright © 2017, 2018, 2020 Arun Isaac <arunisaac@systemreboot.net>
13 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
14 ;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org>
15 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
16 ;;; Copyright © 2018 Leo Famulari <leo@famulari.name>
17 ;;; Copyright © 2018 Pierre-Antoine Rouby <contact@parouby.fr>
18 ;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
19 ;;; Copyright © 2019, 2020 Brett Gilio <brettg@gnu.org>
20 ;;; Copyright © 2019, 2020 Timotej Lazar <timotej.lazar@araneo.si>
21 ;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
22 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
23 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
24 ;;;
25 ;;; This file is part of GNU Guix.
26 ;;;
27 ;;; GNU Guix is free software; you can redistribute it and/or modify it
28 ;;; under the terms of the GNU General Public License as published by
29 ;;; the Free Software Foundation; either version 3 of the License, or (at
30 ;;; your option) any later version.
31 ;;;
32 ;;; GNU Guix is distributed in the hope that it will be useful, but
33 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
34 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
35 ;;; GNU General Public License for more details.
36 ;;;
37 ;;; You should have received a copy of the GNU General Public License
38 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
39
40 (define-module (gnu packages messaging)
41 #:use-module (gnu packages)
42 #:use-module (gnu packages admin)
43 #:use-module (gnu packages aidc)
44 #:use-module (gnu packages aspell)
45 #:use-module (gnu packages audio)
46 #:use-module (gnu packages autotools)
47 #:use-module (gnu packages avahi)
48 #:use-module (gnu packages base)
49 #:use-module (gnu packages bash)
50 #:use-module (gnu packages bison)
51 #:use-module (gnu packages boost)
52 #:use-module (gnu packages check)
53 #:use-module (gnu packages compression)
54 #:use-module (gnu packages cpp)
55 #:use-module (gnu packages crypto)
56 #:use-module (gnu packages curl)
57 #:use-module (gnu packages cyrus-sasl)
58 #:use-module (gnu packages databases)
59 #:use-module (gnu packages documentation)
60 #:use-module (gnu packages enchant)
61 #:use-module (gnu packages fontutils)
62 #:use-module (gnu packages gettext)
63 #:use-module (gnu packages glib)
64 #:use-module (gnu packages gnome)
65 #:use-module (gnu packages gnupg)
66 #:use-module (gnu packages gperf)
67 #:use-module (gnu packages gtk)
68 #:use-module (gnu packages guile)
69 #:use-module (gnu packages icu4c)
70 #:use-module (gnu packages image)
71 #:use-module (gnu packages less)
72 #:use-module (gnu packages libcanberra)
73 #:use-module (gnu packages libidn)
74 #:use-module (gnu packages linux)
75 #:use-module (gnu packages logging)
76 #:use-module (gnu packages lua)
77 #:use-module (gnu packages man)
78 #:use-module (gnu packages markup)
79 #:use-module (gnu packages ncurses)
80 #:use-module (gnu packages networking)
81 #:use-module (gnu packages pcre)
82 #:use-module (gnu packages perl)
83 #:use-module (gnu packages photo)
84 #:use-module (gnu packages php)
85 #:use-module (gnu packages pkg-config)
86 #:use-module (gnu packages protobuf)
87 #:use-module (gnu packages python)
88 #:use-module (gnu packages python-crypto)
89 #:use-module (gnu packages python-web)
90 #:use-module (gnu packages python-xyz)
91 #:use-module (gnu packages qt)
92 #:use-module (gnu packages readline)
93 #:use-module (gnu packages sqlite)
94 #:use-module (gnu packages tcl)
95 #:use-module (gnu packages texinfo)
96 #:use-module (gnu packages textutils)
97 #:use-module (gnu packages tls)
98 #:use-module (gnu packages video)
99 #:use-module (gnu packages web)
100 #:use-module (gnu packages xdisorg)
101 #:use-module (gnu packages xiph)
102 #:use-module (gnu packages xml)
103 #:use-module (gnu packages xorg)
104 #:use-module (guix build-system cmake)
105 #:use-module (guix build-system glib-or-gtk)
106 #:use-module (guix build-system gnu)
107 #:use-module (guix build-system meson)
108 #:use-module (guix build-system perl)
109 #:use-module (guix build-system python)
110 #:use-module (guix build-system qt)
111 #:use-module (guix build-system trivial)
112 #:use-module (guix download)
113 #:use-module (guix git-download)
114 #:use-module (guix hg-download)
115 #:use-module ((guix licenses) #:prefix license:)
116 #:use-module (guix packages)
117 #:use-module (guix utils))
118
119 (define-public libotr
120 (package
121 (name "libotr")
122 (version "4.1.1")
123 (source (origin
124 (method url-fetch)
125 (uri (string-append "https://otr.cypherpunks.ca/libotr-"
126 version ".tar.gz"))
127 (sha256
128 (base32
129 "1x8rliydhbibmzwdbyr7pd7n87m2jmxnqkpvaalnf4154hj1hfwb"))
130 (patches (search-patches "libotr-test-auth-fix.patch"))))
131 (build-system gnu-build-system)
132 (propagated-inputs
133 `(("libgcrypt" ,libgcrypt))) ; libotr headers include gcrypt.h
134 (inputs `(("libgpg-error" ,libgpg-error)))
135 (native-inputs `(("perl" ,perl))) ; for the test suite
136 (synopsis "Off-the-Record (OTR) Messaging Library and Toolkit")
137 (description
138 "OTR allows you to have private conversations over instant messaging by
139 providing: (1) Encryption: No one else can read your instant messages. (2)
140 Authentication: You are assured the correspondent is who you think it is. (3)
141 Deniability: The messages you send do not have digital signatures that are
142 checkable by a third party. Anyone can forge messages after a conversation to
143 make them look like they came from you. However, during a conversation, your
144 correspondent is assured the messages he sees are authentic and
145 unmodified. (4) Perfect forward secrecy: If you lose control of your private
146 keys, no previous conversation is compromised.")
147 (home-page "https://otr.cypherpunks.ca/")
148 (license (list license:lgpl2.1 license:gpl2))))
149
150 (define-public libsignal-protocol-c
151 (package
152 (name "libsignal-protocol-c")
153 (version "2.3.2")
154 (source (origin
155 (method url-fetch)
156 (uri (string-append "https://github.com/WhisperSystems/"
157 "libsignal-protocol-c/archive/v" version
158 ".tar.gz"))
159 (file-name (string-append name "-" version ".tar.gz"))
160 (sha256
161 (base32
162 "0380hl6fw3ppf265fg897pyrpqygpx4m9j8ifq118bim8lq6z0pk"))))
163 (arguments
164 `(;; Required for proper linking and for tests to run.
165 #:configure-flags '("-DBUILD_SHARED_LIBS=on" "-DBUILD_TESTING=1")))
166 (build-system cmake-build-system)
167 (inputs `( ;; Required for tests:
168 ("check" ,check)
169 ("openssl" ,openssl)))
170 (native-inputs `(("pkg-config" ,pkg-config)))
171 (home-page "https://github.com/WhisperSystems/libsignal-protocol-c")
172 (synopsis "Implementation of a ratcheting forward secrecy protocol")
173 (description "libsignal-protocol-c is an implementation of a ratcheting
174 forward secrecy protocol that works in synchronous and asynchronous
175 messaging environments. It can be used with messaging software to provide
176 end-to-end encryption.")
177 (license license:gpl3+)))
178
179 (define-public bitlbee
180 (package
181 (name "bitlbee")
182 (version "3.6")
183 (source (origin
184 (method url-fetch)
185 (uri (string-append "https://get.bitlbee.org/src/bitlbee-"
186 version ".tar.gz"))
187 (sha256
188 (base32 "0zhhcbcr59sx9h4maf8zamzv2waya7sbsl7w74gbyilvy93dw5cz"))))
189 (build-system gnu-build-system)
190 (native-inputs `(("pkg-config" ,pkg-config)
191 ;; Note: Change to 'check' for versions > 3.6.
192 ("check" ,check-0.12)))
193 (inputs `(("glib" ,glib)
194 ("libotr" ,libotr)
195 ("gnutls" ,gnutls)
196 ("python" ,python)
197 ("perl" ,perl)))
198 (arguments
199 `(#:phases
200 (modify-phases %standard-phases
201 (add-before 'configure 'set-python
202 (lambda _ (setenv "PYTHON" (which "python3")) #t))
203 (add-after 'install 'install-etc
204 (lambda* (#:key (make-flags '()) #:allow-other-keys)
205 (apply invoke "make" "install-etc" make-flags)))
206 (add-after 'install-etc 'install-lib
207 (lambda* (#:key (make-flags '()) #:allow-other-keys)
208 (apply invoke "make" "install-dev" make-flags)))
209 (replace 'configure
210 ;; bitlbee's configure script does not tolerate many of the
211 ;; variable settings that Guix would pass to it.
212 (lambda* (#:key outputs #:allow-other-keys)
213 (invoke "./configure"
214 (string-append "--prefix="
215 (assoc-ref outputs "out"))
216 "--otr=1"))))))
217 (synopsis "IRC to instant messaging gateway")
218 (description "BitlBee brings IM (instant messaging) to IRC clients, for
219 people who have an IRC client running all the time and don't want to run an
220 additional IM client. BitlBee currently supports XMPP/Jabber (including
221 Google Talk), MSN Messenger, Yahoo! Messenger, AIM and ICQ, and the Twitter
222 microblogging network (plus all other Twitter API compatible services like
223 identi.ca and status.net).")
224 (home-page "https://www.bitlbee.org/")
225 (license (list license:gpl2+ license:bsd-2))))
226
227 (define-public bitlbee-discord
228 (package
229 (name "bitlbee-discord")
230 (version "0.4.2")
231 (source
232 (origin
233 (method git-fetch)
234 (uri (git-reference
235 (url "https://github.com/sm00th/bitlbee-discord.git")
236 (commit version)))
237 (file-name (git-file-name name version))
238 (sha256
239 (base32 "02pigk2vbz0jdz11f96sygdvp1j762yjn62h124fkcsc070g7a2f"))))
240 (build-system gnu-build-system)
241 (arguments
242 `(#:phases
243 (modify-phases %standard-phases
244 (add-after 'unpack 'patch-autogen
245 (lambda _
246 (let ((sh (which "sh")))
247 (substitute* "autogen.sh" (("/bin/sh") sh))
248 (setenv "CONFIG_SHELL" sh))
249 #t))
250 (replace 'configure
251 (lambda* (#:key inputs outputs #:allow-other-keys)
252 (invoke "./configure"
253 (string-append "--with-plugindir="
254 (assoc-ref outputs "out")
255 "/lib/bitlbee/")))))))
256 (inputs `(("glib" ,glib)))
257 (native-inputs `(("pkg-config" ,pkg-config)
258 ("autoconf" ,autoconf)
259 ("automake" ,automake)
260 ("texinfo" ,texinfo)
261 ("libtool" ,libtool)
262 ("bitlbee" ,bitlbee) ; needs bitlbee headers
263 ("bash" ,bash)))
264 (synopsis "Discord plugin for Bitlbee")
265 (description "Bitlbee-discord is a plugin for Bitlbee witch provides
266 access to servers running the Discord protocol.")
267 (home-page "https://github.com/sm00th/bitlbee-discord/")
268 (license license:gpl2+)))
269
270 (define-public purple-mattermost
271 (package
272 (name "purple-mattermost")
273 (version "1.2")
274 (home-page "https://github.com/EionRobb/purple-mattermost")
275 (source (origin
276 (method git-fetch)
277 (uri (git-reference (url home-page)
278 (commit (string-append "v" version))))
279 (file-name (git-file-name name version))
280 (sha256
281 (base32
282 "0fm49iv58l09qpy8vkca3am642fxiwcrrh6ykimyc2mas210b5g2"))))
283 (build-system gnu-build-system)
284 (arguments
285 `(#:phases (modify-phases %standard-phases
286 (replace 'configure
287 (lambda* (#:key inputs outputs #:allow-other-keys)
288 ;; Adjust the makefile to install files in the right
289 ;; place.
290 (let ((out (assoc-ref outputs "out")))
291 (substitute* "Makefile"
292 (("MATTERMOST_DEST = .*")
293 (string-append "MATTERMOST_DEST = " out
294 "/lib/purple-2\n")) ;XXX: hardcoded
295 (("MATTERMOST_ICONS_DEST = .*")
296 (string-append "MATTERMOST_ICONS_DEST = "
297 out
298 "/share/pixmaps/pidgin/protocols\n")))
299 #t))))
300 #:make-flags (list "CC=gcc"
301 ,(string-append "PLUGIN_VERSION=" version))
302 #:tests? #f))
303 (inputs `(("glib" ,glib)
304 ("json-glib" ,json-glib)
305 ("discount" ,discount)
306 ("pidgin" ,pidgin)))
307 (native-inputs `(("pkg-config" ,pkg-config)))
308 (synopsis "Purple plug-in to access Mattermost instant messaging")
309 (description
310 "Purple-Mattermost is a plug-in for Purple, the instant messaging library
311 used by Pidgin and Bitlbee, among others, to access
312 @uref{https://mattermost.com/, Mattermost} servers.")
313 (license license:gpl3+)))
314
315 (define-public hexchat
316 (package
317 (name "hexchat")
318 (version "2.14.3")
319 (source (origin
320 (method url-fetch)
321 (uri (string-append "https://dl.hexchat.net/hexchat/hexchat-"
322 version ".tar.xz"))
323 (sha256
324 (base32
325 "10p829jm1r6kidkgf5lhqhyqc5mxdcq96q3zhadsckasvc9rs6lh"))))
326 (build-system meson-build-system)
327 (native-inputs `(("gettext" ,gettext-minimal)
328 ("glib:bin" ,glib "bin") ;need glib-genmarshal
329 ("perl" ,perl)
330 ("pkg-config" ,pkg-config)))
331 (inputs `(("dbus-glib" ,dbus-glib)
332 ("dbus" ,dbus)
333 ("enchant" ,enchant)
334 ("gtk" ,gtk+-2)
335 ("libcanberra" ,libcanberra)
336 ("libnotify" ,libnotify)
337 ("libproxy" ,libproxy)
338 ("openssl" ,openssl)
339
340 ;; Bindings for add-on scripts.
341 ("luajit" ,luajit)
342 ("perl-xml-parser" ,perl-xml-parser)
343 ("python-2" ,python-2)))
344 (arguments
345 `(#:phases
346 (modify-phases %standard-phases
347 (add-after 'unpack 'skip-desktop-database-updates
348 (lambda _
349 ;; The build scripts update icon and desktop file databases when
350 ;; DESTDIR is not set. We can't update these databases from
351 ;; within the build chroot, but we also don't set DESTDIR. So, we
352 ;; just skip this code.
353 (substitute* "meson_post_install.py"
354 (("if 'DESTDIR' not in os.environ:")
355 "if False:"))
356 #t)))))
357 (synopsis "Graphical IRC client")
358 (description
359 "HexChat lets you connect to multiple IRC networks at once. The main
360 window shows the list of currently connected networks and their channels, the
361 current conversation and the list of users. It uses colors to differentiate
362 between users and to highlight messages. It checks spelling using available
363 dictionaries. HexChat can be extended with multiple addons.")
364 (home-page "https://hexchat.net/")
365 (license license:gpl2+)))
366
367 (define-public ngircd
368 (package
369 (name "ngircd")
370 (version "25")
371 (source (origin
372 (method url-fetch)
373 (uri (string-append "https://arthur.barton.de/pub/ngircd/ngircd-"
374 version ".tar.xz"))
375 (sha256
376 (base32
377 "0kpf5qi98m9f833r4rx9n6h9p31biwk798jwc1mgzmix7sp7r6f4"))
378 (patches (search-patches "ngircd-handle-zombies.patch"))))
379 (build-system gnu-build-system)
380 ;; Needed for the test suite.
381 (native-inputs `(("procps" ,procps)
382 ("expect" ,expect)
383 ("inetutils" ,inetutils)))
384 ;; XXX Add libident.
385 (inputs `(("zlib" ,zlib)
386 ("libwrap" ,tcp-wrappers)
387 ("gnutls" ,gnutls)
388 ,@(if (string-suffix? "-linux"
389 (or (%current-target-system)
390 (%current-system)))
391 `(("linux-pam" ,linux-pam))
392 '())))
393 (arguments
394 `(#:configure-flags
395 '("--with-gnutls" "--with-iconv" "--enable-ipv6" "--with-tcp-wrappers"
396 ,@(if (string-suffix? "-linux"
397 (or (%current-target-system)
398 (%current-system)))
399 '("--with-pam")
400 '()))
401 #:phases
402 (modify-phases %standard-phases
403 ;; Necessary for the test suite.
404 (add-after 'configure 'post-configure
405 (lambda _
406 (substitute* "src/ngircd/Makefile"
407 (("/bin/sh") (which "sh")))
408 ;; The default getpid.sh does a sloppy grep over 'ps -ax' output,
409 ;; which fails arbitrarily.
410 (with-output-to-file "src/testsuite/getpid.sh"
411 (lambda ()
412 (display
413 (string-append
414 "#!" (which "sh") "\n"
415 "ps -C \"$1\" -o pid=\n"))))
416 ;; Our variant of getpid.sh does not match interpreter names
417 ;; when the script's shebang is invoked directly as "./foo".
418 ;; Patch cases where the test suite relies on this.
419 (substitute* "src/testsuite/start-server.sh"
420 ;; It runs 'getpid.sh sh' to test if it works at all. Run it on
421 ;; 'make' instead.
422 (("getpid.sh sh") "getpid.sh make")))))))
423 (home-page "https://ngircd.barton.de/")
424 (synopsis "Lightweight Internet Relay Chat server for small networks")
425 (description
426 "ngIRCd is a lightweight @dfn{Internet Relay Chat} (IRC) server for small
427 or private networks. It is easy to configure, can cope with dynamic IP
428 addresses, and supports IPv6, SSL-protected connections, as well as PAM for
429 authentication.")
430 (license license:gpl2+)))
431
432 (define-public pidgin
433 (package
434 (name "pidgin")
435 (version "2.13.0")
436 (source
437 (origin
438 (method url-fetch)
439 (uri (string-append "mirror://sourceforge/pidgin/Pidgin/"
440 version "/pidgin-" version ".tar.bz2"))
441 (sha256
442 (base32 "13vdqj70315p9rzgnbxjp9c51mdzf1l4jg1kvnylc4bidw61air7"))
443 (patches (search-patches "pidgin-add-search-path.patch"))))
444 (build-system glib-or-gtk-build-system)
445 (native-inputs
446 `(("pkg-config" ,pkg-config)
447 ("check" ,check)
448 ("intltool" ,intltool)
449 ("gconf" ,gconf)
450 ("python" ,python-2)
451 ("doxygen" ,doxygen)))
452 (inputs
453 `(("gtk+" ,gtk+-2)
454 ("libgcrypt" ,libgcrypt)
455 ("gnutls" ,gnutls)
456 ("cyrus-sasl" ,cyrus-sasl)
457 ("dbus" ,dbus)
458 ("dbus-glib" ,dbus-glib)
459 ("python2-dbus" ,python2-dbus)
460 ("libidn" ,libidn)
461 ("libltdl" ,libltdl)
462 ("libxml2" ,libxml2)
463 ;; TODO: gstreamer: patches needed to support gstreamer-1.0 or later
464 ;; TODO: farstream
465 ;; TODO: meanwhile
466 ;; TODO: gtkspell
467 ;; TODO: libxephyr
468 ;; TODO: libgadu
469 ("libxslt" ,libxslt)
470 ("avahi" ,avahi)
471 ("ncurses" ,ncurses)
472 ("network-manager" ,network-manager)
473 ("sqlite" ,sqlite)
474 ("libice" ,libice)
475 ("libsm" ,libsm)
476 ("libxscrnsaver" ,libxscrnsaver)
477 ("startup-notification" ,startup-notification)))
478 (arguments
479 `(#:configure-flags
480 (list "--disable-gtkspell"
481 "--disable-tcl"
482 "--disable-meanwhile"
483 "--disable-vv" ; XXX remove when we have farstream and gstreamer
484 "--disable-gstreamer" ; XXX patches needed to support gstreamer-1.0
485 "--enable-cyrus-sasl"
486 (string-append "--with-ncurses-headers="
487 (assoc-ref %build-inputs "ncurses")
488 "/include"))))
489 (native-search-paths
490 (list (search-path-specification
491 (variable "PURPLE_PLUGIN_PATH")
492 (files (list (string-append "lib/purple-"
493 (version-major version))
494 "lib/pidgin")))))
495 (home-page "https://www.pidgin.im/")
496 (synopsis "Graphical multi-protocol instant messaging client")
497 (description
498 "Pidgin is a modular instant messaging client that supports many popular
499 chat protocols.")
500 (license
501 (list
502 license:gpl2+ ; Most of the code
503 license:lgpl2.1 ; GG protocol plugin (libpurple/protocols/gg/lib)
504 license:lgpl2.0+ ; OSCAR protocol plugin (libpurple/protocols/oscar)
505 ;; The following licenses cover the zephyr protocol plugin:
506 (license:non-copyleft
507 "file://libpurple/protocols/zephyr/mit-copyright.h"
508 "See libpurple/protocols/zephyr/mit-copyright.h in the distribution.")
509 (license:non-copyleft
510 "file://libpurple/protocols/zephyr/mit-sipb-copyright.h"
511 "See libpurple/protocols/zephyr/mit-sipb-copyright.h in the distribution.")))))
512
513 (define-public pidgin-otr
514 (package
515 (name "pidgin-otr")
516 (version "4.0.2")
517 (source (origin
518 (method url-fetch)
519 (uri (string-append "https://otr.cypherpunks.ca/"
520 name "-" version ".tar.gz"))
521 (sha256
522 (base32
523 "1i5s9rrgbyss9rszq6c6y53hwqyw1k86s40cpsfx5ccl9bprxdgl"))))
524 (build-system gnu-build-system)
525 (native-inputs
526 `(("pkg-config" ,pkg-config)
527 ("intltool" ,intltool)))
528 (inputs
529 `(("pidgin" ,pidgin)
530 ("libotr" ,libotr)
531 ("libgpg-error" ,libgpg-error)
532 ("libgcrypt" ,libgcrypt)
533 ("glib" ,glib)
534 ("gtk+" ,gtk+-2)))
535 (home-page "https://otr.cypherpunks.ca/")
536 (synopsis "Off-the-Record Messaging plugin for Pidgin")
537 (description
538 "Pidgin-OTR is a plugin that adds support for OTR to the Pidgin instant
539 messaging client. OTR (Off-the-Record) Messaging allows you to have private
540 conversations over instant messaging by providing: (1) Encryption: No one else
541 can read your instant messages. (2) Authentication: You are assured the
542 correspondent is who you think it is. (3) Deniability: The messages you send
543 do not have digital signatures that are checkable by a third party. Anyone
544 can forge messages after a conversation to make them look like they came from
545 you. However, during a conversation, your correspondent is assured the
546 messages he sees are authentic and unmodified. (4) Perfect forward secrecy:
547 If you lose control of your private keys, no previous conversation is
548 compromised.")
549 (license license:gpl2)))
550
551 (define-public znc
552 (package
553 (name "znc")
554 (version "1.8.0")
555 (source (origin
556 (method url-fetch)
557 (uri (string-append "http://znc.in/releases/archive/znc-"
558 version ".tar.gz"))
559 (sha256
560 (base32
561 "0m5xf60r40pgbg9lyk56dafxj2hj149pn2wf8vzsp8xgq4kv5zcl"))))
562 (build-system cmake-build-system)
563 (arguments
564 `(#:configure-flags
565 (list "-DWANT_CYRUS=ON"
566 "-DWANT_I18N=ON"
567 "-DWANT_PERL=ON"
568 "-DWANT_PYTHON=ON")
569 #:phases
570 (modify-phases %standard-phases
571 (add-after 'unpack 'unpack-googletest
572 ;; Copy the googletest sources to where the CMake build expects them.
573 (lambda* (#:key inputs #:allow-other-keys)
574 (let ((source (assoc-ref inputs "googletest-source"))
575 (target "third_party/googletest"))
576 (mkdir-p target)
577 (copy-recursively source target)
578 #t))))))
579 (native-inputs
580 `(("boost" ,boost)
581 ("gettext" ,gettext-minimal)
582 ("googletest-source" ,(package-source googletest))
583 ("pkg-config" ,pkg-config)))
584 (inputs
585 `(("cyrus-sasl" ,cyrus-sasl)
586 ("icu4c" ,icu4c)
587 ("openssl" ,openssl)
588 ("perl" ,perl)
589 ("python" ,python)
590 ("zlib" ,zlib)))
591 (home-page "https://znc.in")
592 (synopsis "IRC network bouncer")
593 (description "ZNC is an @dfn{IRC network bouncer} or @dfn{BNC}. It can
594 detach the client from the actual IRC server, and also from selected channels.
595 Multiple clients from different locations can connect to a single ZNC account
596 simultaneously and therefore appear under the same nickname on IRC.")
597 (license license:asl2.0)))
598
599 (define-public python-nbxmpp
600 (package
601 (name "python-nbxmpp")
602 (version "0.6.10")
603 (source
604 (origin
605 (method url-fetch)
606 (uri (pypi-uri "nbxmpp" version))
607 (sha256
608 (base32
609 "1vq89nhamciblyi5579bppnm4sb0zk5cg5hdipfpz174fxvl2wyd"))))
610 (build-system python-build-system)
611 (arguments
612 `(#:tests? #f)) ; no tests
613 (home-page "https://dev.gajim.org/gajim/python-nbxmpp")
614 (synopsis "Non-blocking Jabber/XMPP module")
615 (description
616 "The goal of this python library is to provide a way for Python
617 applications to use Jabber/XMPP networks in a non-blocking way. This library
618 was initially a fork of xmpppy, but uses non-blocking sockets.")
619 (license license:gpl3+)))
620
621 (define-public python2-nbxmpp
622 (package-with-python2 python-nbxmpp))
623
624 (define-public gajim
625 (package
626 (name "gajim")
627 (version "1.1.3")
628 (source (origin
629 (method url-fetch)
630 (uri (string-append "https://gajim.org/downloads/"
631 (version-major+minor version)
632 "/gajim-" version ".tar.bz2"))
633 (sha256
634 (base32
635 "0bzxwcpdd4ydh6d6mzpr0gxwhcb0x9ympk55fpvm1hcw9d28a716"))))
636 (build-system python-build-system)
637 (arguments
638 `(#:phases
639 (modify-phases %standard-phases
640 (add-after 'unpack 'add-plugin-dirs
641 (lambda _
642 (substitute* "gajim/common/configpaths.py"
643 (("_paths\\['PLUGINS_USER'\\]\\]")
644 "_paths['PLUGINS_USER']] + \
645 ([os.getenv('GAJIM_PLUGIN_PATH')] \
646 if os.getenv('GAJIM_PLUGIN_PATH') \
647 and Path(os.getenv('GAJIM_PLUGIN_PATH')).is_dir() \
648 else [])"))
649 #t))
650 (replace 'check
651 (lambda _
652 (invoke "python" "./setup.py" "test" "-s" "test.no_gui")))
653 (add-after 'install 'wrap-gi-typelib-path
654 (lambda* (#:key outputs #:allow-other-keys)
655 (let ((out (assoc-ref outputs "out")))
656 (for-each
657 (lambda (name)
658 (let ((file (string-append out "/bin/" name))
659 (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
660 (wrap-program file
661 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
662 ;; For translations
663 `("XDG_DATA_DIRS" ":" prefix
664 (,(string-append (assoc-ref outputs "out") "/share"))))))
665 '("gajim" "gajim-remote" "gajim-history-manager")))
666 #t))
667 (add-after 'install 'install-icons
668 (lambda* (#:key inputs outputs #:allow-other-keys)
669 (let* ((out (assoc-ref outputs "out"))
670 (adwaita (string-append
671 (assoc-ref inputs "adwaita-icon-theme")
672 "/share/icons/Adwaita"))
673 (hicolor (string-append
674 (assoc-ref inputs "hicolor-icon-theme")
675 "/share/icons/hicolor"))
676 (icons (string-append
677 out "/lib/python"
678 ,(version-major+minor (package-version python))
679 "/site-packages/gajim/data/icons")))
680 (with-directory-excursion icons
681 (symlink adwaita "Adwaita")
682 (copy-recursively hicolor "hicolor")))
683 #t))
684 (add-after 'install-icons 'wrap-gsettings-schema-dir
685 (lambda* (#:key inputs outputs #:allow-other-keys)
686 (wrap-program (string-append (assoc-ref outputs "out")
687 "/bin/gajim")
688 ;; For GtkFileChooserDialog.
689 `("GSETTINGS_SCHEMA_DIR" =
690 (,(string-append (assoc-ref inputs "gtk+")
691 "/share/glib-2.0/schemas"))))
692 #t)))))
693 (native-search-paths
694 (list (search-path-specification
695 (variable "GAJIM_PLUGIN_PATH")
696 (separator #f) ;single entry
697 (files '("share/gajim/plugins")))
698 ;; Gajim needs to use the propagated inputs of its plugins.
699 (search-path-specification
700 (variable "PYTHONPATH")
701 (files (list (string-append
702 "lib/python"
703
704 ;; FIXME: Cannot use this expression as it would
705 ;; introduce a circular dependency at the top level.
706 ;; (version-major+minor (package-version python))
707 "3.7"
708
709 "/site-packages"))))))
710 (native-inputs
711 `(("intltool" ,intltool)
712 ("python-docutils" ,python-docutils)
713 ("xorg-server" ,xorg-server-for-tests)))
714 (inputs
715 `(("adwaita-icon-theme" ,adwaita-icon-theme)
716 ("gnome-keyring" ,gnome-keyring)
717 ("gtk+" ,gtk+)
718 ("gtkspell3" ,gtkspell3)
719 ("hicolor-icon-theme" ,hicolor-icon-theme)
720 ("libsecret" ,libsecret)
721 ("python-cssutils" ,python-cssutils)
722 ("python-dbus" ,python-dbus)
723 ("python-gnupg" ,python-gnupg)
724 ("python-keyring" ,python-keyring)
725 ("python-nbxmpp" ,python-nbxmpp)
726 ("python-pillow" ,python-pillow)
727 ("python-precis-i18n" ,python-precis-i18n)
728 ("python-pycairo" ,python-pycairo)
729 ("python-pygobject" ,python-pygobject)
730 ("python-pyopenssl" ,python-pyopenssl)
731 ("python-qrcode" ,python-qrcode)))
732 (home-page "https://gajim.org/")
733 (synopsis "Jabber (XMPP) client")
734 (description "Gajim is a feature-rich and easy to use Jabber/XMPP client.
735 Among its features are: a tabbed chat window and single window modes; support
736 for group chat (with Multi-User Chat protocol), invitation, chat to group chat
737 transformation; audio and video conferences; file transfer; TLS, GPG and
738 end-to-end encryption support; XML console.")
739 (license license:gpl3)))
740
741 (define-public gajim-omemo
742 (package
743 (name "gajim-omemo")
744 (version "2.6.29")
745 (source (origin
746 (method url-fetch/zipbomb)
747 (uri (string-append
748 "https://ftp.gajim.org/plugins_releases/omemo_"
749 version ".zip"))
750 (sha256
751 (base32
752 "1mif5qkrvxclqbqmq6njini4laznbs5nn82w2f1hkl8c1284dvgi"))))
753 (build-system trivial-build-system)
754 (arguments
755 `(#:modules ((guix build utils))
756 #:builder
757 (begin
758 (use-modules (guix build utils))
759 (let* ((out (assoc-ref %outputs "out"))
760 (share (in-vicinity out "share/gajim/plugins"))
761 (source (assoc-ref %build-inputs "source")))
762 (mkdir-p share)
763 (copy-recursively source share)
764 #t))))
765 (propagated-inputs
766 `(("python-axolotl" ,python-axolotl)))
767 (home-page
768 "https://dev.gajim.org/gajim/gajim-plugins/wikis/OmemoGajimPlugin")
769 (synopsis "Gajim OMEMO plugin")
770 (description
771 "This package provides the Gajim OMEMO plugin. OMEMO is an XMPP
772 Extension Protocol (XEP) for secure multi-client end-to-end encryption based
773 on Axolotl and PEP.")
774 (license license:gpl3+)))
775
776 (define-public dino
777 (package
778 (name "dino")
779 (version "0.1.0")
780 (source
781 (origin
782 (method url-fetch)
783 (uri (string-append "https://github.com/dino/dino/releases/download/v"
784 version "/dino-" version ".tar.gz"))
785 (sha256
786 (base32
787 "0dcq2jhpywgxrp9x1qqmrl2z50hazspqj547b9zz70apy3y4418h"))))
788 (build-system cmake-build-system)
789 (arguments
790 `(#:tests? #f
791 #:parallel-build? #f ; not supported
792 #:modules ((guix build cmake-build-system)
793 ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
794 (guix build utils))
795 #:imported-modules (,@%gnu-build-system-modules
796 (guix build cmake-build-system)
797 (guix build glib-or-gtk-build-system))
798 #:phases
799 (modify-phases %standard-phases
800 (add-after 'install 'glib-or-gtk-wrap
801 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
802 (inputs
803 `(("libgee" ,libgee)
804 ("libsignal-protocol-c" ,libsignal-protocol-c)
805 ("libgcrypt" ,libgcrypt)
806 ("libsoup" ,libsoup)
807 ("qrencode" ,qrencode)
808 ("sqlite" ,sqlite)
809 ("gpgme" ,gpgme)
810 ("gtk+" ,gtk+)
811 ("glib-networking" ,glib-networking)
812 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
813 (native-inputs
814 `(("pkg-config" ,pkg-config)
815 ("glib" ,glib "bin")
816 ("vala" ,vala)
817 ("gettext" ,gettext-minimal)))
818 (home-page "https://dino.im")
819 (synopsis "Graphical Jabber (XMPP) client")
820 (description "Dino is a Jabber (XMPP) client which aims to fit well into
821 a graphical desktop environment like GNOME.")
822 (license license:gpl3+)))
823
824 (define-public prosody
825 (package
826 (name "prosody")
827 (version "0.11.3")
828 (source (origin
829 (method url-fetch)
830 (uri (string-append "https://prosody.im/downloads/source/"
831 "prosody-" version ".tar.gz"))
832 (sha256
833 (base32
834 "11xz4milv2962qf75vrdwsvd8sy2332nf69202rmvz5989pvvnng"))))
835 (build-system gnu-build-system)
836 (arguments
837 `(#:tests? #f ;tests require "busted"
838 #:configure-flags (list "--no-example-certs")
839 #:modules ((ice-9 match)
840 (srfi srfi-1)
841 (guix build gnu-build-system)
842 (guix build utils))
843 #:phases
844 (modify-phases %standard-phases
845 (add-after 'unpack 'fix-configure-script
846 (lambda _
847 ;; The configure script aborts when it encounters unexpected
848 ;; arguments. Make it more tolerant.
849 (substitute* "configure"
850 (("exit 1") ""))
851 #t))
852 (add-after 'unpack 'fix-makefile
853 (lambda _
854 (substitute* "GNUmakefile"
855 ;; prosodyctl needs to read the configuration file.
856 (("^INSTALLEDCONFIG =.*") "INSTALLEDCONFIG = /etc/prosody\n")
857 ;; prosodyctl needs a place to put auto-generated certificates.
858 (("^INSTALLEDDATA =.*") "INSTALLEDDATA = /var/lib/prosody\n"))
859 #t))
860 (add-after 'install 'wrap-programs
861 (lambda* (#:key inputs outputs #:allow-other-keys)
862 ;; Make sure all executables in "bin" find the required Lua
863 ;; modules at runtime.
864 (let* ((out (assoc-ref outputs "out"))
865 (bin (string-append out "/bin/"))
866 (deps (delete #f (map (match-lambda
867 ((label . directory)
868 (if (string-prefix? "lua" label)
869 directory #f)))
870 inputs)))
871 (lua-path (string-join
872 (map (lambda (path)
873 (string-append
874 path "/share/lua/5.2/?.lua;"
875 path "/share/lua/5.2/?/?.lua"))
876 (cons out deps))
877 ";"))
878 (lua-cpath (string-join
879 (map (lambda (path)
880 (string-append
881 path "/lib/lua/5.2/?.so;"
882 path "/lib/lua/5.2/?/?.so"))
883 (cons out deps))
884 ";"))
885 (openssl (assoc-ref inputs "openssl"))
886 (coreutils (assoc-ref inputs "coreutils"))
887 (path (map (lambda (dir)
888 (string-append dir "/bin"))
889 (list openssl coreutils))))
890 (for-each (lambda (file)
891 (wrap-program file
892 `("LUA_PATH" ";" = (,lua-path))
893 `("LUA_CPATH" ";" = (,lua-cpath))
894 `("PATH" ":" prefix ,path)))
895 (find-files bin ".*"))
896 #t))))))
897 (inputs
898 `(("libidn" ,libidn)
899 ("openssl" ,openssl)
900 ("lua" ,lua-5.2)
901 ("lua5.2-bitop" ,lua5.2-bitop)
902 ("lua5.2-expat" ,lua5.2-expat)
903 ("lua5.2-socket" ,lua5.2-socket)
904 ("lua5.2-filesystem" ,lua5.2-filesystem)
905 ("lua5.2-sec" ,lua5.2-sec)))
906 (home-page "https://prosody.im/")
907 (synopsis "Jabber (XMPP) server")
908 (description "Prosody is a modern XMPP communication server. It aims to
909 be easy to set up and configure, and efficient with system resources.
910 Additionally, for developers it aims to be easy to extend and give a flexible
911 system on which to rapidly develop added functionality, or prototype new
912 protocols.")
913 (license license:x11)))
914
915 (define-public prosody-http-upload
916 (let ((changeset "765735bb590b")
917 (revision "1"))
918 (package
919 (name "prosody-http-upload")
920 (version (string-append "0-" revision "." (string-take changeset 7)))
921 (source (origin
922 (method hg-fetch)
923 (uri (hg-reference
924 (url "https://hg.prosody.im/prosody-modules/")
925 (changeset changeset)))
926 (file-name (string-append name "-" version "-checkout"))
927 (sha256
928 (base32
929 "142wrcism70nf8ffahhd961cqg2pi1h7ic8adfs3zwh0j3pnf41f"))))
930 (build-system trivial-build-system)
931 (arguments
932 '(#:modules ((guix build utils))
933 #:builder
934 (begin
935 (use-modules (guix build utils))
936 (let ((out (assoc-ref %outputs "out"))
937 (source (assoc-ref %build-inputs "source")))
938 (with-directory-excursion (in-vicinity source "mod_http_upload")
939 (install-file "mod_http_upload.lua" out))
940 #t))))
941 (home-page "https://modules.prosody.im/mod_http_upload.html")
942 (synopsis "XEP-0363: Allow clients to upload files over HTTP")
943 (description "This module implements XEP-0363: it allows clients to
944 upload files over HTTP.")
945 (license (package-license prosody)))))
946
947 (define-public prosody-smacks
948 (let ((changeset "67f1d1f22625")
949 (revision "1"))
950 (package
951 (name "prosody-smacks")
952 (version (string-append "0-" revision "." (string-take changeset 7)))
953 (source (origin
954 (method hg-fetch)
955 (uri (hg-reference
956 (url "https://hg.prosody.im/prosody-modules/")
957 (changeset changeset)))
958 (file-name (string-append name "-" version "-checkout"))
959 (sha256
960 (base32
961 "020ngpax30fgarah98yvlj0ni8rcdwq60if03a9hqdw8mic0nxxs"))))
962 (build-system trivial-build-system)
963 (arguments
964 '(#:modules ((guix build utils))
965 #:builder
966 (begin
967 (use-modules (guix build utils))
968 (let ((out (assoc-ref %outputs "out"))
969 (source (assoc-ref %build-inputs "source")))
970 (with-directory-excursion (in-vicinity source "mod_smacks")
971 (install-file "mod_smacks.lua" out))
972 #t))))
973 (home-page "https://modules.prosody.im/mod_smacks.html")
974 (synopsis "XEP-0198: Reliability and fast reconnects for XMPP")
975 (description "This module implements XEP-0198: when supported by both
976 the client and server, it can allow clients to resume a disconnected session,
977 and prevent message loss.")
978 (license (package-license prosody)))))
979
980 (define-public libtoxcore
981 (let ((revision "2")
982 (commit "bf69b54f64003d160d759068f4816b2d9b2e1e21"))
983 (package
984 (name "libtoxcore")
985 (version (string-append "0.0.0" "-"
986 revision "."(string-take commit 7)))
987 (source (origin
988 (method git-fetch)
989 (uri (git-reference
990 (url "https://github.com/irungentoo/toxcore.git")
991 (commit commit)))
992 (file-name (string-append name "-" version "-checkout"))
993 (sha256
994 (base32
995 "11lqra4yd7v293cp286ynff5lqz1pprzg8vn3wq6vryj08g88zqb"))))
996 (build-system gnu-build-system)
997 (arguments `(#:tests? #f)) ; FIXME: tests hang, some fail.
998 (native-inputs
999 `(("autoconf" ,autoconf)
1000 ("automake" ,automake)
1001 ("libtool" ,libtool)
1002 ("check" ,check)
1003 ("pkg-config" ,pkg-config)))
1004 (inputs
1005 `(("libsodium" ,libsodium)
1006 ("opus" ,opus)
1007 ("libvpx" ,libvpx)))
1008 (synopsis "Library for the Tox encrypted messenger protocol")
1009 (description
1010 "C library implementation of the Tox encrypted messenger protocol.")
1011 (license license:gpl3+)
1012 (home-page "https://tox.chat"))))
1013
1014 ;; Some tox clients move to c-toxcore, which seems to be where all the
1015 ;; recent development happens. It is run by the same developers as toxcore,
1016 ;; forked into a group namespace.
1017 (define-public c-toxcore
1018 (package
1019 (name "c-toxcore")
1020 (version "0.2.9")
1021 (source
1022 (origin
1023 (method git-fetch)
1024 (uri (git-reference
1025 (url "https://github.com/TokTok/c-toxcore.git")
1026 (commit (string-append "v" version))))
1027 (file-name (git-file-name name version))
1028 (sha256
1029 (base32
1030 "0aljr9hqybla6p61af6fdkv0x8gph7c2wacqqa9hq2z9w0p4fs5j"))))
1031 (arguments
1032 `(#:tests? #f)) ; FIXME: Testsuite seems to stay stuck on test 3. Disable
1033 ; for now.
1034 (build-system cmake-build-system)
1035 (native-inputs
1036 `(("pkg-config" ,pkg-config)))
1037 (propagated-inputs
1038 `(("libsodium" ,libsodium)
1039 ("opus" ,opus)
1040 ("libvpx" ,libvpx)))
1041 (home-page "https://tox.chat")
1042 (synopsis "Library for the Tox encrypted messenger protocol")
1043 (description
1044 "Official fork of the C library implementation of the Tox encrypted
1045 messenger protocol.")
1046 (license license:gpl3+)))
1047
1048 (define-public utox
1049 (package
1050 (name "utox")
1051 (version "0.17.1")
1052 (source
1053 (origin
1054 (method git-fetch)
1055 (uri (git-reference
1056 (url "https://github.com/uTox/uTox.git")
1057 (commit (string-append "v" version))
1058 (recursive? #t))) ;; Needed for 'minini' git submodule.
1059 (file-name (string-append name "-" version "-checkout"))
1060 (sha256
1061 (base32
1062 "17kwqw24iqljp2icih9k6ikx12gzr8zzqr8y5h35bg8m5s8pasq5"))))
1063 (build-system cmake-build-system)
1064 (arguments
1065 `(#:configure-flags '("-DENABLE_TESTS=on")
1066 #:phases
1067 (modify-phases %standard-phases
1068 (add-before 'build 'patch-absolute-filename-libgtk-3
1069 (lambda* (#:key inputs outputs #:allow-other-keys)
1070 (substitute* "../source/src/xlib/gtk.c"
1071 (("libgtk-3.so")
1072 (string-append (assoc-ref inputs "gtk+")
1073 "/lib/libgtk-3.so")))))
1074 (add-after 'install 'wrap-program
1075 (lambda* (#:key inputs outputs #:allow-other-keys)
1076 (wrap-program (string-append (assoc-ref outputs "out")
1077 "/bin/utox")
1078 ;; For GtkFileChooserDialog.
1079 `("GSETTINGS_SCHEMA_DIR" =
1080 (,(string-append (assoc-ref inputs "gtk+")
1081 "/share/glib-2.0/schemas")))))))))
1082 (inputs
1083 `(("dbus" ,dbus)
1084 ("filteraudio" ,filteraudio)
1085 ("fontconfig" ,fontconfig)
1086 ("freetype" ,freetype)
1087 ("libsodium" ,libsodium)
1088 ("c-toxcore" ,c-toxcore)
1089 ("gtk+" ,gtk+)
1090 ("libvpx" ,libvpx)
1091 ("libx11" ,libx11)
1092 ("libxext" ,libxext)
1093 ("libxrender" ,libxrender)
1094 ("openal" ,openal)
1095 ("v4l-utils" ,v4l-utils)))
1096 (native-inputs
1097 `(("check" ,check)
1098 ("pkg-config" ,pkg-config)))
1099 (synopsis "Lightweight Tox client")
1100 (description
1101 "Utox is a lightweight Tox client. Tox is a distributed and secure
1102 instant messenger with audio and video chat capabilities.")
1103 (home-page "http://utox.org/")
1104 (license license:gpl3)))
1105
1106 (define-public qtox
1107 (package
1108 (name "qtox")
1109 (version "1.16.3")
1110 (source (origin
1111 (method url-fetch)
1112 (uri (string-append "https://github.com/qTox/qTox/archive/v"
1113 version ".tar.gz"))
1114 (sha256
1115 (base32
1116 "10n3cgw9xaqin9la8wpd8v83bkjmimicgbyp5ninsdgsrgky4hmq"))
1117 (file-name (string-append name "-" version ".tar.gz"))))
1118 (build-system cmake-build-system)
1119 (arguments
1120 '(#:phases
1121 (modify-phases %standard-phases
1122 (add-after 'unpack 'fix-reproducibility-issues
1123 (lambda _
1124 (substitute* "src/main.cpp"
1125 (("__DATE__") "\"\"")
1126 (("__TIME__") "\"\"")
1127 (("TIMESTAMP") "\"\""))
1128 #t))
1129 ;; Ensure that icons are found at runtime.
1130 (add-after 'install 'wrap-executable
1131 (lambda* (#:key inputs outputs #:allow-other-keys)
1132 (let ((out (assoc-ref outputs "out")))
1133 (wrap-program (string-append out "/bin/qtox")
1134 `("QT_PLUGIN_PATH" prefix
1135 ,(list (string-append (assoc-ref inputs "qtsvg")
1136 "/lib/qt5/plugins/"))))))))))
1137 (inputs
1138 `(("ffmpeg" ,ffmpeg)
1139 ("filteraudio" ,filteraudio)
1140 ("glib" ,glib)
1141 ("gtk+" ,gtk+-2)
1142 ("libsodium" ,libsodium)
1143 ("c-toxcore" ,c-toxcore)
1144 ("libvpx" ,libvpx)
1145 ("libxscrnsaver" ,libxscrnsaver)
1146 ("libx11" ,libx11)
1147 ("libexif" ,libexif)
1148 ("sqlite" ,sqlite)
1149 ("openal" ,openal)
1150 ("qrencode" ,qrencode)
1151 ("qtbase" ,qtbase)
1152 ("qtsvg" ,qtsvg)
1153 ("sqlcipher" ,sqlcipher)))
1154 (native-inputs
1155 `(("pkg-config" ,pkg-config)
1156 ("qmake" ,qttools)))
1157 (home-page "https://qtox.github.io/")
1158 (synopsis "Tox chat client using Qt")
1159 (description "qTox is a Tox client that follows the Tox design
1160 guidelines. It provides an easy to use application that allows you to
1161 connect with friends and family without anyone else listening in.")
1162 (license license:gpl3+)))
1163
1164 (define-public pybitmessage
1165 (package
1166 (name "pybitmessage")
1167 (version "0.6.3.2")
1168 (source
1169 (origin
1170 (method git-fetch)
1171 (uri (git-reference
1172 (url "https://github.com/Bitmessage/PyBitmessage.git")
1173 (commit version)))
1174 (file-name (string-append name "-" version "-checkout"))
1175 (sha256
1176 (base32
1177 "1lmhbpwsqh1v93krlqqhafw2pc3y0qp8zby186yllbph6s8kdp35"))))
1178 (propagated-inputs
1179 ;; TODO:
1180 ;; Package "pyopencl", required in addition to numpy for OpenCL support.
1181 ;; Package "gst123", required in addition to alsa-utils and
1182 ;; mpg123 for sound support.
1183 `(("python2-msgpack" ,python2-msgpack)
1184 ("python2-pythondialog" ,python2-pythondialog)
1185 ("python2-pyqt-4" ,python2-pyqt-4)
1186 ("python2-sip" ,python2-sip)
1187 ("python2-pysqlite" ,python2-pysqlite)
1188 ("python2-pyopenssl" ,python2-pyopenssl)))
1189 (native-inputs
1190 `(("openssl" ,openssl)))
1191 (build-system python-build-system)
1192 (arguments
1193 `(#:modules ((guix build python-build-system)
1194 (guix build utils))
1195 #:tests? #f ;no test target
1196 #:python ,python-2
1197 #:phases
1198 (modify-phases %standard-phases
1199 (add-after 'unpack 'fix-unmatched-python-shebangs
1200 (lambda* (#:key inputs #:allow-other-keys)
1201 (substitute* "src/bitmessagemain.py"
1202 (("#!/usr/bin/env python2.7")
1203 (string-append "#!" (which "python"))))
1204 (substitute* "src/bitmessagecli.py"
1205 (("#!/usr/bin/env python2.7.x")
1206 (string-append "#!" (which "python"))))
1207 #t))
1208 (add-after 'unpack 'fix-depends
1209 (lambda* (#:key inputs #:allow-other-keys)
1210 (substitute* "src/depends.py"
1211 (("libcrypto.so")
1212 (string-append (assoc-ref inputs "openssl")
1213 "/lib/libcrypto.so")))
1214 #t))
1215 (add-after 'unpack 'fix-local-files-in-paths
1216 (lambda* (#:key outputs #:allow-other-keys)
1217 (substitute* "src/proofofwork.py"
1218 (("bitmsghash.so")
1219 (string-append (assoc-ref outputs "out")
1220 "/lib/bitmsghash.so")))
1221 #t))
1222 (add-after 'unpack 'fix-pyelliptic
1223 (lambda* (#:key inputs #:allow-other-keys)
1224 (substitute* "src/pyelliptic/openssl.py"
1225 (("libcrypto.so")
1226 (string-append (assoc-ref inputs "openssl")
1227 "/lib/libcrypto.so"))
1228 (("libssl.so")
1229 (string-append (assoc-ref inputs "openssl")
1230 "/lib/libssl.so")))
1231 #t))
1232 (add-after 'unpack 'noninteractive-build
1233 ;; This applies upstream commit 4c597d3f7cf9f83a763472aa165a1a4292019f20
1234 (lambda _
1235 (substitute* "setup.py"
1236 (("except NameError")
1237 "except EOFError, NameError"))
1238 #t))
1239 ;; XXX: python setup.py does not build and install bitmsghash,
1240 ;; without it PyBitmessage tries to compile it at first run
1241 ;; in the store, which due to obvious reasons fails. Do it
1242 ;; and place it in /lib.
1243 (add-after 'unpack 'build-and-install-bitmsghash
1244 (lambda* (#:key outputs #:allow-other-keys)
1245 (with-directory-excursion "src/bitmsghash"
1246 (system* "make")
1247 (install-file "bitmsghash.so"
1248 (string-append (assoc-ref outputs "out") "/lib")))
1249 #t)))))
1250 (license license:expat)
1251 (description
1252 "Distributed and trustless peer-to-peer communications protocol
1253 for sending encrypted messages to one person or many subscribers.")
1254 (synopsis "Distributed peer-to-peer communication")
1255 (home-page "https://bitmessage.org/")))
1256
1257 (define-public ytalk
1258 (package
1259 (name "ytalk")
1260 (version "3.3.0")
1261 (source
1262 (origin
1263 (method url-fetch)
1264 (uri (string-append "ftp://ftp.ourproject.org/pub/ytalk/ytalk-"
1265 version ".tar.gz"))
1266 (sha256
1267 (base32
1268 "1d3jhnj8rgzxyxjwfa22vh45qwzjvxw1qh8fz6b7nfkj3zvk9jvf"))))
1269 (build-system gnu-build-system)
1270 (inputs
1271 `(("ncurses" ,ncurses)))
1272 (home-page "https://ytalk.ourproject.org")
1273 (synopsis "Multi-user chat program")
1274 (description "Ytalk is a replacement for the BSD talk program. Its main
1275 advantage is the ability to communicate with any arbitrary number of users at
1276 once. It supports both talk protocols (\"talk\" and \"ntalk\") and can communicate
1277 with several different talk daemons at the same time.")
1278 (license license:gpl2+)))
1279
1280 (define-public gloox
1281 (package
1282 (name "gloox")
1283 (version "1.0.23")
1284 (source
1285 (origin
1286 (method url-fetch)
1287 (uri (string-append "https://camaya.net/download/gloox-"
1288 version ".tar.bz2"))
1289 (sha256
1290 (base32 "12jz8glg9zmyk0iyv1ywf5i0hq93dfq8lvn6lyjgy8730w66mjwp"))))
1291 (build-system gnu-build-system)
1292 (inputs
1293 `(("libidn" ,libidn)
1294 ("gnutls" ,gnutls)
1295 ("zlib" ,zlib)))
1296 (native-inputs
1297 `(("pkg-config" ,pkg-config)))
1298 (synopsis "Portable high-level Jabber/XMPP library for C++")
1299 (description
1300 "gloox is a full-featured Jabber/XMPP client library,
1301 written in ANSI C++. It makes writing spec-compliant clients easy
1302 and allows for hassle-free integration of Jabber/XMPP functionality
1303 into existing applications.")
1304 (home-page "https://camaya.net/gloox")
1305 (license license:gpl3)))
1306
1307 (define-public perl-net-psyc
1308 (package
1309 (name "perl-net-psyc")
1310 (version "1.3")
1311 (source
1312 (origin
1313 (method url-fetch)
1314 (uri (string-append "https://perl.psyc.eu/"
1315 "perlpsyc-" version ".zip"))
1316 (file-name (string-append name "-" version ".zip"))
1317 (sha256
1318 (base32
1319 "0vsjclglkwgbyd9m5ad642fyysxw2x725nhq4r2m9pvqaq6s5yf2"))))
1320 (build-system perl-build-system)
1321 (native-inputs
1322 `(("unzip" ,unzip)))
1323 (inputs
1324 `(("perl-curses" ,perl-curses)
1325 ("perl-io-socket-ssl" ,perl-io-socket-ssl)))
1326 (arguments
1327 `(#:phases
1328 (modify-phases %standard-phases
1329 (delete 'configure) ; No configure script
1330 ;; There is a Makefile, but it does not install everything
1331 ;; (leaves out psycion) and says
1332 ;; "# Just to give you a rough idea". XXX: Fix it upstream.
1333 (replace 'build
1334 (lambda _ (invoke "make" "manuals")))
1335 (replace 'install
1336 (lambda* (#:key outputs #:allow-other-keys)
1337 (let* ((out (assoc-ref outputs "out"))
1338 (doc (string-append out "/share/doc/perl-net-psyc"))
1339 (man1 (string-append out "/share/man/man1"))
1340 (man3 (string-append out "/share/man/man3"))
1341 (bin (string-append out "/bin"))
1342 (libpsyc (string-append out "/lib/psyc/ion"))
1343 (libperl (string-append out "/lib/perl5/site_perl/"
1344 ,(package-version perl))))
1345
1346 (copy-recursively "lib/perl5" libperl)
1347 (copy-recursively "lib/psycion" libpsyc)
1348 (copy-recursively "bin" bin)
1349 (install-file "cgi/psycpager" (string-append doc "/cgi"))
1350 (copy-recursively "contrib" (string-append doc "/contrib"))
1351 (copy-recursively "hooks" (string-append doc "/hooks"))
1352 (copy-recursively "sdj" (string-append doc "/sdj"))
1353 (install-file "README.txt" doc)
1354 (install-file "TODO.txt" doc)
1355 (copy-recursively "share/man/man1" man1)
1356 (copy-recursively "share/man/man3" man3)
1357 #t)))
1358 (add-after 'install 'wrap-programs
1359 (lambda* (#:key outputs #:allow-other-keys)
1360 ;; Make sure all executables in "bin" find the Perl modules
1361 ;; provided by this package at runtime.
1362 (let* ((out (assoc-ref outputs "out"))
1363 (bin (string-append out "/bin/"))
1364 (path (getenv "PERL5LIB")))
1365 (for-each (lambda (file)
1366 (wrap-program file
1367 `("PERL5LIB" ":" prefix (,path))))
1368 (find-files bin "\\.*$"))
1369 #t))))))
1370 (description
1371 "@code{Net::PSYC} with support for TCP, UDP, Event.pm, @code{IO::Select} and
1372 Gtk2 event loops. This package includes 12 applications and additional scripts:
1373 psycion (a @uref{https://about.psyc.eu,PSYC} chat client), remotor (a control console
1374 for @uref{https://torproject.org,tor} router) and many more.")
1375 (synopsis "Perl implementation of PSYC protocol")
1376 (home-page "https://perl.psyc.eu")
1377 (license (list license:gpl2
1378 license:perl-license
1379 ;; contrib/irssi-psyc.pl:
1380 license:public-domain
1381 ;; bin/psycplay states AGPL with no version:
1382 license:agpl3+))))
1383
1384 (define-public libpsyc
1385 (package
1386 (name "libpsyc")
1387 (version "20160913")
1388 (source (origin
1389 (method url-fetch)
1390 (uri (string-append "http://www.psyced.org/files/"
1391 name "-" version ".tar.xz"))
1392 (sha256
1393 (base32
1394 "14q89fxap05ajkfn20rnhc6b1h4i3i2adyr7y6hs5zqwb2lcmc1p"))))
1395 (build-system gnu-build-system)
1396 (native-inputs
1397 `(("perl" ,perl)
1398 ("netcat" ,netcat)
1399 ("procps" ,procps)))
1400 (arguments
1401 `(#:make-flags
1402 (list "CC=gcc"
1403 (string-append "PREFIX=" (assoc-ref %outputs "out")))
1404 #:phases
1405 (modify-phases %standard-phases
1406 ;; The rust bindings are the only ones in use, the lpc bindings
1407 ;; are in psyclpc. The other bindings are not used by anything,
1408 ;; the chances are high that the bindings do not even work,
1409 ;; therefore we do not include them.
1410 ;; TODO: Get a cargo build system in Guix.
1411 (delete 'configure)))) ; no configure script
1412 (home-page "https://about.psyc.eu/libpsyc")
1413 (description
1414 "@code{libpsyc} is a PSYC library in C which implements
1415 core aspects of PSYC, useful for all kinds of clients and servers
1416 including psyced.")
1417 (synopsis "PSYC library in C")
1418 (license license:agpl3+)))
1419
1420 ;; This commit removes the historic bundled pcre and makes psyclpc reproducible.
1421 (define-public psyclpc
1422 (let* ((commit "61cf9aa81297085e5c40170fd01221c752f8deba")
1423 (revision "2"))
1424 (package
1425 (name "psyclpc")
1426 (version (string-append "20160821-" revision "." (string-take commit 7)))
1427 (source (origin
1428 (method git-fetch)
1429 (uri (git-reference
1430 (url "git://git.psyced.org/git/psyclpc")
1431 (commit commit)))
1432 (file-name (string-append name "-" version "-checkout"))
1433 (sha256
1434 (base32
1435 "1viwqymbhn3cwvx0zl58rlzl5gw47zxn0ldg2nbi55ghm5zxl1z5"))))
1436 (build-system gnu-build-system)
1437 (arguments
1438 `(#:tests? #f ; There are no tests/checks.
1439 #:configure-flags
1440 ;; If you have questions about this part, look at
1441 ;; "src/settings/psyced" and the ebuild.
1442 (list
1443 "--enable-use-tls=yes"
1444 "--enable-use-mccp" ; Mud Client Compression Protocol, leave this enabled.
1445 (string-append "--prefix="
1446 (assoc-ref %outputs "out"))
1447 ;; src/Makefile: Set MUD_LIB to the directory which contains
1448 ;; the mud data. defaults to MUD_LIB = @libdir@
1449 (string-append "--libdir="
1450 (assoc-ref %outputs "out")
1451 "/opt/psyced/world")
1452 (string-append "--bindir="
1453 (assoc-ref %outputs "out")
1454 "/opt/psyced/bin")
1455 ;; src/Makefile: Set ERQ_DIR to directory which contains the
1456 ;; stuff which ERQ can execute (hopefully) savely. Was formerly
1457 ;; defined in config.h. defaults to ERQ_DIR= @libexecdir@
1458 (string-append "--libexecdir="
1459 (assoc-ref %outputs "out")
1460 "/opt/psyced/run"))
1461 #:phases
1462 (modify-phases %standard-phases
1463 (add-before 'configure 'chdir-to-src
1464 ;; We need to pass this as env variables
1465 ;; and manually change the directory.
1466 (lambda _
1467 (chdir "src")
1468 (setenv "CONFIG_SHELL" (which "sh"))
1469 (setenv "SHELL" (which "sh"))
1470 #t)))
1471 #:make-flags (list "install-all")))
1472 (inputs
1473 `(("zlib" ,zlib)
1474 ("openssl" ,openssl-1.0)
1475 ("pcre" ,pcre)))
1476 (native-inputs
1477 `(("pkg-config" ,pkg-config)
1478 ("bison" ,bison)
1479 ("gettext" ,gettext-minimal)
1480 ("help2man" ,help2man)
1481 ("autoconf" ,autoconf)
1482 ("automake" ,automake)))
1483 (home-page "http://lpc.psyc.eu/")
1484 (synopsis "psycLPC is a multi-user network server programming language")
1485 (description
1486 "LPC is a bytecode language, invented to specifically implement
1487 multi user virtual environments on the internet. This technology is used for
1488 MUDs and also the psyced implementation of the Protocol for SYnchronous
1489 Conferencing (PSYC). psycLPC is a fork of LDMud with some new features and
1490 many bug fixes.")
1491 (license license:gpl2))))
1492
1493 (define-public loudmouth
1494 (package
1495 (name "loudmouth")
1496 (version "1.5.3")
1497 (source
1498 (origin
1499 (method url-fetch)
1500 (uri (string-append "https://mcabber.com/files/loudmouth/"
1501 name "-" version ".tar.bz2"))
1502 (sha256
1503 (base32
1504 "0b6kd5gpndl9nzis3n6hcl0ldz74bnbiypqgqa1vgb0vrcar8cjl"))))
1505 (build-system gnu-build-system)
1506 (inputs
1507 `(("glib" ,glib)
1508 ("gnutls" ,gnutls)
1509 ("libidn" ,libidn)))
1510 (native-inputs
1511 `(("pkg-config" ,pkg-config)
1512 ("check" ,check)
1513 ("glib" ,glib "bin") ; gtester
1514 ("gtk-doc" ,gtk-doc)))
1515 (home-page "https://mcabber.com/")
1516 (description
1517 "Loudmouth is a lightweight and easy-to-use C library for programming
1518 with the XMPP (formerly known as Jabber) protocol. It is designed to be
1519 easy to get started with and yet extensible to let you do anything the XMPP
1520 protocol allows.")
1521 (synopsis "Asynchronous XMPP library")
1522 ;; The files have LGPL2.0+ headers, but COPYING specifies LGPL2.1.
1523 (license license:lgpl2.0+)))
1524
1525 (define-public mcabber
1526 (package
1527 (name "mcabber")
1528 (version "1.1.0")
1529 (source
1530 (origin
1531 (method url-fetch)
1532 (uri (string-append "https://mcabber.com/files/"
1533 name "-" version ".tar.bz2"))
1534 (sha256
1535 (base32
1536 "1ggh865p1rf10ffsnf4g6qv9i8bls36dxdb1nzs5r9vdqci2rz04"))))
1537 (build-system gnu-build-system)
1538 (arguments
1539 '(#:configure-flags (list "--enable-otr"
1540 "--enable-aspell")))
1541 (inputs
1542 `(("gpgme" ,gpgme)
1543 ("libotr" ,libotr)
1544 ("aspell" ,aspell)
1545 ("libidn" ,libidn)
1546 ("glib" ,glib)
1547 ("ncurses" ,ncurses)
1548 ("loudmouth" ,loudmouth)))
1549 (native-inputs
1550 `(("pkg-config" ,pkg-config)))
1551 (home-page "https://mcabber.com")
1552 (description
1553 "Mcabber is a small XMPP (Jabber) console client, which includes features
1554 such as SASL and TLS support, @dfn{Multi-User Chat} (MUC) support, logging,
1555 command-completion, OpenPGP encryption, @dfn{Off-the-Record Messaging} (OTR)
1556 support, and more.")
1557 (synopsis "Small XMPP console client")
1558 (license license:gpl2+)))
1559
1560 (define-public freetalk
1561 (package
1562 (name "freetalk")
1563 (version "4.1")
1564 (source (origin
1565 (method url-fetch)
1566 (uri (string-append "mirror://gnu/freetalk/freetalk-"
1567 version ".tar.gz"))
1568 (sha256
1569 (base32
1570 "1rmrn7a1bb7vm26yaklrvx008a9qhwc32s57dwrlf40lv9gffwny"))))
1571 (build-system gnu-build-system)
1572 (arguments
1573 `(#:phases
1574 (modify-phases %standard-phases
1575 ;; For 'system' commands in Scheme code.
1576 (add-after 'install 'wrap-program
1577 (lambda* (#:key inputs outputs #:allow-other-keys)
1578 (let* ((out (assoc-ref outputs "out"))
1579 (bash (assoc-ref inputs "bash"))
1580 (coreutils (assoc-ref inputs "coreutils"))
1581 (less (assoc-ref inputs "less")))
1582 (wrap-program (string-append out "/bin/freetalk")
1583 `("PATH" ":" prefix
1584 ,(map (lambda (dir)
1585 (string-append dir "/bin"))
1586 (list bash coreutils less))))
1587 #t))))))
1588 (native-inputs
1589 `(("autoconf" ,autoconf)
1590 ("automake" ,automake)
1591 ("pkg-config" ,pkg-config)
1592 ("texinfo" ,texinfo)))
1593 (inputs
1594 `(("bash" ,bash)
1595 ("glib" ,glib)
1596 ("guile" ,guile-2.0)
1597 ("less" ,less)
1598 ("loudmouth" ,loudmouth)
1599 ("readline" ,readline)))
1600 (synopsis "Extensible console-based Jabber client")
1601 (description
1602 "GNU Freetalk is a command-line Jabber/XMPP chat client. It notably uses
1603 the Readline library to handle input, so it features convenient navigation of
1604 text as well as tab-completion of buddy names, commands and English words. It
1605 is also scriptable and extensible via Guile.")
1606 (home-page "https://www.gnu.org/software/freetalk/")
1607 (license license:gpl3+)))
1608
1609 (define-public libmesode
1610 (package
1611 (name "libmesode")
1612 (version "0.9.3")
1613 (source (origin
1614 (method git-fetch)
1615 (uri (git-reference
1616 (url "https://github.com/boothj5/libmesode.git")
1617 (commit version)))
1618 (file-name (git-file-name name version))
1619 (sha256
1620 (base32
1621 "0xzfg1xx88cn36352nnjlb1p7xyw32yqkhjzq10px88iaaqz1vv0"))))
1622 (build-system gnu-build-system)
1623 (inputs
1624 `(("expat" ,expat)
1625 ("openssl" ,openssl)))
1626 (native-inputs
1627 `(("autoconf" ,autoconf)
1628 ("automake" ,automake)
1629 ("libtool" ,libtool)
1630 ("pkg-config" ,pkg-config)))
1631 (synopsis "C library for writing XMPP clients")
1632 (description "Libmesode is a fork of libstrophe for use with Profanity
1633 XMPP Client. In particular, libmesode provides extra TLS functionality such as
1634 manual SSL certificate verification.")
1635 (home-page "https://github.com/boothj5/libmesode")
1636 ;; Dual-licensed.
1637 (license (list license:gpl3+ license:x11))))
1638
1639 (define-public libstrophe
1640 (package
1641 (name "libstrophe")
1642 (version "0.9.3")
1643 (source
1644 (origin
1645 (method git-fetch)
1646 (uri (git-reference
1647 (url "https://github.com/strophe/libstrophe.git")
1648 (commit version)))
1649 (file-name (git-file-name name version))
1650 (sha256
1651 (base32 "1g1l0w9z9hdy5ncdvd9097gi7k7783did6py5h9camlpb2fnk5mk"))))
1652 (build-system gnu-build-system)
1653 (inputs
1654 `(("expat" ,expat)
1655 ("openssl" ,openssl)))
1656 (native-inputs
1657 `(("autoconf" ,autoconf)
1658 ("automake" ,automake)
1659 ("libtool" ,libtool)
1660 ("pkg-config" ,pkg-config)))
1661 (synopsis "C library for writing XMPP clients")
1662 (description "Libstrophe is a minimal XMPP library written in C. It has
1663 almost no external dependencies, only an XML parsing library (expat or libxml
1664 are both supported).")
1665 (home-page "http://strophe.im/libstrophe")
1666 ;; Dual-licensed.
1667 (license (list license:gpl3+ license:x11))))
1668
1669 (define-public profanity
1670 (package
1671 (name "profanity")
1672 (version "0.8.1")
1673 (source (origin
1674 (method url-fetch)
1675 (uri (string-append "https://profanity-im.github.io/profanity-"
1676 version ".tar.gz"))
1677 (sha256
1678 (base32
1679 "15yrx2ir2bilxpjfaxpjb93yjpvpvcvh5r7wbsjx6kmmy7qg2zvb"))))
1680 (build-system gnu-build-system)
1681 (arguments
1682 '(#:configure-flags
1683 (list "--enable-c-plugins"
1684 "--enable-otr"
1685 "--enable-omemo"
1686 "--enable-pgp"
1687 "--enable-icons"
1688 "--enable-notifications")))
1689 (inputs
1690 `(("curl" ,curl)
1691 ("expat" ,expat)
1692 ("glib" ,glib)
1693 ("gpgme" ,gpgme)
1694 ("libmesode" ,libmesode)
1695 ("libotr" ,libotr)
1696 ("ncurses" ,ncurses)
1697 ("openssl" ,openssl)
1698 ("readline" ,readline)))
1699 (native-inputs
1700 `(("autoconf" ,autoconf)
1701 ("autoconf-archive" ,autoconf-archive)
1702 ("automake" ,automake)
1703 ("cmocka" ,cmocka)
1704 ("gtk+" ,gtk+-2)
1705 ("libnotify" ,libnotify)
1706 ("libtool" ,libtool)
1707 ("libsignal-protocol-c" ,libsignal-protocol-c)
1708 ("pkg-config" ,pkg-config)))
1709 (synopsis "Console-based XMPP client")
1710 (description "Profanity is a console based XMPP client written in C
1711 using ncurses and libmesode, inspired by Irssi.")
1712 (home-page "https://profanity-im.github.io")
1713 (license license:gpl3+)))
1714
1715 (define-public libircclient
1716 (package
1717 (name "libircclient")
1718 (version "1.10")
1719 (source
1720 (origin
1721 (method url-fetch)
1722 (uri (string-append "mirror://sourceforge/libircclient/libircclient/"
1723 version "/libircclient-" version ".tar.gz"))
1724 (sha256
1725 (base32
1726 "0b9wa0h3xc31wpqlvgxgnvqp5wgx3kwsf5s9432m5cj8ycx6zcmv"))))
1727 (build-system gnu-build-system)
1728 (inputs
1729 `(("openssl" ,openssl)))
1730 (arguments
1731 `(#:configure-flags
1732 (list (string-append "--libdir="
1733 (assoc-ref %outputs "out") "/lib")
1734 "--enable-shared"
1735 "--enable-ipv6"
1736 "--enable-openssl")
1737 #:tests? #f)) ; no test suite
1738 (home-page "https://www.ulduzsoft.com/libircclient/")
1739 (synopsis "Library implementing the client IRC protocol")
1740 (description "Libircclient is a library which implements the client IRC
1741 protocol. It is designed to be small, fast, portable and compatible with the
1742 RFC standards as well as non-standard but popular features. It can be used for
1743 building the IRC clients and bots.")
1744 (license license:lgpl3+)))
1745
1746 (define-public toxic
1747 (package
1748 (name "toxic")
1749 (version "0.8.3")
1750 (source
1751 (origin
1752 (method git-fetch)
1753 (uri (git-reference
1754 (url "https://github.com/JFreegman/toxic.git")
1755 (commit (string-append "v" version))))
1756 (sha256
1757 (base32 "09l2j3lwvrq7bf3051vjsnml9w63790ly3iylgf26gkrmld6k31w"))
1758 (file-name (git-file-name name version))))
1759 (build-system gnu-build-system)
1760 (arguments
1761 `(#:tests? #f ; no tests
1762 #:make-flags
1763 (list
1764 "CC=gcc"
1765 (string-append "PREFIX="
1766 (assoc-ref %outputs "out")))
1767 #:phases
1768 (modify-phases %standard-phases
1769 (delete 'configure)
1770 (add-before 'build 'enable-python-scripting
1771 (lambda _
1772 ;; XXX: For compatibility with Python 3.8, adjust python3-config
1773 ;; invokation to include --embed; see
1774 ;; <https://github.com/JFreegman/toxic/issues/533>.
1775 (substitute* "cfg/checks/python.mk"
1776 (("python3-config --ldflags")
1777 "python3-config --ldflags --embed"))
1778 (setenv "ENABLE_PYTHON" "1")
1779 #t)))))
1780 (inputs
1781 `(("c-toxcore" ,c-toxcore)
1782 ("curl" ,curl)
1783 ("freealut" ,freealut)
1784 ("gdk-pixbuf" ,gdk-pixbuf) ; for libnotify.pc
1785 ("libconfig" ,libconfig)
1786 ("libnotify" ,libnotify)
1787 ("libpng" ,libpng)
1788 ("libvpx" ,libvpx)
1789 ("libx11" ,libx11)
1790 ("ncurses" ,ncurses)
1791 ("openal" ,openal)
1792 ("python" ,python)
1793 ("qrencode" ,qrencode)))
1794 (native-inputs
1795 `(("pkg-config" ,pkg-config)))
1796 (home-page "https://github.com/JFreegman/toxic")
1797 (synopsis "Tox chat client using ncurses")
1798 (description "Toxic is a console-based instant messaging client, using
1799 c-toxcore and ncurses. It provides audio calls, sound and desktop
1800 notifications, and Python scripting support.")
1801 (license license:gpl3+)))
1802
1803 (define-public libqmatrixclient
1804 (package
1805 (name "libqmatrixclient")
1806 (version "0.5.2")
1807 (source
1808 (origin
1809 (method git-fetch)
1810 (uri (git-reference
1811 (url "https://github.com/QMatrixClient/libqmatrixclient")
1812 (commit version)))
1813 (file-name (git-file-name name version))
1814 (sha256
1815 (base32 "1bhlqfs7251fss4icx794ka614npr6zyrpp4qwc4q5408ykfm7lr"))))
1816 (build-system cmake-build-system)
1817 (inputs
1818 `(("qtbase" ,qtbase)
1819 ("qtmultimedia" ,qtmultimedia)))
1820 (arguments
1821 `(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON")
1822 #:tests? #f)) ; no tests
1823 (home-page "https://matrix.org/docs/projects/sdk/libqmatrixclient.html")
1824 (synopsis "Qt5 client library for the Matrix instant messaging protocol")
1825 (description "libqmatrixclient is a Qt5 library to write clients for the
1826 Matrix instant messaging protocol. Quaternion is the reference client
1827 implementation. Quaternion and libqmatrixclient together form the
1828 QMatrixClient project.")
1829 (license license:lgpl2.1+)))
1830
1831 (define-public mtxclient
1832 (package
1833 (name "mtxclient")
1834 (version "0.2.1")
1835 (source
1836 (origin
1837 (method git-fetch)
1838 (uri (git-reference
1839 (url "https://github.com/Nheko-Reborn/mtxclient.git")
1840 (commit (string-append "v" version))))
1841 (file-name (git-file-name name version))
1842 (sha256
1843 (base32 "0pycznrvj57ff6gbwfn1xj943d2dr4vadl79hii1z16gn0nzxpmj"))))
1844 (arguments
1845 `(#:configure-flags
1846 (list
1847 ;; Disable example binaries (not installed)
1848 "-DBUILD_LIB_EXAMPLES=OFF")
1849 #:phases
1850 (modify-phases %standard-phases
1851 (add-before 'configure 'disable-network-tests
1852 (lambda _
1853 (substitute* "CMakeLists.txt"
1854 (("add_test\\((BasicConnectivity|ClientAPI|MediaAPI|Encryption)")
1855 "# add_test"))
1856 #t))
1857 (add-before 'configure 'set-home
1858 (lambda _
1859 ;; Tries to create package registry file
1860 ;; So, set HOME.
1861 (setenv "HOME" "/tmp")
1862 #t)))))
1863 (build-system cmake-build-system)
1864 (inputs
1865 `(("boost" ,boost)
1866 ("json-modern-cxx" ,json-modern-cxx)
1867 ("libolm" ,libolm)
1868 ("libsodium" ,libsodium)
1869 ("openssl" ,openssl)
1870 ("spdlog" ,spdlog)
1871 ("zlib" ,zlib)))
1872 (native-inputs
1873 `(("googletest" ,googletest)
1874 ("pkg-config" ,pkg-config)))
1875 (home-page "https://github.com/Nheko-Reborn/mtxclient")
1876 (synopsis "Client API library for the Matrix protocol")
1877 (description "@code{mtxclient} is a C++ library that implements client API
1878 for the Matrix protocol. It is built on to of @code{Boost.Asio}.")
1879 (license license:expat)))
1880
1881 (define-public nheko
1882 (package
1883 (name "nheko")
1884 (version "0.6.4")
1885 (source
1886 (origin
1887 (method git-fetch)
1888 (uri (git-reference
1889 (url "https://github.com/Nheko-Reborn/nheko.git")
1890 (commit (string-append "v" version))))
1891 (file-name (git-file-name name version))
1892 (sha256
1893 (base32 "19dkc98l1q4070v6mli4ybqn0ip0za607w39hjf0x8rqdxq45iwm"))))
1894 (arguments
1895 `(#:tests? #f ;no test target
1896 #:configure-flags
1897 (list
1898 "-DCMAKE_BUILD_TYPE=Release"
1899 "-DCMAKE_CXX_FLAGS=-fpermissive")
1900 #:phases
1901 (modify-phases %standard-phases
1902 (add-after 'unpack 'remove-Werror
1903 (lambda _
1904 (substitute* "CMakeLists.txt"
1905 (("-Werror") ""))
1906 #t))
1907 (add-after 'unpack 'fix-determinism
1908 (lambda _
1909 ;; Make Qt deterministic.
1910 (setenv "QT_RCC_SOURCE_DATE_OVERRIDE" "1")
1911 #t)))))
1912 (build-system qt-build-system)
1913 (inputs
1914 `(("boost" ,boost)
1915 ("cmark" ,cmark)
1916 ("json-modern-cxx" ,json-modern-cxx)
1917 ("libolm" ,libolm)
1918 ("lmdb" ,lmdb)
1919 ("lmdbxx" ,lmdbxx)
1920 ("mtxclient" ,mtxclient)
1921 ("openssl" ,openssl)
1922 ("qtbase" ,qtbase)
1923 ("qtsvg" ,qtsvg)
1924 ("qtmultimedia" ,qtmultimedia)
1925 ("spdlog" ,spdlog)
1926 ("tweeny" ,tweeny)
1927 ("zlib" ,zlib)))
1928 (native-inputs
1929 `(("pkg-config" ,pkg-config)
1930 ("qtlinguist" ,qttools)))
1931 (home-page "https://github.com/Nheko-Reborn/nheko")
1932 (synopsis "Desktop client for Matrix using Qt and C++14")
1933 (description "@code{Nheko} want to provide a native desktop app for the
1934 Matrix protocol that feels more like a mainstream chat app and less like an IRC
1935 client.
1936
1937 There is support for:
1938 @itemize
1939 @item E2E encryption (text messages only: attachments are currently sent unencrypted).
1940 @item User registration.
1941 @item Creating, joining & leaving rooms.
1942 @item Sending & receiving invites.
1943 @item Sending & receiving files and emoji.
1944 @item Typing notifications.
1945 @item Username auto-completion.
1946 @item Message & mention notifications.
1947 @item Redacting messages.
1948 @item Read receipts.
1949 @item Basic communities support.
1950 @item Room switcher (@key{ctrl-K}).
1951 @item Light, Dark & System themes.
1952 @end itemize")
1953 (license license:gpl3+)))
1954
1955 (define-public quaternion
1956 (package
1957 (name "quaternion")
1958 (version "0.0.9.4c")
1959 (source
1960 (origin
1961 (method git-fetch)
1962 (uri (git-reference
1963 (url "https://github.com/QMatrixClient/Quaternion")
1964 (commit version)))
1965 (file-name (git-file-name name version))
1966 (sha256
1967 (base32 "0gpv6b3nn3lsyym8809kiqkpdszfasldqjpk5s542zyn41gdlql4"))))
1968 (build-system qt-build-system)
1969 (inputs
1970 `(("libqmatrixclient" ,libqmatrixclient)
1971 ("qtbase" ,qtbase)
1972 ("qtdeclarative" ,qtdeclarative)
1973 ("qtmultimedia" ,qtmultimedia)
1974 ("qtquickcontrols" ,qtquickcontrols)
1975 ("qtquickcontrols2" ,qtquickcontrols2)
1976 ("qtsvg" ,qtsvg)
1977 ("qttools" ,qttools)))
1978 (arguments
1979 `(#:tests? #f)) ; no tests
1980 (home-page "https://matrix.org/docs/projects/client/quaternion.html")
1981 (synopsis "Graphical client for the Matrix instant messaging protocol")
1982 (description "Quaternion is a Qt5 desktop client for the Matrix instant
1983 messaging protocol. It uses libqmatrixclient and is its reference client
1984 implementation. Quaternion and libqmatrixclient together form the
1985 QMatrixClient project.")
1986 (license (list license:gpl3+ ; all source code
1987 license:lgpl3+)))) ; icons/breeze
1988
1989 (define-public hangups
1990 (package
1991 (name "hangups")
1992 (version "0.4.10")
1993 (source
1994 (origin
1995 (method url-fetch)
1996 (uri (pypi-uri "hangups" version))
1997 (sha256
1998 (base32 "0ww9z9kcb02pwnr8q1ll31wkzspc1fci1ly8ifrwzxysp4rxy3j5"))))
1999 (build-system python-build-system)
2000 (arguments
2001 `(#:phases
2002 (modify-phases %standard-phases
2003 (add-before 'build 'relax-dependencies
2004 ;; Relax overly strict package version specifications.
2005 (lambda _
2006 (substitute* "setup.py"
2007 (("==") ">="))
2008 #t)))))
2009 (propagated-inputs
2010 `(("python-aiohttp" ,python-aiohttp)
2011 ("python-appdirs" ,python-appdirs)
2012 ("python-async-timeout" ,python-async-timeout)
2013 ("python-configargparse" ,python-configargparse)
2014 ("python-mechanicalsoup" ,python-mechanicalsoup)
2015 ("python-protobuf" ,python-protobuf-3.6)
2016 ("python-readlike" ,python-readlike)
2017 ("python-reparser" ,python-reparser)
2018 ("python-requests" ,python-requests)
2019 ("python-urwid" ,python-urwid)))
2020 (native-inputs
2021 `(("python-httpretty" ,python-httpretty)
2022 ("python-pytest" ,python-pytest)))
2023 (home-page "https://hangups.readthedocs.io/")
2024 (synopsis "Instant messaging client for Google Hangouts")
2025 (description
2026 "Hangups is an instant messaging client for Google Hangouts. It includes
2027 both a Python library and a reference client with a text-based user interface.
2028
2029 Hangups is implements a reverse-engineered version of Hangouts' proprietary,
2030 non-interoperable protocol, which allows it to support features like group
2031 messaging that aren’t available to clients that connect over XMPP.")
2032 (license license:expat)))
2033
2034 (define-public telegram-purple
2035 (package
2036 (name "telegram-purple")
2037 (version "1.4.2")
2038 (home-page "https://github.com/majn/telegram-purple")
2039 (source (origin
2040 (method git-fetch)
2041 (uri (git-reference
2042 (url home-page)
2043 (commit (string-append "v" version))
2044 (recursive? #t)))
2045 (sha256
2046 (base32
2047 "0imbzhhq9qbj6gvkckrnjhls2vvmmy8db7l6gsd7lng2pbfcn522"))
2048 (modules '((guix build utils)))
2049 (snippet
2050 '(begin
2051 (substitute* "Makefile.in"
2052 ;; By default these two directories point to Pidgin's own
2053 ;; prefix.
2054 (("^PLUGIN_DIR_PURPLE=.*")
2055 (string-append
2056 "exec_prefix := @exec_prefix@\n"
2057 "PLUGIN_DIR_PURPLE := @libdir@/purple-2\n"))
2058 (("^DATA_ROOT_DIR_PURPLE=.*")
2059 "DATA_ROOT_DIR_PURPLE := @datarootdir@\n")
2060
2061 ;; Honor sysconfdir instead of trying to write to /etc.
2062 (("DESTDIR\\)/etc/telegram-purple")
2063 "DESTDIR)@sysconfdir@/telegram-purple"))
2064 #t))
2065 (patches (search-patches "telegram-purple-adjust-test.patch"))
2066 (file-name (git-file-name name version))))
2067 (build-system gnu-build-system)
2068 (native-inputs
2069 `(("pkg-config" ,pkg-config)
2070 ("gettext" ,gettext-minimal)
2071 ("which" ,which)))
2072 (inputs
2073 `(("pidgin" ,pidgin)
2074 ("libgcrypt" ,libgcrypt)
2075 ("libwebp" ,libwebp)
2076 ("glib" ,glib)
2077 ("gtk+" ,gtk+-2)
2078 ("zlib" ,zlib)))
2079 (arguments
2080 `(#:phases
2081 (modify-phases %standard-phases
2082 ;; We're using release tag for repository checkout - let's prepare
2083 ;; header defining GIT_COMMIT manually instead of running git to
2084 ;; identify version which is being compiled. Git repository
2085 ;; is removed anyway and only source code is kept.
2086 (add-after 'unpack 'prepare-commit.h
2087 (lambda _
2088 (with-output-to-file "./commit.h"
2089 (lambda ()
2090 (display
2091 (string-append "//generated by guix, use version instead of "
2092 "commit\n"
2093 "#ifndef GIT_COMMIT\n"
2094 "# define GIT_COMMIT \"v"
2095 ,version "\"\n"
2096 "#endif\n"))))
2097 #t))
2098 (add-before 'configure 'set-SHELL-variables
2099 ;; Set these environment variables so that 'tgl/configure' uses the
2100 ;; right shell and not /bin/sh.
2101 (lambda _
2102 (let ((bash (which "bash")))
2103 (setenv "SHELL" bash)
2104 (setenv "CONFIG_SHELL" bash)
2105 #t))))))
2106 (synopsis "Telegram messaging support for Pidgin")
2107 (description
2108 "Telegram-purple is a plugin for Libpurple, the communication library
2109 used by the Pidgin instant messaging client, that adds support for the
2110 Telegram messenger.")
2111
2112 ;; Code under tgl/ (the Telegram library) is LGPLv2.1+, but the plugin
2113 ;; itself is GPLv2+.
2114 (license license:gpl2+)))
2115
2116 (define-public tdlib
2117 (let ((commit "278c7acdec83c5ac17d8e1ed0bb2cacbcea62460")
2118 (revision "0")
2119 (version "1.6.0"))
2120 (package
2121 (name "tdlib")
2122 (version (git-version version revision commit))
2123 (source (origin
2124 (method git-fetch)
2125 (uri (git-reference
2126 (url "https://github.com/tdlib/td.git")
2127 (commit commit)))
2128 (sha256
2129 (base32
2130 "0zlzpl6fgszg18kwycyyyrnkm255dvc6fkq0b0y32m5wvwwl36cv"))
2131 (file-name (git-file-name name version))))
2132 (build-system cmake-build-system)
2133 (arguments
2134 `(#:tests? #t
2135 #:configure-flags
2136 (list "-DCMAKE_BUILD_TYPE=Release"
2137 "-DTD_ENABLE_LTO=OFF") ; FIXME: Get LTO to work.
2138 #:phases
2139 (modify-phases %standard-phases
2140 (add-after 'unpack 'remove-failing-tests
2141 (lambda _
2142 (substitute* "test/CMakeLists.txt"
2143 ;; The test cases are compiled into a distinct binary
2144 ;; which uses mtproto.cpp to attempt to connect to
2145 ;; a remote server. Removing this file from the sources
2146 ;; list disables those specific test cases.
2147 (("\\$\\{CMAKE_CURRENT_SOURCE_DIR\\}/mtproto.cpp") ""))
2148 #t)))))
2149 (native-inputs
2150 `(("gperf" ,gperf)
2151 ("openssl" ,openssl)
2152 ("zlib" ,zlib)
2153 ("php" ,php)
2154 ("doxygen" ,doxygen)))
2155 (synopsis "Cross-platform library for building Telegram clients")
2156 (description "Tdlib is a cross-platform library for creating custom
2157 Telegram clients following the official Telegram API. It can be easily used
2158 from almost any programming language with a C-FFI and features first-class
2159 support for high performance Telegram Bot creation.")
2160 (home-page "https://core.telegram.org/tdlib")
2161 (license license:boost1.0))))
2162
2163 ;;; messaging.scm ends here