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