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 Ricardo Wurmus <rekado@elephly.net>
7 ;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il>
8 ;;; Copyright © 2016, 2017 <contact.ng0@cryptolab.net>
9 ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
10 ;;; Copyright © 2016, 2017 Clément Lassieur <clement@lassieur.org>
11 ;;; Copyright © 2017 Mekeor Melire <mekeor.melire@gmail.com>
12 ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
13 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
14 ;;; Copyright © 2017 Theodoros Foradis <theodoros.for@openmailbox.org>
16 ;;; This file is part of GNU Guix.
18 ;;; GNU Guix is free software; you can redistribute it and/or modify it
19 ;;; under the terms of the GNU General Public License as published by
20 ;;; the Free Software Foundation; either version 3 of the License, or (at
21 ;;; your option) any later version.
23 ;;; GNU Guix is distributed in the hope that it will be useful, but
24 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
25 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 ;;; GNU General Public License for more details.
28 ;;; You should have received a copy of the GNU General Public License
29 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
31 (define-module (gnu packages messaging)
32 #:use-module ((guix licenses) #:prefix license:)
33 #:use-module (guix utils)
34 #:use-module (guix packages)
35 #:use-module (guix download)
36 #:use-module (guix git-download)
37 #:use-module (guix build-system gnu)
38 #:use-module (guix build-system glib-or-gtk)
39 #:use-module (guix build-system python)
40 #:use-module (guix build-system perl)
41 #:use-module (guix build-system cmake)
42 #:use-module (gnu packages)
43 #:use-module (gnu packages aidc)
44 #:use-module (gnu packages aspell)
45 #:use-module (gnu packages autotools)
46 #:use-module (gnu packages avahi)
47 #:use-module (gnu packages base)
48 #:use-module (gnu packages check)
49 #:use-module (gnu packages crypto)
50 #:use-module (gnu packages curl)
51 #:use-module (gnu packages cyrus-sasl)
52 #:use-module (gnu packages databases)
53 #:use-module (gnu packages documentation)
54 #:use-module (gnu packages enchant)
55 #:use-module (gnu packages gettext)
56 #:use-module (gnu packages gnome)
57 #:use-module (gnu packages gtk)
58 #:use-module (gnu packages image)
59 #:use-module (gnu packages xorg)
60 #:use-module (gnu packages xdisorg)
61 #:use-module (gnu packages libcanberra)
62 #:use-module (gnu packages man)
63 #:use-module (gnu packages networking)
64 #:use-module (gnu packages libidn)
65 #:use-module (gnu packages lua)
66 #:use-module (gnu packages xml)
67 #:use-module (gnu packages gnupg)
68 #:use-module (gnu packages ncurses)
69 #:use-module (gnu packages pkg-config)
70 #:use-module (gnu packages glib)
71 #:use-module (gnu packages python)
72 #:use-module (gnu packages pcre)
73 #:use-module (gnu packages perl)
74 #:use-module (gnu packages tcl)
75 #:use-module (gnu packages compression)
76 #:use-module (gnu packages check)
77 #:use-module (gnu packages admin)
78 #:use-module (gnu packages linux)
79 #:use-module (gnu packages textutils)
80 #:use-module (gnu packages tls)
81 #:use-module (gnu packages icu4c)
82 #:use-module (gnu packages qt)
83 #:use-module (gnu packages video)
84 #:use-module (gnu packages web)
85 #:use-module (gnu packages xiph)
86 #:use-module (gnu packages audio)
87 #:use-module (gnu packages bison)
88 #:use-module (gnu packages fontutils)
89 #:use-module (gnu packages bash)
90 #:use-module (gnu packages guile)
91 #:use-module (gnu packages less)
92 #:use-module (gnu packages readline)
93 #:use-module (gnu packages texinfo))
101 (uri (string-append "https://otr.cypherpunks.ca/libotr-"
105 "1x8rliydhbibmzwdbyr7pd7n87m2jmxnqkpvaalnf4154hj1hfwb"))
106 (patches (search-patches "libotr-test-auth-fix.patch"))))
107 (build-system gnu-build-system)
109 `(("libgcrypt" ,libgcrypt))) ; libotr headers include gcrypt.h
110 (inputs `(("libgpg-error" ,libgpg-error)))
111 (native-inputs `(("perl" ,perl))) ; for the test suite
112 (synopsis "Off-the-Record (OTR) Messaging Library and Toolkit")
114 "OTR allows you to have private conversations over instant messaging by
115 providing: (1) Encryption: No one else can read your instant messages. (2)
116 Authentication: You are assured the correspondent is who you think it is. (3)
117 Deniability: The messages you send do not have digital signatures that are
118 checkable by a third party. Anyone can forge messages after a conversation to
119 make them look like they came from you. However, during a conversation, your
120 correspondent is assured the messages he sees are authentic and
121 unmodified. (4) Perfect forward secrecy: If you lose control of your private
122 keys, no previous conversation is compromised.")
123 (home-page "https://otr.cypherpunks.ca/")
124 (license (list license:lgpl2.1 license:gpl2))))
126 (define-public bitlbee
132 (uri (string-append "https://get.bitlbee.org/src/bitlbee-"
135 (base32 "0sgsn0fv41rga46mih3fyv65cvfa6rvki8x92dn7bczbi7yxfdln"))))
136 (build-system gnu-build-system)
137 (native-inputs `(("pkg-config" ,pkg-config)
139 (inputs `(("glib" ,glib)
145 `(#:phases (alist-cons-after
146 'install 'install-etc
147 (lambda* (#:key (make-flags '()) #:allow-other-keys)
148 (zero? (apply system* "make" "install-etc" make-flags)))
151 ;; bitlbee's configure script does not tolerate many of the
152 ;; variable settings that Guix would pass to it.
153 (lambda* (#:key outputs #:allow-other-keys)
154 (zero? (system* "./configure"
155 (string-append "--prefix="
156 (assoc-ref outputs "out"))
159 (synopsis "IRC to instant messaging gateway")
160 (description "BitlBee brings IM (instant messaging) to IRC clients, for
161 people who have an IRC client running all the time and don't want to run an
162 additional IM client. BitlBee currently supports XMPP/Jabber (including
163 Google Talk), MSN Messenger, Yahoo! Messenger, AIM and ICQ, and the Twitter
164 microblogging network (plus all other Twitter API compatible services like
165 identi.ca and status.net).")
166 (home-page "http://www.bitlbee.org/")
167 (license (list license:gpl2+ license:bsd-2))))
169 (define-public hexchat
175 (uri (string-append "https://dl.hexchat.net/hexchat/hexchat-"
179 "0ficrx56knz5y297qb0x5y02339yvyv734z7kpcx1ixvb0qr2dgs"))
180 (modules '((guix build utils)))
183 ;; Delete dangling symlinks to a non-existent ‘/usr’.
184 (with-directory-excursion "m4"
185 (for-each (lambda (f) (delete-file f))
186 '("intltool.m4" "libtool.m4" "lt~obsolete.m4"
187 "ltoptions.m4" "ltsugar.m4" "ltversion.m4")))
188 (delete-file-recursively "build-aux")
189 (delete-file "po/Makefile.in.in")))))
190 (build-system gnu-build-system)
191 (native-inputs `(("autoconf" ,autoconf)
192 ("autoconf-archive" ,autoconf-archive)
193 ("automake" ,automake)
194 ("intltool" ,intltool)
196 ("pkg-config" ,pkg-config)))
197 (inputs `(("dbus-glib" ,dbus-glib)
200 ("glib:bin" ,glib "bin") ;need glib-genmarshal
202 ("libcanberra" ,libcanberra)
203 ("libnotify" ,libnotify)
206 ;; Bindings for add-on scripts.
208 ("perl-xml-parser" ,perl-xml-parser)
209 ("python-2" ,python-2)))
212 (modify-phases %standard-phases
213 ;; Release 2.12.4 wasn't properly bootstrapped. Later ones might be!
214 (add-after 'unpack 'bootstrap
215 (lambda* (#:key inputs #:allow-other-keys)
216 ;; This file is still required for autoreconf.
217 (copy-file (string-append (assoc-ref inputs "intltool")
218 "/share/intltool/Makefile.in.in")
220 (zero? (system* "autoreconf" "-fiv")))))))
221 (synopsis "Graphical IRC Client")
223 "HexChat lets you connect to multiple IRC networks at once. The main
224 window shows the list of currently connected networks and their channels, the
225 current conversation and the list of users. It uses colors to differentiate
226 between users and to highlight messages. It checks spelling using available
227 dictionaries. HexChat can be extended with multiple addons.")
228 (home-page "http://hexchat.net/")
229 (license license:gpl2+)))
231 (define-public ngircd
237 (uri (string-append "https://arthur.barton.de/pub/ngircd/ngircd-"
241 "020h9d1awyxqr0l42x1fhs47q7cmm17fdxzjish8p2kq23ma0gqp"))
242 (patches (search-patches "ngircd-handle-zombies.patch"))))
243 (build-system gnu-build-system)
244 ;; Needed for the test suite.
245 (native-inputs `(("procps" ,procps)
247 ("inetutils" ,inetutils)))
249 (inputs `(("zlib" ,zlib)
250 ("libwrap" ,tcp-wrappers)
252 ,@(if (string-suffix? "-linux"
253 (or (%current-target-system)
255 `(("linux-pam" ,linux-pam))
259 '("--with-gnutls" "--with-iconv" "--enable-ipv6" "--with-tcp-wrappers"
260 ,@(if (string-suffix? "-linux"
261 (or (%current-target-system)
266 (modify-phases %standard-phases
267 ;; Necessary for the test suite.
268 (add-after 'configure 'post-configure
270 (substitute* "src/ngircd/Makefile"
271 (("/bin/sh") (which "sh")))
272 ;; The default getpid.sh does a sloppy grep over 'ps -ax' output,
273 ;; which fails arbitrarily.
274 (with-output-to-file "src/testsuite/getpid.sh"
278 "#!" (which "sh") "\n"
279 "ps -C \"$1\" -o pid=\n"))))
280 ;; Our variant of getpid.sh does not match interpreter names
281 ;; when the script's shebang is invoked directly as "./foo".
282 ;; Patch cases where the test suite relies on this.
283 (substitute* "src/testsuite/start-server.sh"
284 ;; It runs 'getpid.sh sh' to test if it works at all. Run it on
286 (("getpid.sh sh") "getpid.sh make")))))))
287 (home-page "https://ngircd.barton.de/")
288 (synopsis "Lightweight Internet Relay Chat server for small networks")
290 "ngIRCd is a lightweight @dfn{Internet Relay Chat} (IRC) server for small
291 or private networks. It is easy to configure, can cope with dynamic IP
292 addresses, and supports IPv6, SSL-protected connections, as well as PAM for
294 (license license:gpl2+)))
296 (define-public pidgin
303 (uri (string-append "mirror://sourceforge/pidgin/Pidgin/"
304 version "/" name "-" version ".tar.bz2"))
307 "1y5p2mq3bfw35b66jsafmbva0w5gg1k99y9z8fyp3jfksqv3agcc"))
308 (patches (search-patches "pidgin-add-search-path.patch"))))
309 (build-system glib-or-gtk-build-system)
311 `(("pkg-config" ,pkg-config)
313 ("intltool" ,intltool)
316 ("doxygen" ,doxygen)))
319 ("libgcrypt" ,libgcrypt)
321 ("cyrus-sasl" ,cyrus-sasl)
323 ("dbus-glib" ,dbus-glib)
324 ("python2-dbus" ,python2-dbus)
328 ;; TODO: gstreamer: patches needed to support gstreamer-1.0 or later
331 ;; TODO: network-manager
341 ("libxscrnsaver" ,libxscrnsaver)
342 ("startup-notification" ,startup-notification)))
345 (list "--disable-gtkspell"
347 "--disable-meanwhile"
348 "--disable-nm" ; XXX remove when we have network-manager
349 "--disable-vv" ; XXX remove when we have farstream and gstreamer
350 "--disable-gstreamer" ; XXX patches needed to support gstreamer-1.0
351 "--enable-cyrus-sasl"
352 (string-append "--with-ncurses-headers="
353 (assoc-ref %build-inputs "ncurses")
356 (list (search-path-specification
357 (variable "PURPLE_PLUGIN_PATH")
358 (files (list (string-append "lib/purple-"
359 (version-prefix version 1))
361 (home-page "http://www.pidgin.im/")
362 (synopsis "Graphical multi-protocol instant messaging client")
364 "Pidgin is a modular instant messaging client that supports many popular
368 license:gpl2+ ; Most of the code
369 license:lgpl2.1 ; GG protocol plugin (libpurple/protocols/gg/lib)
370 license:lgpl2.0+ ; OSCAR protocol plugin (libpurple/protocols/oscar)
371 ;; The following licenses cover the zephyr protocol plugin:
372 (license:non-copyleft
373 "file://libpurple/protocols/zephyr/mit-copyright.h"
374 "See libpurple/protocols/zephyr/mit-copyright.h in the distribution.")
375 (license:non-copyleft
376 "file://libpurple/protocols/zephyr/mit-sipb-copyright.h"
377 "See libpurple/protocols/zephyr/mit-sipb-copyright.h in the distribution.")))))
379 (define-public pidgin-otr
385 (uri (string-append "https://otr.cypherpunks.ca/"
386 name "-" version ".tar.gz"))
389 "1i5s9rrgbyss9rszq6c6y53hwqyw1k86s40cpsfx5ccl9bprxdgl"))))
390 (build-system gnu-build-system)
392 `(("pkg-config" ,pkg-config)
393 ("intltool" ,intltool)))
397 ("libgpg-error" ,libgpg-error)
398 ("libgcrypt" ,libgcrypt)
401 (home-page "https://otr.cypherpunks.ca/")
402 (synopsis "Off-the-Record Messaging plugin for Pidgin")
404 "Pidgin-OTR is a plugin that adds support for OTR to the Pidgin instant
405 messaging client. OTR (Off-the-Record) Messaging allows you to have private
406 conversations over instant messaging by providing: (1) Encryption: No one else
407 can read your instant messages. (2) Authentication: You are assured the
408 correspondent is who you think it is. (3) Deniability: The messages you send
409 do not have digital signatures that are checkable by a third party. Anyone
410 can forge messages after a conversation to make them look like they came from
411 you. However, during a conversation, your correspondent is assured the
412 messages he sees are authentic and unmodified. (4) Perfect forward secrecy:
413 If you lose control of your private keys, no previous conversation is
415 (license license:gpl2)))
423 (uri (string-append "http://znc.in/releases/archive/znc-"
427 "1jia6kq6bp8yxfj02d5vj9vqb4pylqcldspyjj6iz82kkka2a0ig"))))
428 (build-system gnu-build-system)
431 (modify-phases %standard-phases
432 (add-after 'unpack 'unpack-googletest
433 (lambda* (#:key inputs #:allow-other-keys)
434 (zero? (system* "tar" "xf"
435 (assoc-ref inputs "googletest-source"))))))
436 #:configure-flags '("--enable-python"
439 ,(string-append "--with-gtest="
440 "googletest-release-"
441 (package-version googletest)
443 #:test-target "test"))
445 `(("googletest-source" ,(package-source googletest))
446 ("pkg-config" ,pkg-config)
450 `(("openssl" ,openssl)
453 ("cyrus-sasl" ,cyrus-sasl)))
454 (home-page "http://znc.in")
455 (synopsis "IRC network bouncer")
456 (description "ZNC is an IRC network bouncer or BNC. It can detach the
457 client from the actual IRC server, and also from selected channels. Multiple
458 clients from different locations can connect to a single ZNC account
459 simultaneously and therefore appear under the same nickname on IRC.")
460 (license license:asl2.0)))
462 (define-public python-nbxmpp
464 (name "python-nbxmpp")
469 (uri (pypi-uri "nbxmpp" version))
472 "1gnzrzrdl4nii1sc5x8p5iw2ya5sl70j3nn34abqsny51p2pzmv6"))))
473 (build-system python-build-system)
475 `(#:tests? #f)) ; no tests
476 (home-page "https://dev.gajim.org/gajim/python-nbxmpp")
477 (synopsis "Non-blocking Jabber/XMPP module")
479 "The goal of this python library is to provide a way for Python
480 applications to use Jabber/XMPP networks in a non-blocking way. This library
481 was initially a fork of xmpppy, but uses non-blocking sockets.")
482 (license license:gpl3+)))
484 (define-public python2-nbxmpp
485 (package-with-python2 python-nbxmpp))
493 (uri (string-append "https://gajim.org/downloads/"
494 (version-major+minor version)
495 "/gajim-" version ".tar.bz2"))
498 "0ckakdjg30fsyjsgyy2573x9nmjivdg76y049l86wns5axw8im26"))))
499 (build-system gnu-build-system)
502 (modify-phases %standard-phases
503 (add-after 'install 'wrap-program
504 (lambda* (#:key outputs #:allow-other-keys)
505 ;; Make sure all Python scripts run with the correct PYTHONPATH.
506 (let ((out (assoc-ref outputs "out"))
507 (path (getenv "PYTHONPATH")))
508 (for-each (lambda (name)
509 (let ((file (string-append out "/bin/" name)))
510 ;; Wrapping destroys identification of intended
511 ;; application, so we need to override "APP".
513 (("APP=`basename \\$0`")
514 (string-append "APP=" name)))
516 `("PYTHONPATH" ":" prefix (,path)))))
517 '("gajim" "gajim-remote" "gajim-history-manager")))
520 `(("intltool" ,intltool)))
522 `(("python2-nbxmpp" ,python2-nbxmpp)
523 ("python2-pyopenssl" ,python2-pyopenssl)
524 ("python2-gnupg" ,python2-gnupg)
525 ("python2-pygtk" ,python2-pygtk)
526 ("python" ,python-2)))
527 (home-page "https://gajim.org/")
528 (synopsis "Jabber (XMPP) client")
529 (description "Gajim is a feature-rich and easy to use Jabber/XMPP client.
530 Among its features are: a tabbed chat window and single window modes; support
531 for group chat (with Multi-User Chat protocol), invitation, chat to group chat
532 transformation; audio and video conferences; file transfer; TLS, GPG and
533 end-to-end encryption support; XML console.")
534 (license license:gpl3)))
536 (define-public prosody
542 (uri (string-append "https://prosody.im/downloads/source/"
543 "prosody-" version ".tar.gz"))
546 "139yxqpinajl32ryrybvilh54ddb1q6s0ajjhlcs4a0rnwia6n8s"))))
547 (build-system gnu-build-system)
549 `(#:tests? #f ; no "check" target
550 #:configure-flags (list "--no-example-certs")
551 #:modules ((ice-9 match)
553 (guix build gnu-build-system)
556 (modify-phases %standard-phases
557 (add-after 'unpack 'fix-configure-script
559 ;; The configure script aborts when it encounters unexpected
560 ;; arguments. Make it more tolerant.
561 (substitute* "configure"
564 (add-after 'unpack 'fix-makefile
566 (substitute* "Makefile"
567 ;; prosodyctl needs to read the configuration file.
568 (("^INSTALLEDCONFIG =.*") "INSTALLEDCONFIG = /etc/prosody\n")
569 ;; prosodyctl needs a place to put auto-generated certificates.
570 (("^INSTALLEDDATA =.*") "INSTALLEDDATA = /var/lib/prosody\n"))
572 (add-after 'install 'wrap-programs
573 (lambda* (#:key inputs outputs #:allow-other-keys)
574 ;; Make sure all executables in "bin" find the required Lua
575 ;; modules at runtime.
576 (let* ((out (assoc-ref outputs "out"))
577 (bin (string-append out "/bin/"))
578 (deps (delete #f (map (match-lambda
580 (if (string-prefix? "lua" label)
583 (lua-path (string-join
586 path "/share/lua/5.1/?.lua;"
587 path "/share/lua/5.1/?/?.lua"))
590 (lua-cpath (string-join
593 path "/lib/lua/5.1/?.so;"
594 path "/lib/lua/5.1/?/?.so"))
597 (openssl (assoc-ref inputs "openssl"))
598 (coreutils (assoc-ref inputs "coreutils"))
599 (path (map (lambda (dir)
600 (string-append dir "/bin"))
601 (list openssl coreutils))))
602 (for-each (lambda (file)
604 `("LUA_PATH" ";" = (,lua-path))
605 `("LUA_CPATH" ";" = (,lua-cpath))
606 `("PATH" ":" prefix ,path)))
607 (find-files bin ".*"))
613 ("lua5.1-expat" ,lua5.1-expat)
614 ("lua5.1-socket" ,lua5.1-socket)
615 ("lua5.1-filesystem" ,lua5.1-filesystem)
616 ("lua5.1-sec" ,lua5.1-sec)))
617 (home-page "https://prosody.im/")
618 (synopsis "Jabber (XMPP) server")
619 (description "Prosody is a modern XMPP communication server. It aims to
620 be easy to set up and configure, and efficient with system resources.
621 Additionally, for developers it aims to be easy to extend and give a flexible
622 system on which to rapidly develop added functionality, or prototype new
624 (license license:x11)))
626 (define-public libtoxcore
628 (commit "755f084e8720b349026c85afbad58954cb7ff1d4"))
631 (version (string-append "0.0.0" "-"
632 revision "."(string-take commit 7)))
636 (url "https://github.com/irungentoo/toxcore.git")
638 (file-name (string-append name "-" version "-checkout"))
641 "0ap1gvlyihnfivv235dbrgsxsiiz70bhlmlr5gn1027w3h5kqz8w"))))
642 (build-system gnu-build-system)
644 `(("autoconf" ,autoconf)
645 ("automake" ,automake)
647 ;; TODO: Add when test suite is capable of passing.
649 ("pkg-config" ,pkg-config)))
651 `(("libsodium" ,libsodium)
656 (modify-phases %standard-phases
657 (add-after 'unpack 'autoconf
659 (zero? (system* "autoreconf" "-vfi")))))
660 #:tests? #f)) ; FIXME: Testsuite fails, reasons unspecific.
661 (synopsis "Library for the Tox encrypted messenger protocol")
663 "C library implementation of the Tox encrypted messenger protocol.")
664 (license license:gpl3+)
665 (home-page "https://tox.chat"))))
667 ;; Some tox clients move to c-toxcore, which seems to be where all the
668 ;; recent development happens. It is run by the same developers as toxcore,
669 ;; forked into a group namespace.
670 (define-public c-toxcore
677 (uri (string-append "https://github.com/TokTok/c-toxcore/archive/v"
679 (file-name (string-append name "-" version ".tar.gz"))
682 "1y30xc1dzq9knww274d4y0m8gridcf5j851rxdri8j2s64p3qqgk"))))
683 (build-system cmake-build-system)
685 `(("pkg-config" ,pkg-config)))
687 `(("libsodium" ,libsodium)
690 (home-page "https://tox.chat")
691 (synopsis "Library for the Tox encrypted messenger protocol")
693 "Official fork of the C library implementation of the Tox encrypted
694 messenger protocol.")
695 (license license:gpl3+)))
704 (uri (string-append "https://github.com/uTox/uTox/archive/v"
706 (file-name (string-append name "-" version ".tar.gz"))
709 "15s4iwjk1s0kihjqn0f07c9618clbphpr827mds3xddkiwnjz37v"))))
710 (build-system cmake-build-system)
712 '(#:tests? #f ; No test phase.
714 (modify-phases %standard-phases
715 (add-after 'unpack 'fix-freetype-include
717 (substitute* "CMakeLists.txt"
718 (("/usr/include/freetype2")
719 (string-append (assoc-ref %build-inputs "freetype")
720 "/include/freetype2")))))
721 (add-before 'install 'patch-cmake-find-utox
723 (substitute* "../build/cmake_install.cmake"
724 (("/uTox-0.11.0/utox")
727 ;; TODO: Fix the file chooser dialog; which input does it need?
729 ("filteraudio" ,filteraudio)
730 ("fontconfig" ,fontconfig)
731 ("freetype" ,freetype)
732 ("libsodium" ,libsodium)
733 ("c-toxcore" ,c-toxcore)
737 ("libxrender" ,libxrender)
739 ("v4l-utils" ,v4l-utils)))
740 (synopsis "Lightweight Tox client")
742 "Utox is a lightweight Tox client. Tox is a distributed and secure
743 instant messenger with audio and video chat capabilities.")
744 (home-page "http://utox.org/")
745 (license license:gpl3)))
753 (uri (string-append "https://github.com/qTox/qTox/archive/v"
757 "1m1ca1ybgj4yfm6a61yyj21f5jpip8dsbliwkfypswhmv5y52f5y"))
758 (file-name (string-append name "-" version ".tar.gz"))))
759 (build-system cmake-build-system)
762 (modify-phases %standard-phases
763 (add-after 'unpack 'fix-reproducibility-issues
765 (substitute* "src/main.cpp"
766 (("__DATE__") "\"\"")
767 (("__TIME__") "\"\"")
768 (("TIMESTAMP") "\"\""))
774 ("libsodium" ,libsodium)
775 ("c-toxcore" ,c-toxcore)
777 ("libxscrnsaver" ,libxscrnsaver)
780 ("qrencode" ,qrencode)
783 ("sqlcipher" ,sqlcipher)))
785 `(("pkg-config" ,pkg-config)
787 (home-page "https://qtox.github.io/")
788 (synopsis "Tox chat client using Qt")
789 (description "qTox is a Tox client that follows the Tox design
790 guidelines. It provides an easy to use application that allows you to
791 connect with friends and family without anyone else listening in.")
792 (license license:gpl3+)))
794 (define-public pybitmessage
796 (name "pybitmessage")
801 (uri (string-append "https://github.com/Bitmessage/"
802 "PyBitmessage/archive/v" version ".tar.gz"))
803 (file-name (string-append name "-" version ".tar.gz"))
806 "1ffj7raxpp277kphj98190fxrwfx16vmbspk7k3azg3bh5f5idnf"))))
808 `(("python" ,python-2)
809 ("python:tk" ,python-2 "tk")
813 ("python2-pyqt-4" ,python2-pyqt-4)
814 ("python2-sip" ,python2-sip)
815 ("python2-pysqlite" ,python2-pysqlite)
816 ("python2-pyopenssl" ,python2-pyopenssl)))
818 `(("pkg-config" ,pkg-config)))
819 (build-system gnu-build-system)
821 `(#:imported-modules ((guix build python-build-system)
822 ,@%gnu-build-system-modules)
823 #:make-flags (list (string-append "PREFIX="
824 (assoc-ref %outputs "out")))
825 #:tests? #f ; no test target
827 (modify-phases %standard-phases
828 (add-before 'build 'fix-makefile
829 (lambda* (#:key inputs #:allow-other-keys)
830 (substitute* "Makefile"
831 (("mkdir -p \\$\\{DESTDIR\\}/usr") "")
834 (("#!/bin/sh") (string-append "#!" (which "sh")))
835 (("python2") (which "python"))
836 (("/opt/openssl-compat-bitcoin/lib/")
837 (string-append (assoc-ref inputs "openssl") "/lib/")))
839 (add-after 'unpack 'fix-unmatched-python-shebangs
840 (lambda* (#:key inputs #:allow-other-keys)
841 (substitute* "src/bitmessagemain.py"
842 (("#!/usr/bin/env python2.7")
843 (string-append "#!" (which "python"))))
844 (substitute* "src/bitmessagecli.py"
845 (("#!/usr/bin/env python2.7.x")
846 (string-append "#!" (which "python"))))
848 (add-after 'unpack 'fix-depends
849 (lambda* (#:key inputs #:allow-other-keys)
850 (substitute* "src/depends.py"
852 (string-append (assoc-ref inputs "openssl")
853 "/lib/libcrypto.so")))
855 (add-after 'unpack 'fix-local-files-in-paths
856 (lambda* (#:key outputs #:allow-other-keys)
857 (substitute* "src/proofofwork.py"
859 (string-append (assoc-ref outputs "out")
860 "/lib/bitmsghash.so")))
862 (add-after 'unpack 'fix-pyelliptic
863 (lambda* (#:key inputs #:allow-other-keys)
864 (substitute* "src/pyelliptic/openssl.py"
866 (string-append (assoc-ref inputs "openssl")
867 "/lib/libcrypto.so"))
869 (string-append (assoc-ref inputs "openssl")
872 ;; XXX: Make does not build and install bitmsghash, do it
873 ;; and place it in /lib.
874 (add-before 'build 'build-and-install-bitmsghash
875 (lambda* (#:key outputs #:allow-other-keys)
876 (chdir "src/bitmsghash")
879 (install-file "src/bitmsghash/bitmsghash.so"
880 (string-append (assoc-ref outputs "out") "/lib"))
882 (add-after 'install 'wrap
883 (@@ (guix build python-build-system) wrap)))))
884 (license license:expat)
886 "Distributed and trustless peer-to-peer communications protocol
887 for sending encrypted messages to one person or many subscribers.")
888 (synopsis "Distributed peer-to-peer communication")
889 (home-page "https://bitmessage.org/")))
898 (uri (string-append "ftp://ftp.ourproject.org/pub/ytalk/ytalk-"
902 "1d3jhnj8rgzxyxjwfa22vh45qwzjvxw1qh8fz6b7nfkj3zvk9jvf"))))
903 (build-system gnu-build-system)
905 `(("ncurses" ,ncurses)))
906 (home-page "http://ytalk.ourproject.org")
907 (synopsis "Multi-user chat program")
908 (description "Ytalk is a replacement for the BSD talk program. Its main
909 advantage is the ability to communicate with any arbitrary number of users at
910 once. It supports both talk protocols (\"talk\" and \"ntalk\") and can communicate
911 with several different talk daemons at the same time.")
912 (license license:gpl2+)))
921 (uri (string-append "https://camaya.net/download/gloox-"
925 "09c01jr5nrm7f1ly42wg0pqqscmp48pv8y2fjx1vwbavjxdq59ri"))))
926 (build-system gnu-build-system)
932 `(("pkg-config" ,pkg-config)))
933 (synopsis "Portable high-level Jabber/XMPP library for C++")
935 "gloox is a full-featured Jabber/XMPP client library,
936 written in ANSI C++. It makes writing spec-compliant clients easy
937 and allows for hassle-free integration of Jabber/XMPP functionality
938 into existing applications.")
939 (home-page "https://camaya.net/gloox")
940 (license license:gpl3)))
942 (define-public perl-net-psyc
944 (name "perl-net-psyc")
949 (uri (string-append "http://perlpsyc.psyc.eu/"
950 "perlpsyc-" version ".zip"))
951 (file-name (string-append name "-" version ".zip"))
954 "1lw6807qrbmvzbrjn1rna1dhir2k70xpcjvyjn45y35hav333a42"))
955 ;; psycmp3 currently depends on MP3::List and rxaudio (shareware),
956 ;; we can add it back when this is no longer the case.
957 (snippet '(delete-file "contrib/psycmp3"))))
958 (build-system perl-build-system)
960 `(("perl-curses" ,perl-curses)
961 ("perl-io-socket-ssl" ,perl-io-socket-ssl)))
964 (modify-phases %standard-phases
965 (delete 'configure) ; No configure script
966 ;; There is a Makefile, but it does not install everything
967 ;; (leaves out psycion) and says
968 ;; "# Just to give you a rough idea". XXX: Fix it upstream.
971 (zero? (system* "make" "manuals"))))
973 (lambda* (#:key outputs #:allow-other-keys)
974 (let* ((out (assoc-ref outputs "out"))
975 (doc (string-append out "/share/doc/perl-net-psyc"))
976 (man1 (string-append out "/share/man/man1"))
977 (man3 (string-append out "/share/man/man3"))
978 (bin (string-append out "/bin"))
979 (libpsyc (string-append out "/lib/psyc/ion"))
980 (libperl (string-append out "/lib/perl5/site_perl/"
981 ,(package-version perl))))
983 (copy-recursively "lib/perl5" libperl)
984 (copy-recursively "lib/psycion" libpsyc)
985 (copy-recursively "bin" bin)
986 (install-file "cgi/psycpager" (string-append doc "/cgi"))
987 (copy-recursively "contrib" (string-append doc "/contrib"))
988 (copy-recursively "hooks" (string-append doc "/hooks"))
989 (copy-recursively "sdj" (string-append doc "/sdj"))
990 (install-file "README.txt" doc)
991 (install-file "TODO.txt" doc)
992 (copy-recursively "share/man/man1" man1)
993 (copy-recursively "share/man/man3" man3)
995 (add-after 'install 'wrap-programs
996 (lambda* (#:key outputs #:allow-other-keys)
997 ;; Make sure all executables in "bin" find the Perl modules
998 ;; provided by this package at runtime.
999 (let* ((out (assoc-ref outputs "out"))
1000 (bin (string-append out "/bin/"))
1001 (path (getenv "PERL5LIB")))
1002 (for-each (lambda (file)
1004 `("PERL5LIB" ":" prefix (,path))))
1005 (find-files bin "\\.*$"))
1008 "@code{Net::PSYC} with support for TCP, UDP, Event.pm, @code{IO::Select} and
1009 Gtk2 event loops. This package includes 12 applications and additional scripts:
1010 psycion (a @uref{http://about.psyc.eu,PSYC} chat client), remotor (a control console
1011 for @uref{https://torproject.org,tor} router) and many more.")
1012 (synopsis "Perl implementation of PSYC protocol")
1013 (home-page "http://perlpsyc.psyc.eu/")
1014 (license (list license:gpl2
1015 license:perl-license
1016 ;; contrib/irssi-psyc.pl:
1017 license:public-domain
1018 ;; bin/psycplay states AGPL with no version:
1021 (define-public libpsyc
1024 (version "20160913")
1027 (uri (string-append "http://www.psyced.org/files/"
1028 name "-" version ".tar.xz"))
1031 "14q89fxap05ajkfn20rnhc6b1h4i3i2adyr7y6hs5zqwb2lcmc1p"))))
1032 (build-system gnu-build-system)
1036 ("procps" ,procps)))
1040 (string-append "PREFIX=" (assoc-ref %outputs "out")))
1042 (modify-phases %standard-phases
1043 ;; The rust bindings are the only ones in use, the lpc bindings
1044 ;; are in psyclpc. The other bindings are not used by anything,
1045 ;; the chances are high that the bindings do not even work,
1046 ;; therefore we do not include them.
1047 ;; TODO: Get a cargo build system in Guix.
1048 (delete 'configure)))) ; no configure script
1049 (home-page "http://about.psyc.eu/libpsyc")
1051 "@code{libpsyc} is a PSYC library in C which implements
1052 core aspects of PSYC, useful for all kinds of clients and servers
1054 (synopsis "PSYC library in C")
1055 (license license:agpl3+)))
1057 ;; This commit removes the historic bundled pcre and makes psyclpc reproducible.
1058 (define-public psyclpc
1059 (let* ((commit "61cf9aa81297085e5c40170fd01221c752f8deba")
1063 (version (string-append "20160821-" revision "." (string-take commit 7)))
1067 (url "git://git.psyced.org/git/psyclpc")
1069 (file-name (string-append name "-" version "-checkout"))
1072 "1viwqymbhn3cwvx0zl58rlzl5gw47zxn0ldg2nbi55ghm5zxl1z5"))))
1073 (build-system gnu-build-system)
1075 `(#:tests? #f ; There are no tests/checks.
1077 ;; If you have questions about this part, look at
1078 ;; "src/settings/psyced" and the ebuild.
1080 "--enable-use-tls=yes"
1081 "--enable-use-mccp" ; Mud Client Compression Protocol, leave this enabled.
1082 (string-append "--prefix="
1083 (assoc-ref %outputs "out"))
1084 ;; src/Makefile: Set MUD_LIB to the directory which contains
1085 ;; the mud data. defaults to MUD_LIB = @libdir@
1086 (string-append "--libdir="
1087 (assoc-ref %outputs "out")
1088 "/opt/psyced/world")
1089 (string-append "--bindir="
1090 (assoc-ref %outputs "out")
1092 ;; src/Makefile: Set ERQ_DIR to directory which contains the
1093 ;; stuff which ERQ can execute (hopefully) savely. Was formerly
1094 ;; defined in config.h. defaults to ERQ_DIR= @libexecdir@
1095 (string-append "--libexecdir="
1096 (assoc-ref %outputs "out")
1099 (modify-phases %standard-phases
1100 (add-before 'configure 'chdir-to-src
1101 ;; We need to pass this as env variables
1102 ;; and manually change the directory.
1105 (setenv "CONFIG_SHELL" (which "sh"))
1106 (setenv "SHELL" (which "sh"))
1108 #:make-flags (list "install-all")))
1111 ("openssl" ,openssl)
1114 `(("pkg-config" ,pkg-config)
1116 ("gettext" ,gettext-minimal)
1117 ("help2man" ,help2man)
1118 ("autoconf" ,autoconf)
1119 ("automake" ,automake)))
1120 (home-page "http://lpc.psyc.eu/")
1121 (synopsis "psycLPC is a multi-user network server programming language")
1123 "LPC is a bytecode language, invented to specifically implement
1124 multi user virtual environments on the internet. This technology is used for
1125 MUDs and also the psyced implementation of the Protocol for SYnchronous
1126 Conferencing (PSYC). psycLPC is a fork of LDMud with some new features and
1128 (license license:gpl2))))
1130 (define-public loudmouth
1137 (uri (string-append "https://mcabber.com/files/loudmouth/"
1138 name "-" version ".tar.bz2"))
1141 "0b6kd5gpndl9nzis3n6hcl0ldz74bnbiypqgqa1vgb0vrcar8cjl"))))
1142 (build-system gnu-build-system)
1146 ("libidn" ,libidn)))
1148 `(("pkg-config" ,pkg-config)
1150 ("glib" ,glib "bin") ; gtester
1151 ("gtk-doc" ,gtk-doc)))
1152 (home-page "https://mcabber.com/")
1154 "Loudmouth is a lightweight and easy-to-use C library for programming
1155 with the XMPP (formerly known as Jabber) protocol. It is designed to be
1156 easy to get started with and yet extensible to let you do anything the XMPP
1158 (synopsis "Asynchronous XMPP library")
1159 ;; The files have LGPL2.0+ headers, but COPYING specifies LGPL2.1.
1160 (license license:lgpl2.0+)))
1162 (define-public mcabber
1169 (uri (string-append "https://mcabber.com/files/"
1170 name "-" version ".tar.bz2"))
1173 "0ixdzk5b3s31a4bdfqgqrsiq7vbgdzhqr49p9pz9cq9bgn0h1wm0"))))
1174 (build-system gnu-build-system)
1176 '(#:configure-flags (list "--enable-otr"
1177 "--enable-aspell")))
1184 ("ncurses" ,ncurses)
1185 ("loudmouth" ,loudmouth)))
1187 `(("pkg-config" ,pkg-config)))
1188 (home-page "https://mcabber.com")
1190 "Mcabber is a small XMPP (Jabber) console client, which includes features
1191 such as SASL and TLS support, @dfn{Multi-User Chat} (MUC) support, logging,
1192 command-completion, OpenPGP encryption, @dfn{Off-the-Record Messaging} (OTR)
1193 support, and more.")
1194 (synopsis "Small XMPP console client")
1195 (license license:gpl2+)))
1197 (define-public freetalk
1203 (uri (string-append "mirror://gnu/freetalk/freetalk-"
1207 "1rmrn7a1bb7vm26yaklrvx008a9qhwc32s57dwrlf40lv9gffwny"))))
1208 (build-system gnu-build-system)
1211 (modify-phases %standard-phases
1212 (add-before 'configure 'autogen
1214 (zero? (system* "sh" "autogen.sh"))))
1215 ;; For 'system' commands in Scheme code.
1216 (add-after 'install 'wrap-program
1217 (lambda* (#:key inputs outputs #:allow-other-keys)
1218 (let* ((out (assoc-ref outputs "out"))
1219 (bash (assoc-ref inputs "bash"))
1220 (coreutils (assoc-ref inputs "coreutils"))
1221 (less (assoc-ref inputs "less")))
1222 (wrap-program (string-append out "/bin/freetalk")
1225 (string-append dir "/bin"))
1226 (list bash coreutils less))))
1229 `(("autoconf" ,autoconf)
1230 ("automake" ,automake)
1231 ("pkg-config" ,pkg-config)
1232 ("texinfo" ,texinfo)))
1236 ("guile" ,guile-2.0)
1238 ("loudmouth" ,loudmouth)
1239 ("readline" ,readline)))
1240 (synopsis "Extensible console-based Jabber client")
1242 "GNU Freetalk is a command-line Jabber/XMPP chat client. It notably uses
1243 the Readline library to handle input, so it features convenient navigation of
1244 text as well as tab-completion of buddy names, commands and English words. It
1245 is also scriptable and extensible via Guile.")
1246 (home-page "https://www.gnu.org/software/freetalk/")
1247 (license license:gpl3+)))
1249 (define-public libmesode
1255 (uri (string-append "https://github.com/boothj5/libmesode/archive/"
1257 (file-name (string-append name "-" version ".tar.gz"))
1260 "0iaj56fkd5bjvqpvq3324ni895rmbj1akbfqipjydnghfwaym4z6"))))
1261 (build-system gnu-build-system)
1264 (modify-phases %standard-phases
1265 (add-before 'configure 'bootstrap
1267 (zero? (system* "./bootstrap.sh")))))))
1270 ("openssl" ,openssl)))
1272 `(("autoconf" ,autoconf)
1273 ("automake" ,automake)
1274 ("libtool" ,libtool)
1275 ("pkg-config" ,pkg-config)))
1276 (synopsis "C library for writing XMPP clients")
1277 (description "Libmesode is a fork of libstrophe for use with Profanity
1278 XMPP Client. In particular, libmesode provides extra TLS functionality such as
1279 manual SSL certificate verification.")
1280 (home-page "https://github.com/boothj5/libmesode")
1282 (license (list license:gpl3+ license:x11))))
1284 (define-public libstrophe
1290 (uri (string-append "https://github.com/strophe/libstrophe/archive/"
1292 (file-name (string-append name "-" version ".tar.gz"))
1295 "1hzwdax4nsz0fncf5bjfza0cn0lc6xsf38y569ql1gg5hvwr6169"))))
1296 (build-system gnu-build-system)
1299 (modify-phases %standard-phases
1300 (add-before 'configure 'bootstrap
1302 (zero? (system* "./bootstrap.sh")))))))
1305 ("openssl" ,openssl)))
1307 `(("autoconf" ,autoconf)
1308 ("automake" ,automake)
1309 ("libtool" ,libtool)
1310 ("pkg-config" ,pkg-config)))
1311 (synopsis "C library for writing XMPP clients")
1312 (description "Libstrophe is a minimal XMPP library written in C. It has
1313 almost no external dependencies, only an XML parsing library (expat or libxml
1314 are both supported).")
1315 (home-page "http://strophe.im/libstrophe")
1317 (license (list license:gpl3+ license:x11))))
1319 (define-public profanity
1325 (uri (string-append "http://www.profanity.im/profanity-"
1329 "1f7ylw3mhhnii52mmk40hyc4kqhpvjdr3hmsplzkdhsfww9kflg3"))))
1330 (build-system gnu-build-system)
1336 ("libmesode" ,libmesode)
1338 ("ncurses" ,ncurses)
1339 ("openssl" ,openssl)
1340 ("readline" ,readline)))
1342 `(("autoconf" ,autoconf)
1343 ("autoconf-archive" ,autoconf-archive)
1344 ("automake" ,automake)
1346 ("libtool" ,libtool)
1347 ("pkg-config" ,pkg-config)))
1348 (synopsis "Console-based XMPP client")
1349 (description "Profanity is a console based XMPP client written in C
1350 using ncurses and libmesode, inspired by Irssi.")
1351 (home-page "http://www.profanity.im")
1352 (license license:gpl3+)))
1354 (define-public libircclient
1356 (name "libircclient")
1361 (uri (string-append "mirror://sourceforge/libircclient/libircclient/"
1362 version "/libircclient-" version ".tar.gz"))
1365 "0r60i76jh4drjh2jgp5sx71chagqllmkaq49zv67nrhqwvp9ghw1"))))
1366 (build-system gnu-build-system)
1368 `(("openssl" ,openssl)))
1371 (list (string-append "--libdir="
1372 (assoc-ref %outputs "out") "/lib")
1378 (home-page "https://www.ulduzsoft.com/libircclient/")
1379 (synopsis "Library implementing the client IRC protocol")
1380 (description "Libircclient is a library which implements the client IRC
1381 protocol. It is designed to be small, fast, portable and compatible with the
1382 RFC standards as well as non-standard but popular features. It can be used for
1383 building the IRC clients and bots.")
1384 (license license:lgpl3+)))
1386 (define-public toxic
1392 (uri (string-append "https://github.com/JFreegman/toxic/archive/v"
1396 "0166lqb47f4kj34mhi57aqmnk9mh4hsicmbdsj6ag54sy1zicy20"))
1397 (file-name (git-file-name name version))))
1398 (build-system gnu-build-system)
1400 `(#:tests? #f ; no tests
1404 (string-append "PREFIX="
1405 (assoc-ref %outputs "out")))
1407 (modify-phases %standard-phases
1409 (add-before 'build 'enable-python-scripting
1411 (setenv "ENABLE_PYTHON" "1")
1414 `(("c-toxcore" ,c-toxcore)
1416 ("freealut" ,freealut)
1417 ("gdk-pixbuf" ,gdk-pixbuf) ; for libnotify.pc
1418 ("libconfig" ,libconfig)
1419 ("libnotify" ,libnotify)
1423 ("ncurses" ,ncurses)
1426 ("qrencode" ,qrencode)))
1428 `(("pkg-config" ,pkg-config)))
1429 (home-page "https://github.com/JFreegman/toxic")
1430 (synopsis "Tox chat client using ncurses")
1431 (description "Toxic is a console-based instant messaging client, using
1432 c-toxcore and ncurses. It provides audio calls, sound and desktop
1433 notifications, and Python scripting support.")
1434 (license license:gpl3+)))
1436 ;;; messaging.scm ends here