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