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