projects/guix·blob javascript-team · refs

4232 lines · 159.5 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2014, 2015, 2016 Mark H Weaver <[email protected]>
3;;; Copyright © 2014, 2017 Julien Lepiller <[email protected]>
4;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <[email protected]>
5;;; Copyright © 2015, 2025 Andreas Enge <[email protected]>
6;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2021, 2022, 2024, 2025 Ricardo Wurmus <[email protected]>
7;;; Copyright © 2015, 2018-2021, 2023 Efraim Flashner <[email protected]>
8;;; Copyright © 2016, 2017 Nikita <[email protected]>
9;;; Copyright © 2016 Andy Patterson <[email protected]>
10;;; Copyright © 2016, 2017, 2018, 2019 Clément Lassieur <[email protected]>
11;;; Copyright © 2017 Mekeor Melire <[email protected]>
12;;; Copyright © 2017, 2018, 2020, 2021, 2022, 2023 Arun Isaac <[email protected]>
13;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <[email protected]>
14;;; Copyright © 2017 Theodoros Foradis <[email protected]>
15;;; Copyright © 2017, 2018, 2019 Rutger Helling <[email protected]>
16;;; Copyright © 2018 Leo Famulari <[email protected]>
17;;; Copyright © 2018 Pierre-Antoine Rouby <[email protected]>
18;;; Copyright © 2019 Tanguy Le Carrour <[email protected]>
19;;; Copyright © 2019, 2020 Timotej Lazar <[email protected]>
20;;; Copyright © 2020, 2021 Nicolò Balzarotti <[email protected]>
21;;; Copyright © 2020 Vincent Legoll <[email protected]>
22;;; Copyright © 2020, 2022 Marius Bakke <[email protected]>
23;;; Copyright © 2020 Reza Alizadeh Majd <[email protected]>
24;;; Copyright © 2020 Jonathan Brielmaier <[email protected]>
25;;; Copyright © 2020 Mason Hock <[email protected]>
26;;; Copyright © 2020, 2021, 2022 Michael Rohleder <[email protected]>
27;;; Copyright © 2020, 2022 Raghav Gururajan <[email protected]>
28;;; Copyright © 2020, 2021 Robert Karszniewicz <[email protected]>
29;;; Copyright © 2020 Giacomo Leidi <[email protected]>
30;;; Copyright © 2021 Maxime Devos <[email protected]>
31;;; Copyright © 2021, 2023-2024 Denis 'GNUtoo' Carikli <[email protected]>
32;;; Copyright © 2021, 2024 Vinicius Monego <[email protected]>
33;;; Copyright © 2021 jgart <[email protected]>
34;;; Copyright © 2022 Aleksandr Vityazev <[email protected]>
35;;; Copyright © 2022 Jai Vetrivelan <[email protected]>
36;;; Copyright © 2022 Jack Hill <[email protected]>
37;;; Copyright © 2022, 2023, 2025-2026 Maxim Cournoyer <[email protected]>
38;;; Copyright © 2022 Giovanni Biscuolo <[email protected]>
39;;; Copyright © 2023 Giacomo Leidi <[email protected]>
40;;; Copyright © 2023 Yovan Naumovski <[email protected]>
41;;; Copyright © 2023 gemmaro <[email protected]>
42;;; Copyright © 2024 Carlo Zancanaro <[email protected]>
43;;; Copyright © 2024 Wilko Meyer <[email protected]>
44;;; Copyright © 2024-2026 Ashish SHUKLA <[email protected]>
45;;; Copyright © 2024, 2025 Igor Goryachev <[email protected]>
46;;; Copyright © 2024 Nguyễn Gia Phong <[email protected]>
47;;; Copyright © 2025 Evgeny Pisemsky <[email protected]>
48;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
49;;; Copyright © 2025, 2026 Adrien 'neox' Bourmault <[email protected]>
50;;; Copyright © 2026 orahcio <[email protected]>
51;;; Copyright © 2026 Sughosha <[email protected]>
52;;; Copyright © 2026 Tomás Ortín Fernández (quanrong) <[email protected]>
53;;; Copyright © 2026 Goran Vukoman <[email protected]>
54;;; Copyright © 2026 Konstantin Suntsov <[email protected]>
55;;;
56;;; This file is part of GNU Guix.
57;;;
58;;; GNU Guix is free software; you can redistribute it and/or modify it
59;;; under the terms of the GNU General Public License as published by
60;;; the Free Software Foundation; either version 3 of the License, or (at
61;;; your option) any later version.
62;;;
63;;; GNU Guix is distributed in the hope that it will be useful, but
64;;; WITHOUT ANY WARRANTY; without even the implied warranty of
65;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
66;;; GNU General Public License for more details.
67;;;
68;;; You should have received a copy of the GNU General Public License
69;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
70
71(define-module (gnu packages messaging)
72 #:use-module (gnu packages)
73 #:use-module (gnu packages admin)
74 #:use-module (gnu packages aidc)
75 #:use-module (gnu packages aspell)
76 #:use-module (gnu packages audio)
77 #:use-module (gnu packages autotools)
78 #:use-module (gnu packages base)
79 #:use-module (gnu packages bash)
80 #:use-module (gnu packages bison)
81 #:use-module (gnu packages c)
82 #:use-module (gnu packages cmake)
83 #:use-module (gnu packages boost)
84 #:use-module (gnu packages check)
85 #:use-module (gnu packages dns)
86 #:use-module (gnu packages nss)
87 #:use-module (gnu packages code)
88 #:use-module (gnu packages compression)
89 #:use-module (gnu packages cpp)
90 #:use-module (gnu packages crypto)
91 #:use-module (gnu packages curl)
92 #:use-module (gnu packages cyrus-sasl)
93 #:use-module (gnu packages databases)
94 #:use-module (gnu packages docbook)
95 #:use-module (gnu packages documentation)
96 #:use-module (gnu packages enchant)
97 #:use-module (gnu packages erlang)
98 #:use-module (gnu packages erlang-xyz)
99 #:use-module (gnu packages fontutils)
100 #:use-module (gnu packages freedesktop)
101 #:use-module (gnu packages gperf)
102 #:use-module (gnu packages gettext)
103 #:use-module (gnu packages glib)
104 #:use-module (gnu packages gnome)
105 #:use-module (gnu packages gnupg)
106 #:use-module (gnu packages golang)
107 #:use-module (gnu packages golang-build)
108 #:use-module (gnu packages golang-check)
109 #:use-module (gnu packages golang-compression)
110 #:use-module (gnu packages golang-crypto)
111 #:use-module (gnu packages golang-maths)
112 #:use-module (gnu packages golang-web)
113 #:use-module (gnu packages golang-xyz)
114 #:use-module (gnu packages graphviz)
115 #:use-module (gnu packages gstreamer)
116 #:use-module (gnu packages gtk)
117 #:use-module (gnu packages guile)
118 #:use-module (gnu packages hunspell)
119 #:use-module (gnu packages icu4c)
120 #:use-module (gnu packages image)
121 #:use-module (gnu packages java)
122 #:use-module (gnu packages kde-frameworks)
123 #:use-module (gnu packages kerberos)
124 #:use-module (gnu packages less)
125 #:use-module (gnu packages libcanberra)
126 #:use-module (gnu packages libevent)
127 #:use-module (gnu packages libffi)
128 #:use-module (gnu packages libidn)
129 #:use-module (gnu packages linux)
130 #:use-module (gnu packages logging)
131 #:use-module (gnu packages lua)
132 #:use-module (gnu packages man)
133 #:use-module (gnu packages markup)
134 #:use-module (gnu packages matrix)
135 #:use-module (gnu packages mpd)
136 #:use-module (gnu packages ncurses)
137 #:use-module (gnu packages networking)
138 #:use-module (gnu packages nss)
139 #:use-module (gnu packages password-utils)
140 #:use-module (gnu packages pcre)
141 #:use-module (gnu packages perl)
142 #:use-module (gnu packages photo)
143 #:use-module (gnu packages pkg-config)
144 #:use-module (gnu packages protobuf)
145 #:use-module (gnu packages python)
146 #:use-module (gnu packages python-build)
147 #:use-module (gnu packages python-check)
148 #:use-module (gnu packages python-compression)
149 #:use-module (gnu packages python-crypto)
150 #:use-module (gnu packages python-web)
151 #:use-module (gnu packages python-xyz)
152 #:use-module (gnu packages qt)
153 #:use-module (gnu packages readline)
154 #:use-module (gnu packages regex)
155 #:use-module (gnu packages ruby)
156 #:use-module (gnu packages sphinx)
157 #:use-module (gnu packages sqlite)
158 #:use-module (gnu packages stb)
159 #:use-module (gnu packages tcl)
160 #:use-module (gnu packages telegram)
161 #:use-module (gnu packages telephony)
162 #:use-module (gnu packages texinfo)
163 #:use-module (gnu packages textutils)
164 #:use-module (gnu packages time)
165 #:use-module (gnu packages tls)
166 #:use-module (gnu packages video)
167 #:use-module (gnu packages vulkan)
168 #:use-module (gnu packages web)
169 #:use-module (gnu packages xdisorg)
170 #:use-module (gnu packages xiph)
171 #:use-module (gnu packages xml)
172 #:use-module (gnu packages xorg)
173 #:use-module (guix build-system cmake)
174 #:use-module (guix build-system copy)
175 #:use-module (guix build-system go)
176 #:use-module (guix build-system glib-or-gtk)
177 #:use-module (guix build-system gnu)
178 #:use-module (guix build-system meson)
179 #:use-module (guix build-system perl)
180 #:use-module (guix build-system pyproject)
181 #:use-module (guix build-system rebar)
182 #:use-module (guix build-system qt)
183 #:use-module (guix build-system trivial)
184 #:use-module (guix download)
185 #:use-module (guix gexp)
186 #:use-module (guix git-download)
187 #:use-module (guix hg-download)
188 #:use-module ((guix licenses) #:prefix license:)
189 #:use-module (guix packages)
190 #:use-module (guix utils))
191
192(define-public biboumi
193 (package
194 (name "biboumi")
195 (version "9.0")
196 (source (origin
197 (method url-fetch)
198 (uri (string-append "https://git.louiz.org/biboumi/snapshot/biboumi-"
199 version ".tar.xz"))
200 (sha256
201 (base32 "1jvygri165aknmvlinx3jb8cclny6cxdykjf8dp0a3l3228rmzqy"))
202 ;; see https://sources.debian.org/patches/biboumi/9.0-5/2001_cmake_ignore_git.patch/
203 (patches (search-patches "biboumi-cmake-ignore-git.patch"))))
204 (arguments
205 ;; Tests seem to partially depend on networking as well as
206 ;; louiz/Catch which we remove as a dependency via the patch above as
207 ;; the repository seems dead. Deactivating those for now, possibly fix
208 ;; some of them later.
209 `(#:tests? #f
210 #:configure-flags '("-DWITHOUT_SYSTEMD=1")
211 #:phases
212 (modify-phases %standard-phases
213 (add-after 'unpack 'fix-cmake-substitutions
214 (lambda* (#:key outputs #:allow-other-keys)
215 (substitute* "CMakeLists.txt"
216 (("/etc") (string-append (assoc-ref outputs "out") "/etc"))))))))
217 (build-system cmake-build-system)
218 (inputs (list botan-2
219 expat
220 libiconv
221 libidn
222 openssl
223 postgresql ;; libpq
224 sqlite
225 ;; TODO: package optional dependency: udns
226 (list util-linux "lib") ;; libuuid
227 pkg-config))
228 (home-page "https://biboumi.louiz.org")
229 (synopsis "XMPP gateway that connects to IRC")
230 (description "Biboumi is a Free, Libre and Open Source XMPP gateway that connects to IRC
231servers and translates between the two protocols. Its goal is to let XMPP
232users take part in IRC discussions, using their favourite XMPP client.")
233 (license license:zlib)))
234
235(define-public omemo-wget
236 (package
237 (name "omemo-wget")
238 (version "0.3.0")
239 (source
240 (origin
241 (method git-fetch)
242 (uri
243 (git-reference
244 (url "https://github.com/roobre/omemo-wget")
245 (commit (string-append "v" version))))
246 (file-name (git-file-name name version))
247 (sha256
248 (base32 "0s3vfaicw5xbjl9yiyr4ckrzhzqbvfh1w2ih1igavlfpgw4v7kva"))))
249 (build-system go-build-system)
250 (arguments
251 `(#:import-path "github.com/roobre/omemo-wget"
252 #:phases
253 (modify-phases %standard-phases
254 (add-after 'unpack 'patch
255 (lambda* (#:key inputs #:allow-other-keys)
256 (let* ((xdg-utils (assoc-ref inputs "xdg-utils"))
257 (xdg-open (string-append xdg-utils "/bin/xdg-open")))
258 (substitute* (find-files "." "\\.go$")
259 ;; Correct the import path of 'aesgcm' package.
260 (("roob\\.re/omemo-wget/aesgcm")
261 "github.com/roobre/omemo-wget/aesgcm")
262 ;; Use absolute path of 'xdg-open' program.
263 (("xdg-open") xdg-open))))))))
264 (inputs
265 (list go-github-com-pkg-errors xdg-utils))
266 (home-page "https://roob.re/omemo-wget")
267 (synopsis "Program to download and decrypt @code{aesgcm://} URLs")
268 (description "OMEMO-wget is a tool to handle cryptographic URLs, generated
269by @acronym{OMEMO, OMEMO Multi-End Message and Object Encryption}, during
270XMPP-based sessions.")
271 (license license:lgpl3+)))
272
273(define-public libgnt
274 (package
275 (name "libgnt")
276 (version "2.14.4")
277 (source
278 (origin
279 (method url-fetch)
280 (uri
281 (string-append "mirror://sourceforge/pidgin/libgnt/"
282 version "/libgnt-" version "-dev" ".tar.xz"))
283 (sha256
284 (base32 "1v4n9hb7x8d2mb626k4w3rg72amdq1fbm0dqj5bmglrilylk6n8r"))))
285 (build-system meson-build-system)
286 (outputs '("out" "doc"))
287 (arguments
288 (list #:glib-or-gtk? #t ; To wrap binaries and/or compile schemas
289 #:configure-flags #~'("-Dpython2=false")
290 #:phases
291 #~(modify-phases %standard-phases
292 (add-after 'unpack 'patch-ncurses-path
293 (lambda* (#:key inputs #:allow-other-keys)
294 (substitute* "meson.build"
295 (("'/usr'")
296 (string-append "'" #$(this-package-input "ncurses")
297 "'")))))
298 (add-after 'install 'move-doc
299 (lambda _
300 (mkdir-p (string-append #$output:doc "/share"))
301 (rename-file
302 (string-append #$output "/share/gtk-doc")
303 (string-append #$output:doc "/share/gtk-doc")))))))
304 (native-inputs
305 (list docbook-xml-4.1.2
306 `(,glib "bin")
307 gobject-introspection
308 gtk-doc/stable
309 pkg-config))
310 (inputs (list libxcrypt ncurses))
311 (propagated-inputs (list glib libxml2))
312 (synopsis "GLib Ncurses Toolkit")
313 (description "GNT is an ncurses toolkit for creating text-mode graphical
314user interfaces in a fast and easy way. It is based on GLib and ncurses.")
315 (home-page "https://keep.imfreedom.org/libgnt/libgnt")
316 (license license:gpl2+)))
317
318(define-public libgadu
319 (package
320 (name "libgadu")
321 (version "1.12.2")
322 (source
323 (origin
324 (method git-fetch)
325 (uri
326 (git-reference
327 (url "https://github.com/wojtekka/libgadu.git")
328 (commit version)))
329 (file-name
330 (git-file-name name version))
331 (sha256
332 (base32 "1s16cripy5w9k12534qb012iwc5m9qcjyrywgsziyn3kl3i0aa8h"))))
333 (build-system gnu-build-system)
334 (arguments
335 ;; 'test/manual/userconfig.h' contains definitions in lieu of
336 ;; declarations, hence '-fcommon'.
337 `(#:configure-flags
338 (list "--disable-static" "CFLAGS=-O2 -g -fcommon")
339 #:phases
340 (modify-phases %standard-phases
341 (add-after 'unpack 'patch-shebangs
342 (lambda* (#:key inputs #:allow-other-keys)
343 (substitute* "protobufgen.sh"
344 (("/bin/sh")
345 (search-input-file inputs "/bin/sh"))))))))
346 (native-inputs
347 (list autoconf
348 automake
349 bash
350 doxygen
351 libtool
352 perl
353 pkg-config))
354 (inputs
355 `(("curl" ,curl)
356 ("expat" ,expat)
357 ("libprotobuf-c" ,protobuf-c)
358 ("libxml" ,libxml2)
359 ("openssl" ,openssl)
360 ("zlib" ,zlib)))
361 (propagated-inputs
362 (list gnutls))
363 (synopsis "Library for handling the protocol of Gadu-Gadu")
364 (description "LibGadu is library for handling Gadu-Gadu instant messenger
365protocol. The library is written in C and aims to be operating system and
366environment independent.")
367 (home-page "https://libgadu.net/index.en.html")
368 (license license:lgpl2.1+)))
369
370(define-public silc-toolkit
371 (package
372 (name "silc-toolkit")
373 (version "1.1.12")
374 (source
375 (origin
376 (method url-fetch)
377 (uri
378 (string-append "mirror://sourceforge/silc/silc/toolkit/sources/silc-toolkit-"
379 version ".tar.gz"))
380 (sha256
381 (base32 "0mnvf9n7qriadg0p7a8qmvcayhnns2g9fhmcymavlm0v8xrky33y"))))
382 (build-system gnu-build-system)
383 (arguments
384 `(#:configure-flags
385 (list
386 "--disable-static"
387 "--enable-ipv6"
388 "--enable-stack-trace")
389 #:phases
390 (modify-phases %standard-phases
391 (add-after 'unpack 'trigger-bootstrap
392 (lambda _
393 (delete-file "configure")
394 (delete-file "Makefile.in")
395 #t)))))
396 (native-inputs
397 (list autoconf automake libtool perl pkg-config))
398 (synopsis "SILC ToolKit")
399 (description "SILC (Secure Internet Live Conferencing) is a modern and secure
400conferencing protocol. It provides all the common conferencing services like
401private messages, instant messages, channels and groups, and video and audio
402conferencing.")
403 (home-page "https://silc.github.io/info")
404 (license
405 ;; Dual-licensed
406 (list
407 license:gpl2+
408 license:bsd-2))))
409
410(define-public meanwhile
411 (package
412 (name "meanwhile")
413 (version "1.1.1")
414 (source
415 (origin
416 (method git-fetch)
417 (uri
418 (git-reference
419 (url "https://github.com/obriencj/meanwhile.git")
420 (commit
421 (string-append "v" version))))
422 (file-name
423 (git-file-name name version))
424 (sha256
425 (base32 "1k1gvmx1ikm0y1mdmm495rzkb00pl170jfaf2dy0n5aiiknkk7q3"))))
426 (build-system glib-or-gtk-build-system)
427 (native-inputs
428 (list autoconf automake doxygen libtool pkg-config))
429 (propagated-inputs
430 (list glib))
431 (synopsis "Library for Lotus Instant Messaging")
432 (description "Meanwhile is a library for connecting to a LIM (Lotus Instant
433Messaging, formerly Lotus Sametime, formerly VPBuddy) community. It uses a
434protocol based in part off of the IMPP draft(*1), and in part off of traces of
435TCP sessions from existing clients.")
436 (home-page "https://github.com/obriencj/meanwhile")
437 (license license:lgpl3)))
438
439(define-public poezio
440 (package
441 (name "poezio")
442 (version "0.18")
443 (source
444 (origin
445 (method git-fetch)
446 (uri (git-reference
447 (url "https://codeberg.org/poezio/poezio")
448 (commit (string-append "v" version))))
449 (file-name (git-file-name name version))
450 (sha256
451 (base32 "0v1nqhy77qwd8gxsfxbyjkk3zi80357v30f4nxz2kwcanlkb20gx"))))
452 (build-system pyproject-build-system)
453 (arguments
454 (list
455 #:phases
456 #~(modify-phases %standard-phases
457 (add-after 'unpack 'patch
458 ;; The C extension build looks for 'cc', which does not exist
459 ;; in the build environment.
460 (lambda _
461 (substitute* "setup.py"
462 (("'CC', 'cc'")
463 "'CC', 'gcc'")))))))
464 (native-inputs
465 (list pkg-config python-pytest python-setuptools python-sphinx))
466 (inputs
467 (list python ;for the C extension headers
468 python-aiohttp
469 python-pillow
470 python-pygments
471 python-pyinotify
472 python-qrcode
473 python-setuptools
474 python-slixmpp))
475 (synopsis "Console Jabber/XMPP Client")
476 (description "Poezio is a free console XMPP client (the protocol on which
477the Jabber IM network is built).
478Its goal is to let you connect very easily (no account creation needed) to the
479network and join various chatrooms, immediately. It tries to look like the
480most famous IRC clients (weechat, irssi, etc). Many commands are identical and
481you won't be lost if you already know these clients. Configuration can be
482made in a configuration file or directly from the client.
483You'll find the light, fast, geeky and anonymous spirit of IRC while using a
484powerful, standard and open protocol.")
485 (home-page "https://poez.io/en/")
486 (license license:gpl3+)))
487
488(define-public libotr
489 (package
490 (name "libotr")
491 (version "4.1.1")
492 (source
493 (origin
494 (method url-fetch)
495 (uri (string-append "https://otr.cypherpunks.ca/libotr-"
496 version ".tar.gz"))
497 (sha256
498 (base32 "1x8rliydhbibmzwdbyr7pd7n87m2jmxnqkpvaalnf4154hj1hfwb"))
499 (modules '((guix build utils)))
500 (snippet
501 ;; Add missing #include that causes a build failure with glibc 2.35.
502 #~(substitute* "tests/regression/client/client.c"
503 (("_GNU_SOURCE" all)
504 (string-append all "\n#include <sys/socket.h>\n"))))
505 (patches
506 (search-patches "libotr-test-auth-fix.patch"))))
507 (build-system gnu-build-system)
508 (native-inputs
509 (list perl)) ; for the test suite
510 (inputs
511 (list libgpg-error))
512 (propagated-inputs
513 (list libgcrypt)) ; libotr headers include gcrypt.h
514 (synopsis "Off-the-Record (OTR) Messaging Library and Toolkit")
515 (description "OTR allows you to have private conversations over instant
516messaging by providing: (1) Encryption: No one else can read your instant
517messages. (2) Authentication: You are assured the correspondent is who you
518think it is. (3) Deniability: The messages you send do not have digital
519signatures that are checkable by a third party. Anyone can forge messages
520after a conversation to make them look like they came from you. However,
521during a conversation, your correspondent is assured the messages he sees are
522authentic and unmodified. (4) Perfect forward secrecy: If you lose control of
523your private keys, no previous conversation is compromised.")
524 (home-page "https://otr.cypherpunks.ca/")
525 (license
526 (list
527 ;; Library
528 license:lgpl2.1+
529 ;; Others
530 license:gpl2+))))
531
532(define-public libsignal-protocol-c
533 (package
534 (name "libsignal-protocol-c")
535 (version "2.3.3")
536 (source (origin
537 (method git-fetch)
538 (uri (git-reference
539 (url "https://github.com/WhisperSystems/libsignal-protocol-c")
540 (commit (string-append "v" version))))
541 (file-name (git-file-name name version))
542 (sha256
543 (base32
544 "0z5p03vk15i6h870azfjgyfgxhv31q2vq6rfhnybrnkxq2wqzwhk"))))
545 (arguments
546 `(;; Required for proper linking.
547 #:configure-flags '("-DBUILD_SHARED_LIBS=on")))
548 (build-system cmake-build-system)
549 (inputs (list ;; Required for tests:
550 check openssl))
551 (native-inputs (list pkg-config))
552 (home-page "https://github.com/WhisperSystems/libsignal-protocol-c")
553 (synopsis "Implementation of a ratcheting forward secrecy protocol")
554 (description "libsignal-protocol-c is an implementation of a ratcheting
555forward secrecy protocol that works in synchronous and asynchronous
556messaging environments. It can be used with messaging software to provide
557end-to-end encryption.")
558 (license license:gpl3+)))
559
560(define-public libomemo-c
561 (package
562 (inherit libsignal-protocol-c)
563 (name "libomemo-c")
564 (version "0.5.1")
565 (source (origin
566 (method git-fetch)
567 (uri (git-reference
568 (url "https://github.com/dino/libomemo-c")
569 (commit (string-append "v" version))))
570 (file-name (git-file-name name version))
571 (sha256
572 (base32 "1xszd4cjrlwwsy19ri2ymqr676qpqqhxv3cw5zwch3lms68p51hy"))
573 (modules '((guix build utils)))
574 (snippet
575 ;; Delete generated sources.
576 #~(for-each delete-file
577 (find-files "." "\\.pb-c\\.[ch]$")))))
578 (build-system meson-build-system)
579 (arguments (list #:configure-flags #~(list "-Dtests=true")))
580 (propagated-inputs (list protobuf-c))
581 (home-page "https://github.com/dino/libomemo-c")
582 (description "This package provides a fork of libsignal-protocol-c, used
583by Dino to provide OMEMO support.")))
584
585(define-public axc
586 (package
587 (name "axc")
588 (version "0.3.7")
589 (source
590 (origin
591 (method git-fetch)
592 (uri (git-reference
593 (url "https://github.com/gkdr/axc")
594 (commit (string-append "v" version))))
595 (modules '((guix build utils)))
596 (snippet
597 `(begin
598 ;; Empty directories meant to hold submodules that we provide as
599 ;; proper inputs below.
600 (delete-file-recursively "lib")))
601 (file-name
602 (git-file-name name version))
603 (sha256
604 (base32 "0b02b9flri374f8aw6xfz7mm9s57rb7393r8mdphv7kcsf76i7i5"))))
605 (build-system gnu-build-system)
606 (arguments
607 `(#:test-target "test"
608 #:phases (modify-phases %standard-phases
609 (replace 'configure
610 (lambda* (#:key outputs #:allow-other-keys)
611 (let ((out (assoc-ref outputs "out")))
612 (setenv "CC" "gcc")
613 (setenv "PREFIX" out)))))
614 #:parallel-tests? #f))
615 (native-inputs (list cmocka pkg-config))
616 (inputs (list glib libgcrypt libsignal-protocol-c sqlite))
617 (synopsis "Client library for libsignal-protocol-c")
618 (description "This is a client library for @code{libsignal-protocol-c}.
619It implements the necessary interfaces using @code{libgcrypt} and
620@code{sqlite}.")
621 (home-page "https://github.com/gkdr/axc")
622 (license license:gpl3))) ;GPLv3-only, per license headers
623
624(define-public libomemo
625 (package
626 (name "libomemo")
627 (version "0.7.1")
628 (source
629 (origin
630 (method git-fetch)
631 (uri (git-reference
632 (url "https://github.com/gkdr/libomemo")
633 (commit (string-append "v" version))))
634 (file-name
635 (git-file-name name version))
636 (sha256
637 (base32 "1q3vyj8zk3vm0a4v6w8qya5dhk2yw04bga8799a0zl6907nf122k"))))
638 (build-system gnu-build-system)
639 (arguments
640 (list
641 #:parallel-tests? #f
642 #:test-target "test"
643 #:phases #~(modify-phases %standard-phases
644 (replace 'configure
645 (lambda* (#:key outputs #:allow-other-keys)
646 (let ((out (assoc-ref outputs "out")))
647 (setenv "CC" "gcc")
648 (setenv "PREFIX" out)))))))
649 (native-inputs (list cmocka pkg-config))
650 (inputs (list glib libgcrypt minixml sqlite))
651 (synopsis "OMEMO C library")
652 (description "This library implements @acronym{OMEMO, OMEMO Multi-End
653Message and Object Encryption} of XMPP (XEP-0384) in C.")
654 (home-page "https://github.com/gkdr/libomemo")
655 (license license:expat)))
656
657(define-public bitlbee
658 (package
659 (name "bitlbee")
660 (version "3.6")
661 (source (origin
662 (method url-fetch)
663 (uri (string-append "https://get.bitlbee.org/src/bitlbee-"
664 version ".tar.gz"))
665 (sha256
666 (base32 "0zhhcbcr59sx9h4maf8zamzv2waya7sbsl7w74gbyilvy93dw5cz"))))
667 (build-system gnu-build-system)
668 (native-inputs (list pkg-config
669 ;; Note: Change to 'check' for versions > 3.6.
670 check-0.12))
671 (inputs (list glib libotr gnutls python perl))
672 (arguments
673 `(#:phases
674 (modify-phases %standard-phases
675 (add-before 'configure 'set-python
676 (lambda _ (setenv "PYTHON" (which "python3")) #t))
677 (add-after 'install 'install-etc
678 (lambda* (#:key (make-flags '()) #:allow-other-keys)
679 (apply invoke "make" "install-etc" make-flags)))
680 (add-after 'install-etc 'install-lib
681 (lambda* (#:key (make-flags '()) #:allow-other-keys)
682 (apply invoke "make" "install-dev" make-flags)))
683 (replace 'configure
684 ;; bitlbee's configure script does not tolerate many of the
685 ;; variable settings that Guix would pass to it.
686 (lambda* (#:key outputs #:allow-other-keys)
687 (invoke "./configure"
688 (string-append "--prefix="
689 (assoc-ref outputs "out"))
690 "--otr=1"))))))
691 (synopsis "IRC to instant messaging gateway")
692 (description "BitlBee brings IM (instant messaging) to IRC clients, for
693people who have an IRC client running all the time and don't want to run an
694additional IM client. BitlBee currently supports XMPP/Jabber (including
695Google Talk), MSN Messenger, Yahoo! Messenger, AIM and ICQ, and the Twitter
696microblogging network (plus all other Twitter API compatible services like
697identi.ca and status.net).")
698 (home-page "https://www.bitlbee.org/")
699 (license (list license:gpl2+ license:bsd-2))))
700
701(define-public bitlbee-purple
702 ;; This variant uses libpurple, which provides support for more protocols at
703 ;; the expense of a much bigger closure.
704 (package/inherit bitlbee
705 (name "bitlbee-purple")
706 (synopsis "IRC to instant messaging gateway (using Pidgin's libpurple)")
707 (inputs (modify-inputs inputs
708 (prepend pidgin)))
709 (native-search-paths
710 (list (search-path-specification
711 (variable "PURPLE_PLUGIN_PATH")
712 ;; XXX: Should be (version-major (package-version pidgin)) but
713 ;; can't due to circular references.
714 (files (list (string-append "lib/purple-2")
715 "lib/pidgin")))))
716 (arguments
717 (substitute-keyword-arguments arguments
718 ((#:phases phases '%standard-phases)
719 `(modify-phases ,phases
720 (replace 'configure ;add "--purple=1"
721 (lambda* (#:key outputs #:allow-other-keys)
722 (invoke "./configure"
723 (string-append "--prefix="
724 (assoc-ref outputs "out"))
725 "--otr=1" "--purple=1")))))
726 ((#:tests? _ #t)
727 ;; XXX: Tests fail to link, and ./configure says that it's "supported
728 ;; on a best-effort basis" anyway.
729 #f)))))
730
731(define-public bitlbee-discord
732 ;; Version 0.4.3 of bitlbee-discord was prepared to work for
733 ;; [email protected]. However, version 2.69 of glib introduced a breaking change
734 ;; causing bitlbee-discord to throw:
735 ;;
736 ;; discord - Login error: Failed to switch to websocket mode
737 ;;
738 ;; This makes the plugin unable to connect and therefore unusable:
739 ;; https://github.com/sm00th/bitlbee-discord/issues/226
740 ;; The specified commit fixes incompatibility with [email protected] and newer.
741 (let ((commit "607f9887ca85f246e970778e3d40aa5c346365a7")
742 (revision "1"))
743 (package
744 (name "bitlbee-discord")
745 (version (git-version "0.4.3" revision commit))
746 (source
747 (origin
748 (method git-fetch)
749 (uri (git-reference
750 (url "https://github.com/sm00th/bitlbee-discord")
751 (commit commit)))
752 (file-name (git-file-name name version))
753 (sha256
754 (base32 "0jkwhx2walx2ay0vc9x13q0j1qq4r5x30ss03a3j7ks28xvsnxc7"))))
755 (build-system gnu-build-system)
756 (arguments
757 `(#:configure-flags
758 (let ((out (assoc-ref %outputs "out")))
759 (list (string-append "--with-bdatadir=" out "/share/bitlbee/")
760 (string-append "--with-plugindir=" out "/lib/bitlbee/")))
761 #:phases
762 (modify-phases %standard-phases
763 (add-after 'unpack 'patch-autogen
764 (lambda _
765 (let ((sh (which "sh")))
766 (substitute* "autogen.sh" (("/bin/sh") sh))
767 (setenv "CONFIG_SHELL" sh)))))))
768 (inputs (list glib))
769 (native-inputs (list pkg-config
770 autoconf
771 automake
772 texinfo
773 libtool
774 bitlbee ; needs bitlbee headers
775 bash))
776 (synopsis "Discord plugin for Bitlbee")
777 (description "Bitlbee-discord is a plugin for Bitlbee which provides
778access to servers running the Discord protocol.")
779 (home-page "https://github.com/sm00th/bitlbee-discord/")
780 (license license:gpl2+))))
781
782(define-public purple-mattermost
783 ;; The latest release (1.2) only supports Mattermost's /api/v3. Choose a
784 ;; commit that supports /api/v4.
785 (let ((commit "158ce2052af9aaf3d1f6f045f0cfba276e0e91cf")
786 (revision "0"))
787 (package
788 (name "purple-mattermost")
789 (version (git-version "1.2" revision commit))
790 (home-page "https://github.com/EionRobb/purple-mattermost")
791 (source (origin
792 (method git-fetch)
793 (uri (git-reference (url home-page)
794 (commit commit)))
795 (file-name (git-file-name name version))
796 (sha256
797 (base32
798 "1481zm20pnfq52ncg7hxayjq8cw3a6yh9m4jm1m5s8chsq04015l"))))
799 (build-system gnu-build-system)
800 (arguments
801 `(#:phases (modify-phases %standard-phases
802 (replace 'configure
803 (lambda* (#:key inputs outputs #:allow-other-keys)
804 ;; Adjust the makefile to install files in the right
805 ;; place.
806 (let ((out (assoc-ref outputs "out")))
807 (substitute* "Makefile"
808 (("MATTERMOST_DEST = .*")
809 (string-append "MATTERMOST_DEST = " out
810 "/lib/purple-2\n")) ;XXX: hardcoded
811 (("MATTERMOST_ICONS_DEST = .*")
812 (string-append "MATTERMOST_ICONS_DEST = "
813 out
814 "/share/pixmaps/pidgin/protocols\n")))
815 #t))))
816 #:make-flags (list "CC=gcc"
817 ,(string-append "PLUGIN_VERSION=" version))
818 #:tests? #f))
819 (inputs (list glib json-glib discount pidgin))
820 (native-inputs (list pkg-config))
821 (synopsis "Purple plug-in to access Mattermost instant messaging")
822 (description
823 "Purple-Mattermost is a plug-in for Purple, the instant messaging library
824used by Pidgin and Bitlbee, among others, to access
825@uref{https://mattermost.com/, Mattermost} servers.")
826 (license license:gpl3+))))
827
828(define-public purple-teams
829 (package
830 (name "purple-teams")
831 (version "2026-09-06")
832 (source
833 (origin
834 (method git-fetch)
835 (uri (git-reference
836 (url "https://github.com/EionRobb/purple-teams")
837 (commit (string-append "daily-" version))))
838 (file-name (git-file-name name version))
839 (sha256
840 (base32 "1pnp72xixfxbca2zgz28zq1f9k6jnflz2sd0abwvp5rivw36p4fg"))
841 (modules '((guix build utils)))
842 (snippet #~(delete-file "libjson-glib-1.0.dll"))))
843 (build-system gnu-build-system)
844 (arguments
845 (list
846 #:phases
847 #~(modify-phases %standard-phases
848 (delete 'configure)) ;no "configure" script
849 #:make-flags
850 #~(list (string-append "PLUGIN_VERSION=" #$version)
851 (string-append "TEAMS_DEST=" #$output "/lib/purple-2")
852 (string-append "TEAMS_ICONS_DEST="
853 #$output "/share/pixmaps/pidgin/protocols")
854 (string-append "CC=" #$(cc-for-target)))
855 #:tests? #f)) ;no tests
856 (inputs (list glib json-glib pidgin))
857 (native-inputs (list pkg-config))
858 (home-page "https://codeberg.org/EionRobb/purple-teams")
859 (synopsis "Purple plug-in to access Teams instant messaging")
860 (description
861 "Purple-Teams is a plug-in for Purple, the instant messaging library used
862by Pidgin and Bitlbee, among others, to access Microsoft Teams.")
863 (license license:gpl3+)))
864
865(define-public hexchat
866 (package
867 (name "hexchat")
868 (version "2.16.2")
869 (source
870 (origin
871 (method url-fetch)
872 (uri (string-append "https://github.com/hexchat/hexchat/releases/"
873 "download/v" version "/hexchat-" version ".tar.xz"))
874 (sha256
875 (base32 "0jhfg6n9r6fn9ld21pdzdz6210d7dms401zcfdrvhx52il53921f"))))
876 (build-system meson-build-system)
877 (native-inputs
878 (list gettext-minimal
879 `(,glib "bin") ;need glib-genmarshal
880 perl
881 pkg-config))
882 (inputs
883 (list dbus-glib
884 dbus
885 enchant
886 gtk+-2
887 libcanberra
888 openssl
889
890 ;; Bindings for add-on scripts.
891 luajit
892 perl-xml-parser
893 python
894 python-cffi
895
896 ;; For the ensuing WRAP-PROGRAM.
897 bash-minimal))
898 (arguments
899 `(#:phases
900 (modify-phases %standard-phases
901 (add-after 'unpack 'skip-desktop-database-updates
902 (lambda _
903 ;; The build scripts update icon and desktop file databases when
904 ;; DESTDIR is not set. We can't update these databases from
905 ;; within the build chroot, but we also don't set DESTDIR. So, we
906 ;; just skip this code.
907 (substitute* "meson_post_install.py"
908 (("if 'DESTDIR' not in os.environ:")
909 "if False:"))))
910 (add-after 'install 'wrap-program
911 ;; Let it ‘initialize the Python-CFFI embedding logic’ at run time.
912 (lambda* (#:key outputs #:allow-other-keys)
913 (let* ((out (assoc-ref outputs "out"))
914 (bin (string-append out "/bin")))
915 (wrap-program (string-append bin "/hexchat")
916 `("GUIX_PYTHONPATH" ":" prefix
917 (,(getenv "GUIX_PYTHONPATH"))))))))))
918 (synopsis "Graphical IRC client")
919 (description
920 "HexChat lets you connect to multiple IRC networks at once. The main
921window shows the list of currently connected networks and their channels, the
922current conversation and the list of users. It uses colors to differentiate
923between users and to highlight messages. It checks spelling using available
924dictionaries. HexChat can be extended with multiple addons.")
925 (home-page "https://hexchat.net/")
926 (license license:gpl2+)))
927
928(define-public nchat
929 (package
930 (name "nchat")
931 (version "5.18.20")
932 (source
933 (origin
934 (method git-fetch)
935 (uri (git-reference
936 (url "https://github.com/d99kris/nchat")
937 (commit (string-append "v" version))))
938 (file-name (git-file-name name version))
939 (sha256
940 (base32 "014g7vc32dpdjljj1ahph52zjhll1sn1qx5dki3nkvvaijis696l"))
941 (snippet
942 #~(begin
943 (use-modules (guix build utils))
944 (for-each (lambda (file)
945 (delete-file-recursively file))
946 (list "lib/tgchat/ext"
947 "lib/wmchat/go"
948 "lib/sgchat/go/ext"))
949 ;; Remove ext path and install references from it, finally
950 ;; rename reference to the system tdlib
951 (substitute* "lib/tgchat/CMakeLists.txt"
952 (("add_subdirectory\\(ext/td.*\\)" all)
953 (string-append "# " all))
954 (("install\\(FILES .*\\)" all)
955 (string-append "# " all))
956 (("tdclientshared") "tdclient"))
957 ;; Remove go path and make reference to system libcgowm
958 (substitute* "lib/wmchat/CMakeLists.txt"
959 (("add_subdirectory\\(go\\)" all)
960 (string-append "# " all))
961 (("add_dependencies\\(wmchat.*\\)" all)
962 (string-append "# " all))
963 (("(target.*\\(wmchat ).*ncutil/src\"\\)" all first)
964 (string-append all "\n" first
965 "PUBLIC ${CGOWM_LIBRARY_INCLUDE_DIR})\n"))
966 (("WMCHAT_GOLIB(\\} ncutil)" all first)
967 (string-append "CGOWM_LIBRARY" first)))
968 (substitute* "lib/wmchat/src/wmchat.cpp"
969 (("\"(libcgowm.h)\"" all first)
970 (string-append "<" first ">")))))))
971 (build-system cmake-build-system)
972 (arguments
973 (list
974 #:tests? #f ;No tests.
975 ;; TODO: Enable Signal -DHAS_SIGNAL=ON
976 #:configure-flags
977 #~(list "-DHAS_DUMMY=OFF" ;DUMMY is used just for development
978 (string-append "-DCGOWM_LIBRARY="
979 (search-input-file %build-inputs
980 "lib/libcgowm.so"))
981 (string-append "-DCGOWM_INCLUDE_DIR="
982 (search-input-file %build-inputs
983 "include/libcgowm.h")))))
984 (native-inputs
985 (list go
986 go-github-com-d99kris-nchat-lib-wmchat-go ;for whatsapp
987 gperf
988 pkg-config))
989 (inputs
990 (list ncurses
991 openssl
992 sqlite
993 tdlib
994 zlib))
995 (home-page "https://github.com/d99kris/nchat")
996 (synopsis "Terminal-based messaging client")
997 (description "Multi-protocol terminal-based messaging client for Linux
998with support for Telegram and WhatsApp.
999
1000Features:
1001@itemize
1002@item Send and receive markdown formatted messages;
1003@item Reply, delete, edit and forward messages;
1004@item Mention users in group chats;
1005@item Send and display message reactions;
1006@item View and save media (documents, photos, videos);
1007@item Show message read and edited indicators;
1008@item Show user status (online, away, typing);
1009@item Jump to next unread chat;
1010@item Archive, pin and delete chats;
1011@item Search messages within a chat;
1012@item List dialogs for chats, contacts, emojis, files;
1013@item Message history cache with text export;
1014@item Desktop notifications for new messages;
1015@item Toggle textized vs. graphical emojis;
1016@item Customizable themes and key bindings.
1017@end itemize")
1018 (license license:expat)))
1019
1020(define-public ngircd
1021 (package
1022 (name "ngircd")
1023 (version "27")
1024 (source (origin
1025 (method url-fetch)
1026 (uri (string-append "https://arthur.barton.de/pub/ngircd/ngircd-"
1027 version ".tar.xz"))
1028 (sha256
1029 (base32
1030 "1f27qa2xg8xwdyij2n5aimdyp24za09rc0f9q5rjwpnx341qi5v8"))))
1031 (outputs '("out" "debug"))
1032 (build-system gnu-build-system)
1033 ;; Needed for the test suite.
1034 (native-inputs (list procps expect inetutils openssl))
1035 ;; XXX Add libident.
1036 (inputs
1037 (append (list zlib
1038 tcp-wrappers
1039 gnutls)
1040 (if (or (target-linux?) (target-hurd?))
1041 (list linux-pam)
1042 '())))
1043 (arguments
1044 (list
1045 #:configure-flags
1046 #~(list "--with-gnutls"
1047 "--with-iconv"
1048 "--enable-ipv6"
1049 "--with-tcp-wrappers"
1050 #$@(if (or (target-linux?) (target-hurd?))
1051 #~("--with-pam")
1052 #~()))
1053 #:phases
1054 #~(modify-phases %standard-phases
1055 ;; Necessary for the test suite.
1056 (add-after 'configure 'post-configure
1057 (lambda _
1058 (substitute* "src/ngircd/Makefile"
1059 (("/bin/sh") (which "sh")))
1060 ;; The default getpid.sh does a sloppy grep over 'ps -ax'
1061 ;; output, which fails arbitrarily.
1062 (with-output-to-file "src/testsuite/getpid.sh"
1063 (lambda ()
1064 (display
1065 (string-append
1066 "#!" (which "sh") "\n"
1067 "ps -C \"$1\" -o pid=\n"))))
1068 ;; Our variant of getpid.sh does not match interpreter names
1069 ;; when the script's shebang is invoked directly as "./foo".
1070 ;; Patch cases where the test suite relies on this.
1071 (substitute* "src/testsuite/start-server.sh"
1072 ;; It runs 'getpid.sh sh' to test if it works at all. Run it on
1073 ;; 'make' instead.
1074 (("getpid.sh sh") "getpid.sh make")))))))
1075 (home-page "https://ngircd.barton.de/")
1076 (synopsis "Lightweight Internet Relay Chat server for small networks")
1077 (description
1078 "ngIRCd is a lightweight @dfn{Internet Relay Chat} (IRC) server for small
1079or private networks. It is easy to configure, can cope with dynamic IP
1080addresses, and supports IPv6, SSL-protected connections, as well as PAM for
1081authentication.")
1082 (license license:gpl2+)))
1083
1084(define-public pidgin
1085 (package
1086 (name "pidgin")
1087 (version "2.14.14")
1088 (source
1089 (origin
1090 (method url-fetch)
1091 (uri
1092 (string-append "mirror://sourceforge/pidgin/Pidgin/"
1093 version "/pidgin-" version ".tar.bz2"))
1094 (sha256
1095 (base32 "0mi3ir2vsir7k07cqlalhflw93gsxqni7kamibwn00pivsa9kz0g"))
1096 (patches
1097 (search-patches "pidgin-add-search-path.patch"))
1098 (modules '((guix build utils)))
1099 (snippet
1100 '(begin
1101 ;; Remove stale generated file after applying patches.
1102 (delete-file "configure")
1103 #t))))
1104 (build-system glib-or-gtk-build-system)
1105 (native-inputs
1106 (list autoconf ;; For bootstrap
1107 automake ;; For bootstrap
1108 check
1109 graphviz
1110 gconf
1111 intltool
1112 libtool ;; For bootstrap
1113 pkg-config))
1114 (inputs
1115 (list avahi
1116 cyrus-sasl
1117 dbus
1118 dbus-glib
1119 ;; evolution-data-server
1120 gnutls
1121 gstreamer
1122 ;; gtkspell2
1123 libgadu
1124 libgcrypt
1125 libice
1126 libidn
1127 libltdl
1128 libsm
1129 libx11
1130 libxext
1131 libxml2
1132 libxscrnsaver
1133 libxslt
1134 ;; libzephyr
1135 meanwhile
1136 ncurses
1137 network-manager
1138 nspr
1139 nss
1140 nss-certs
1141 pango
1142 perl
1143 python-wrapper
1144 python-dbus
1145 silc-toolkit
1146 sqlite
1147 startup-notification
1148 tcl
1149 tk))
1150 (propagated-inputs
1151 ;; Required by finch.pc, pidgin.pc and purple.pc
1152 (list glib gtk+-2 libgnt))
1153 (arguments
1154 `(#:configure-flags
1155 (list
1156 ;; XXX: Disable voice and video calls until Farstream is back to life:
1157 ;; <https://issues.guix.gnu.org/75739>.
1158 "--disable-vv"
1159
1160 "--disable-gtkspell"
1161 "--disable-gevolution"
1162 "--enable-cap"
1163 "--enable-cyrus-sasl"
1164 ;; Use nss-certs instead of bundled ones.
1165 (string-append "--with-system-ssl-certs="
1166 (assoc-ref %build-inputs "nss-certs")
1167 "/etc/ssl/certs")
1168 (string-append "--with-ncurses-headers="
1169 (assoc-ref %build-inputs "ncurses")
1170 "/include")
1171 (string-append "--with-tclconfig="
1172 (assoc-ref %build-inputs "tcl")
1173 "/lib")
1174 (string-append "--with-tkconfig="
1175 (assoc-ref %build-inputs "tk")
1176 "/lib"))))
1177 (native-search-paths
1178 (list
1179 (search-path-specification
1180 (variable "PURPLE_PLUGIN_PATH")
1181 (files
1182 (list
1183 (string-append "lib/purple-"
1184 (version-major version))
1185 "lib/pidgin")))))
1186 (home-page "https://www.pidgin.im/")
1187 (synopsis "Graphical multi-protocol instant messaging client")
1188 (description "Pidgin is a modular instant messaging client that supports
1189many popular chat protocols.")
1190 (license
1191 (list
1192 license:gpl2+ ; Most of the code
1193 license:lgpl2.1 ; GG protocol plugin (libpurple/protocols/gg/lib)
1194 license:lgpl2.0+ ; OSCAR protocol plugin (libpurple/protocols/oscar)
1195 ;; The following licenses cover the zephyr protocol plugin:
1196 (license:non-copyleft
1197 "file://libpurple/protocols/zephyr/mit-copyright.h"
1198 "See libpurple/protocols/zephyr/mit-copyright.h in the distribution.")
1199 (license:non-copyleft
1200 "file://libpurple/protocols/zephyr/mit-sipb-copyright.h"
1201 "See libpurple/protocols/zephyr/mit-sipb-copyright.h in the distribution.")))))
1202
1203(define-public pidgin-otr
1204 (package
1205 (name "pidgin-otr")
1206 (version "4.0.2")
1207 (source
1208 (origin
1209 (method url-fetch)
1210 (uri
1211 (string-append "https://otr.cypherpunks.ca/"
1212 name "-" version ".tar.gz"))
1213 (sha256
1214 (base32 "1i5s9rrgbyss9rszq6c6y53hwqyw1k86s40cpsfx5ccl9bprxdgl"))))
1215 (build-system gnu-build-system)
1216 (native-inputs
1217 (list gettext-minimal intltool pkg-config))
1218 (inputs
1219 (list glib
1220 gtk+-2
1221 libgcrypt
1222 libgpg-error
1223 libotr
1224 perl
1225 pidgin))
1226 (home-page "https://otr.cypherpunks.ca/")
1227 (synopsis "Off-the-Record Messaging plugin for Pidgin")
1228 (description "Pidgin-OTR is a plugin that adds support for OTR to the Pidgin
1229instant messaging client. OTR (Off-the-Record) Messaging allows you to have
1230private conversations over instant messaging by providing: (1) Encryption: No
1231one else can read your instant messages. (2) Authentication: You are assured
1232the correspondent is who you think it is. (3) Deniability: The messages you
1233send do not have digital signatures that are checkable by a third party. Anyone
1234can forge messages after a conversation to make them look like they came from
1235you. However, during a conversation, your correspondent is assured the messages
1236he sees are authentic and unmodified. (4) Perfect forward secrecy: If you lose
1237control of your private keys, no previous conversation is compromised.")
1238 (license license:gpl2+)))
1239
1240(define-public znc
1241 (package
1242 (name "znc")
1243 (version "1.10.1")
1244 (source (origin
1245 (method url-fetch)
1246 (uri (string-append "https://znc.in/releases/archive/znc-"
1247 version ".tar.gz"))
1248 (sha256
1249 (base32
1250 "0038qjkc1cxqz16nx9b37gjqzmnavv2kxdbjb4c0c9mz3n2pcvjf"))))
1251 (build-system cmake-build-system)
1252 (arguments
1253 `(#:tests? #f
1254 #:configure-flags
1255 (list "-DWANT_CYRUS=ON"
1256 "-DWANT_I18N=ON"
1257 "-DWANT_PERL=ON"
1258 "-DWANT_PYTHON=ON")
1259 #:phases
1260 (modify-phases %standard-phases
1261 (add-after 'unpack 'unpack-googletest
1262 ;; Copy the googletest sources to where the CMake build expects them.
1263 (lambda* (#:key inputs #:allow-other-keys)
1264 (let ((source (assoc-ref inputs "googletest-source"))
1265 (target "third_party/googletest"))
1266 (mkdir-p target)
1267 (copy-recursively source target)))))))
1268 (native-inputs
1269 `(("boost" ,boost)
1270 ("gettext" ,gettext-minimal)
1271 ("googletest-source" ,(package-source googletest))
1272 ("pkg-config" ,pkg-config)))
1273 (inputs
1274 ;; FIXME: Package cctz and remove the bundled copy from the source tarball.
1275 (list argon2
1276 cyrus-sasl
1277 icu4c
1278 openssl
1279 perl
1280 python
1281 zlib))
1282 (home-page "https://wiki.znc.in/ZNC")
1283 (synopsis "IRC network bouncer")
1284 (description "ZNC is an @dfn{IRC network bouncer} or @dfn{BNC}. It can
1285detach the client from the actual IRC server, and also from selected channels.
1286Multiple clients from different locations can connect to a single ZNC account
1287simultaneously and therefore appear under the same nickname on IRC.")
1288 (license license:asl2.0)))
1289
1290(define-public python-irc
1291 (package
1292 (name "python-irc")
1293 (version "20.5.0")
1294 (source
1295 (origin
1296 (method git-fetch)
1297 (uri (git-reference
1298 (url "https://github.com/jaraco/irc")
1299 (commit (string-append "v" version))))
1300 (file-name (git-file-name name version))
1301 (sha256
1302 (base32 "1x7n52sz5dq94mbg20qy1lf2ar3zbka6d3m55w3p1bj2j7fbhakq"))))
1303 (build-system pyproject-build-system)
1304 (arguments
1305 (list
1306 ;; Test tries to install project with Pip.
1307 #:test-flags #~(list "-k" "not project")
1308 #:phases
1309 #~(modify-phases %standard-phases
1310 (add-after 'unpack 'include-package-data
1311 (lambda _
1312 (substitute* "pyproject.toml"
1313 ((".*tool.setuptools_scm.*" all)
1314 (string-append all
1315 "\n[tool.setuptools.package-data]
1316irc = ['*.txt']"))))))))
1317 (native-inputs
1318 (list python-pygments
1319 python-pytest
1320 python-pytest-checkdocs
1321 python-pytest-enabler
1322 python-setuptools
1323 python-setuptools-scm))
1324 (propagated-inputs
1325 (list python-importlib-resources
1326 python-jaraco-collections
1327 python-jaraco-functools
1328 python-jaraco-logging
1329 python-jaraco-stream
1330 python-jaraco-text
1331 python-more-itertools
1332 python-pytz
1333 python-tempora))
1334 (home-page "https://github.com/jaraco/irc")
1335 (synopsis "@dfn{Internet Relay Chat} (IRC) protocol library for Python")
1336 (description
1337 "This library provides a low-level implementation of the IRC protocol for
1338Python. It provides an event-driven IRC client framework with support for the
1339basic IRC protocol, CTCP, and DCC connections.")
1340 (license license:expat)))
1341
1342(define-public python-slidge
1343 (package
1344 (name "python-slidge")
1345 (version "0.4.2") ; 0.5.0 drops support for python < 3.13
1346 (source
1347 (origin
1348 (method git-fetch)
1349 (uri (git-reference
1350 (url "https://codeberg.org/slidge/slidge")
1351 (commit (string-append "v" version))))
1352 (file-name (git-file-name name version))
1353 (sha256
1354 (base32 "0faiy4cm88gp9782xn1caxlbhlc6yqd8ic2391p0qgfkvl0b9k85"))))
1355 (build-system pyproject-build-system)
1356 (arguments
1357 ;; tests: 357 passed, 7 deselected
1358 (list #:test-flags
1359 #~(list "-k" (string-join
1360 ;; these tests fail because they test emoji behavior
1361 ;; that breaks down with the C locale
1362 (list "not test_reply_to_user"
1363 "test_avatar_forbidden_emoji_in_participant_nickname"
1364 "test_illegal_nickname"
1365 "test_illegal_nickname_quoted_fallback"
1366 "test_rename_from_contact_with_forbidden_char"
1367 "test_unassigned_code_points"
1368 "test_control_chars_and_unassigned_code_points")
1369 " and not "))))
1370 (propagated-inputs (list python-aiohttp
1371 python-alembic
1372 python-configargparse
1373 python-defusedxml
1374 python-magic
1375 python-pillow
1376 python-qrcode
1377 python-slixmpp
1378 python-sqlalchemy-2
1379 python-thumbhash
1380 python-typing-extensions))
1381 (native-inputs
1382 (list python-setuptools
1383 python-setuptools-scm
1384 python-pytest
1385 python-pytest-asyncio))
1386 (home-page "https://slidge.im/")
1387 (synopsis "Gateway library for XMPP to other networks")
1388 (description "Slidge is a software library for creating gateways from XMPP
1389to other networks, such as Telegram, Discord, or WhatsApp. It allows for
1390complete coverage of features in both networks, and makes it possible to bring
1391all your contacts under the single umbrella of XMPP.")
1392 (license license:agpl3+)))
1393
1394(define-public python-nbxmpp
1395 (package
1396 (name "python-nbxmpp")
1397 (version "7.4.0")
1398 (source
1399 (origin
1400 (method git-fetch)
1401 (uri (git-reference
1402 (url "https://dev.gajim.org/gajim/python-nbxmpp")
1403 (commit version)))
1404 (file-name (git-file-name name version))
1405 (sha256
1406 (base32 "0xn0qm0bmvvb3fg7dwkapnicwxp265qbd7rm1rawighv8la923ay"))))
1407 (build-system pyproject-build-system)
1408 (arguments (list #:test-backend #~'unittest))
1409 (propagated-inputs
1410 (list python-setuptools))
1411 (inputs
1412 (list glib
1413 glib-networking
1414 libsoup-minimal
1415 python-gssapi
1416 python-idna
1417 python-packaging
1418 python-precis-i18n
1419 python-pygobject))
1420 (synopsis "Non-blocking XMPP Module")
1421 (description "Python-nbxmpp is a Python library that provides a way for
1422Python applications to use the XMPP network. This library was initially a fork
1423of xmpppy.")
1424 (home-page "https://dev.gajim.org/gajim/python-nbxmpp")
1425 (license license:gpl3+)))
1426
1427(define-public gajim
1428 (package
1429 (name "gajim")
1430 (version "2.6.0")
1431 (source
1432 (origin
1433 (method url-fetch)
1434 (uri (string-append "https://gajim.org/downloads/"
1435 (version-major+minor version)
1436 "/gajim-" version ".tar.gz"))
1437 (sha256
1438 (base32 "0bnfjm7yn1r80nq8i0nwdfwijh7i9m7nijm631mfk9gzv8fpv32d"))
1439 (patches
1440 (search-patches "gajim-honour-GAJIM_PLUGIN_PATH.patch"))))
1441 (build-system pyproject-build-system)
1442 (arguments
1443 (list
1444 #:imported-modules
1445 `(,@%pyproject-build-system-modules
1446 (guix build glib-or-gtk-build-system))
1447 #:modules
1448 '((guix build pyproject-build-system)
1449 ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
1450 (guix build utils))
1451 #:phases
1452 #~(modify-phases %standard-phases
1453 (add-after 'unpack 'generate-gdk-pixbuf-loaders-cache-file
1454 (assoc-ref glib-or-gtk:%standard-phases
1455 'generate-gdk-pixbuf-loaders-cache-file))
1456 (add-before 'build 'build-metadata
1457 (lambda _
1458 (invoke "./make.py" "build")))
1459 (add-after 'install 'install-metadata
1460 (lambda _
1461 (invoke "./make.py" "install"
1462 (string-append "--prefix=" #$output))))
1463 (replace 'check
1464 (lambda* (#:key tests? #:allow-other-keys)
1465 (when tests?
1466 ;; Tests require a running X server.
1467 (system "Xvfb :1 +extension GLX &")
1468 (setenv "DISPLAY" ":1")
1469 ;; For missing '/etc/machine-id'.
1470 (setenv "DBUS_FATAL_WARNINGS" "0")
1471 (invoke "dbus-launch" "python" "-m" "unittest"
1472 "discover" "-s" "test"))))
1473 (add-after 'wrap 'glib-or-gtk-compile-schemas
1474 (assoc-ref glib-or-gtk:%standard-phases
1475 'glib-or-gtk-compile-schemas))
1476 (add-after 'wrap 'glib-or-gtk-wrap
1477 (assoc-ref glib-or-gtk:%standard-phases
1478 'glib-or-gtk-wrap))
1479 (add-after 'wrap 'wrap-env
1480 (lambda _
1481 (for-each
1482 (lambda (name)
1483 (let ((file (string-append #$output "/bin/" name))
1484 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH"))
1485 (gi-typelib-path (getenv "GI_TYPELIB_PATH"))
1486 (pixbuf-module-file (getenv "GDK_PIXBUF_MODULE_FILE")))
1487 (wrap-program file
1488 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
1489 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
1490 `("GDK_PIXBUF_MODULE_FILE" = (,pixbuf-module-file)))))
1491 '("gajim" "gajim-remote")))))))
1492 (native-search-paths
1493 (list
1494 (search-path-specification
1495 (variable "GAJIM_PLUGIN_PATH")
1496 (files (list "share/gajim/plugins")))
1497 ;; Gajim needs to use the propagated inputs of its plugins.
1498 (search-path-specification
1499 (variable "GUIX_PYTHONPATH")
1500 (files
1501 (list
1502 (string-append
1503 "lib/python"
1504 ;; FIXME: Cannot use this expression as it would
1505 ;; introduce a circular dependency at the top level.
1506 ;; (version-major+minor (package-version python))
1507 "3.12"
1508 "/site-packages"))))))
1509 (native-inputs
1510 (list gettext-minimal
1511 gobject-introspection
1512 python-pypa-build
1513 python-setuptools
1514 xorg-server-for-tests))
1515 (inputs
1516 (list bash-minimal
1517 avahi
1518 dbus
1519 geoclue
1520 glib
1521 glib-networking
1522 gsettings-desktop-schemas
1523 libspelling
1524 libadwaita
1525 gstreamer
1526 gst-plugins-base
1527 gst-plugins-good
1528 gtk
1529 gtksourceview
1530 gupnp-igd
1531 libnice
1532 libomemo
1533 libsecret
1534 libsoup
1535 libxscrnsaver
1536 network-manager
1537 python-cryptography
1538 python-css-parser
1539 python-dbus
1540 python-emoji
1541 python-gssapi
1542 python-httpx
1543 python-idna
1544 python-keyring
1545 python-nbxmpp
1546 python-omemo-dr
1547 python-packaging
1548 python-pillow
1549 python-precis-i18n
1550 python-pycairo
1551 python-pygobject
1552 python-pyopenssl
1553 python-pysequoia
1554 python-qrcode
1555 python-sqlalchemy-2
1556 python-truststore))
1557 (propagated-inputs
1558 (list dconf))
1559 (synopsis "Fully-featured XMPP client")
1560 (description "Gajim aims to be an easy to use and fully-featured XMPP chat
1561client. It is extensible via plugins, supports end-to-end encryption (OMEMO
1562and OpenPGP) and available in 29 languages.")
1563 (home-page "https://gajim.org/")
1564 (license license:gpl3)))
1565
1566(define-public gajim-openpgp
1567 (package
1568 (name "gajim-openpgp")
1569 (version "1.6.1")
1570 (source
1571 (origin
1572 (method url-fetch/zipbomb)
1573 (uri
1574 (string-append
1575 "https://ftp.gajim.org/plugins/master/openpgp/openpgp_"
1576 version ".zip"))
1577 (sha256
1578 (base32 "0m1g5wajpc3kfz5jv8y3i9xy1nqhq15ripv49lgsq7j1f0a3w3wh"))))
1579 (build-system trivial-build-system)
1580 (arguments
1581 `(#:modules ((guix build utils))
1582 #:builder
1583 (begin
1584 (use-modules (guix build utils))
1585 (let* ((out (assoc-ref %outputs "out"))
1586 (share (in-vicinity out "share/gajim/plugins/openpgp"))
1587 (source (assoc-ref %build-inputs "source")))
1588 (mkdir-p share)
1589 (copy-recursively source share)
1590 #t))))
1591 (propagated-inputs
1592 (list python-cryptography python-gnupg python-gpg))
1593 (synopsis "Gajim OpenPGP plugin")
1594 (description "Gajim-OpenPGP is a plugin that adds support for the OpenPGP
1595Encryption to Gajim.")
1596 (home-page "https://dev.gajim.org/gajim/gajim-plugins/-/wikis/OpenPGPplugin")
1597 (license license:gpl3+)))
1598
1599(define-public dino
1600 (package
1601 (name "dino")
1602 (version "0.5.1")
1603 (source
1604 (origin
1605 (method url-fetch)
1606 (uri
1607 (string-append "https://github.com/dino/dino/releases/download/v"
1608 version "/dino-" version ".tar.gz"))
1609 (sha256
1610 (base32 "0rfn7rmib2jin83j3rx7ssh63frcmgf8n61fnvaxmk8xapimw9hb"))))
1611 (build-system meson-build-system)
1612 (outputs '("out" "debug"))
1613 (arguments
1614 (list #:glib-or-gtk? #t
1615 #:phases
1616 #~(modify-phases %standard-phases
1617 (add-after 'unpack 'hardcode-version
1618 (lambda _
1619 ;; XXX: the meson.build code to locate the version script
1620 ;; is wrong and raises an error.
1621 (substitute* "libdino/src/version.vala.in"
1622 (("%VERSION%") #$version))))
1623 (add-after 'install 'wrap
1624 (lambda* (#:key outputs #:allow-other-keys)
1625 (let* ((out (assoc-ref outputs "out"))
1626 (dino (string-append out "/bin/dino"))
1627 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
1628 (wrap-program dino
1629 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
1630 `("GDK_PIXBUF_MODULE_FILE" =
1631 (,(getenv "GDK_PIXBUF_MODULE_FILE"))))))))))
1632 (native-inputs
1633 (list gettext-minimal
1634 `(,glib "bin")
1635 gobject-introspection
1636 `(,gtk "bin")
1637 pkg-config
1638 ;; python ; for version.py
1639 vala))
1640 (inputs
1641 (list adwaita-icon-theme
1642 at-spi2-core
1643 bash-minimal
1644 cairo
1645 (librsvg-for-system)
1646 glib
1647 glib-networking
1648 gpgme
1649 gsettings-desktop-schemas
1650 gspell ;for spell-check support
1651 gstreamer ;for A/V support
1652 gst-plugins-base
1653 gst-plugins-good
1654 gtk
1655 icu4c ;for emoji support
1656 libadwaita
1657 libcanberra ;for sound-notification support
1658 libgcrypt
1659 libgee
1660 libnice
1661 libomemo-c
1662 libsoup
1663 libsrtp ;for calls support
1664 pango ;gtk4 wants pango 1.50+
1665 qrencode
1666 sqlite
1667 webrtc-audio-processing)) ;for A/V support
1668 (synopsis "Graphical Jabber/XMPP Client using GTK+/Vala")
1669 (description "Dino is a chat client for the desktop. It focuses on providing
1670a minimal yet reliable Jabber/XMPP experience and having encryption enabled by
1671default.")
1672 (home-page "https://dino.im")
1673 (license license:gpl3+)))
1674
1675(define-public prosody
1676 (package
1677 (name "prosody")
1678 (version "13.0.6")
1679 (source (origin
1680 (method url-fetch)
1681 (uri (string-append "https://prosody.im/downloads/source/"
1682 "prosody-" version ".tar.gz"))
1683 (sha256
1684 (base32
1685 "03q5jdywcjsjzkfgv4m3d57crv8wdarkyzdh0i5azhv2ynf6ysgc"))))
1686 (build-system gnu-build-system)
1687 (arguments
1688 (list
1689 #:tests? #f ;tests require "busted"
1690 #:configure-flags ''("--no-example-certs")
1691 #:phases
1692 #~(modify-phases %standard-phases
1693 (replace 'configure
1694 ;; configure fails if it is followed by SHELL, CONFIG_SHELL,
1695 ;; --enable-fast-install, and --build
1696 (lambda* (#:key configure-flags #:allow-other-keys)
1697 (apply invoke "./configure" (string-append "--prefix=" #$output)
1698 configure-flags)))
1699 (add-after 'unpack 'fix-makefile
1700 (lambda _
1701 (substitute* "GNUmakefile"
1702 ;; prosodyctl needs to read the configuration file.
1703 (("^INSTALLEDCONFIG =.*") "INSTALLEDCONFIG = /etc/prosody\n")
1704 ;; prosodyctl needs a place to put auto-generated certificates.
1705 (("^INSTALLEDDATA =.*") "INSTALLEDDATA = /var/lib/prosody\n"))))
1706 (add-after 'unpack 'invoke-prosody-wrapper
1707 (lambda _
1708 ;; Invoke the prosody wrapper script instead of invoking lua on
1709 ;; the actual executable.
1710 (substitute* "util/prosodyctl.lua"
1711 (("(os.execute\\()lua .*(/prosody -D\"\\);)" all left right)
1712 (simple-format #f "~a\"~a/bin~a" left #$output right)))))
1713 (add-after 'install 'wrap-programs
1714 (lambda _
1715 ;; Make sure all executables in "bin" find the required Lua
1716 ;; modules at runtime.
1717 (let* ((bin (string-append #$output "/bin/"))
1718 (path (map (lambda (dir)
1719 (string-append dir "/bin"))
1720 (list #$(this-package-input "openssl")
1721 #$(this-package-input "coreutils")))))
1722 (for-each (lambda (file)
1723 (wrap-program file
1724 `("GUIX_LUA_PATH" ";" prefix (,(getenv "GUIX_LUA_PATH")))
1725 `("GUIX_LUA_CPATH" ";" prefix (,(getenv "GUIX_LUA_CPATH")))
1726 `("PATH" ":" prefix ,path)))
1727 (find-files bin ".*"))))))))
1728 (inputs
1729 (list bash-minimal
1730 coreutils
1731 icu4c
1732 libidn
1733 openssl
1734 lua-5.4
1735 ;; required
1736 lua5.4-socket
1737 lua5.4-sec
1738 lua5.4-expat
1739 lua5.4-filesystem
1740 ;; optional
1741 lua5.4-unbound))
1742 (home-page "https://prosody.im/")
1743 (synopsis "Jabber (XMPP) server")
1744 (description "Prosody is a modern XMPP communication server. It aims to
1745be easy to set up and configure, and efficient with system resources.
1746Additionally, for developers it aims to be easy to extend and give a flexible
1747system on which to rapidly develop added functionality, or prototype new
1748protocols.")
1749 (license license:x11)))
1750
1751(define (prosody-module module-name)
1752 (let ((changeset "15a7749c7acb")
1753 (revision "4")
1754 (package-name (string-append
1755 "prosody-"
1756 (string-replace-substring
1757 (if (string-prefix? "mod_" module-name)
1758 (substring module-name 4)
1759 module-name)
1760 "_" "-"))))
1761 (package
1762 (name package-name)
1763 (version (string-append "0-" revision "." (string-take changeset 7)))
1764 (source (origin
1765 (method hg-fetch)
1766 (uri (hg-reference
1767 (url "https://hg.prosody.im/prosody-modules/")
1768 (changeset changeset)))
1769 (file-name (string-append name "-" version "-checkout"))
1770 (sha256
1771 (base32
1772 "06wqazdb5zn0aw8g006grv9pl63wryjsdqg145qhqxqclrblzy26"))))
1773 (build-system copy-build-system)
1774 (arguments
1775 `(#:install-plan '((,(string-append module-name "/") "."))))
1776 (home-page (string-append "https://modules.prosody.im/"
1777 module-name ".html"))
1778 (synopsis #f)
1779 (description #f)
1780 (license (package-license prosody)))))
1781
1782(define-public prosody-cloud-notify
1783 (package
1784 (inherit (prosody-module "mod_cloud_notify"))
1785 (synopsis "XEP-0357: Push Notifications")
1786 (description "This module implements XEP-0357: Push Notifications.
1787
1788Some platforms, notably Apple’s iOS and many versions of Android, impose
1789limits that prevent applications from running or accessing the network in the
1790background. This makes it difficult or impossible for an XMPP application to
1791remain reliably connected to a server to receive messages.
1792
1793In order for messaging and other apps to receive notifications, the OS vendors
1794run proprietary servers that their OS maintains a permanent connection to in
1795the background. Then they provide APIs to application developers that allow
1796sending notifications to specific devices via those servers.
1797
1798When you connect to your server with a client that requires push
1799notifications, it will use this module to set up a “push registration”. When
1800you receive a message but your device is not connected to the server, this
1801module will generate a notification and send it to the push gateway operated
1802by your application’s developers). Their gateway will then connect to your
1803device’s OS vendor and ask them to forward the notification to your device.
1804When your device receives the notification, it will display it or wake up the
1805app so it can connect to XMPP and receive any pending messages.")))
1806
1807(define-public prosody-cloud-notify-encrypted
1808 (package
1809 (inherit (prosody-module "mod_cloud_notify_encrypted"))
1810 (synopsis "Custom extension to XEP-0357: Push Notifications")
1811 (description "This module implements support for a Encrypted Push
1812Notifications, a custom extension to XEP-0357: Push Notifications.")))
1813
1814(define-public prosody-cloud-notify-filters
1815 (package
1816 (inherit (prosody-module "mod_cloud_notify_filters"))
1817 (synopsis "Filters for XEP-0357: Push Notifications")
1818 (description "This module implements support for a group of push
1819notification extensions by the Tigase team that allow a client to specify
1820filters to be applied to push notifications. It is a custom extension to
1821XEP-0357: Push Notifications.")))
1822
1823(define-public prosody-cloud-notify-priority-tag
1824 (package
1825 (inherit (prosody-module "mod_cloud_notify_priority_tag"))
1826 (synopsis "Tigase priorities for XEP-0357: Push Notifications")
1827 (description "This module implements support for a Tigase XMPP extension,
1828Priority of notifications. It is a custom extension to XEP-0357: Push
1829Notifications.")))
1830
1831(define-public prosody-http-libjs
1832 (package
1833 (inherit (prosody-module "mod_http_libjs"))
1834 (synopsis "Serve common static CSS and Javascript libraries from the
1835filesystem.")
1836 (description "This module serves common static CSS and Javascript
1837libraries from the filesystem, allowing other HTTP modules to easily reference
1838them.
1839
1840You can override the filesystem location using the @code{libjs_path}
1841configuration option. The default is @code{/usr/share/javascript}.")))
1842
1843(define-public prosody-invites-api
1844 (package
1845 (inherit (prosody-module "mod_invites_api"))
1846 (synopsis "Authenticated HTTP API to create invites using mod_invites.")
1847 (description "mod_invites_api provides an authenticated HTTP API to create
1848invites using mod_invites.
1849
1850You can use the command-line to create and manage API keys.")))
1851
1852(define-public prosody-invites-groups
1853 (package
1854 (inherit (prosody-module "mod_invites_groups"))
1855 (synopsis "Group handling for mod_invites_register")
1856 (description "This package provides group handling for
1857mod_invites_register")))
1858
1859(define-public prosody-invites-page
1860 (package
1861 (inherit (prosody-module "mod_invites_page"))
1862 (synopsis "Generate unique links per invitation.")
1863 (description "This package provides a unique web page for each generated
1864invitation. Without this module, Prosody will only be able to generate invite
1865links as @code{xmpp:} URIs (they look something like
1866@code{xmpp:example.com?register;preauth=29Xbxr91}). URIs will only work if the
1867invited user already has an XMPP client installed. This is usually not the
1868case.
1869
1870This module transforms the URI into a friendly web page that can be shared via
1871any method (email, SMS, etc.), and opened in any browser. The page explains
1872the invitation and guides the user to set up their account using one of a
1873configurable list of XMPP clients (to configure the list, see
1874mod_register_apps documentation).")))
1875
1876(define-public prosody-invites-register-web
1877 (package
1878 (inherit (prosody-module "mod_invites_register_web"))
1879 (synopsis "Web-based registration form that validates invite tokens")
1880 (description "This package implements a web-based registration form that
1881validates invite tokens. It also supports guiding the user through client
1882download and configuration via @code{mod_register_apps}.")))
1883
1884(define-public prosody-http-upload
1885 (package
1886 (inherit (prosody-module "mod_http_upload"))
1887 (synopsis "XEP-0363: Allow clients to upload files over HTTP")
1888 (description "This module implements XEP-0363: it allows clients to
1889upload files over HTTP.")))
1890
1891(define-public prosody-muc-offline-delivery
1892 (package
1893 (inherit (prosody-module "mod_muc_offline_delivery"))
1894 (synopsis "Deliver MUC messages to users who are not in the room")
1895 (description "This module implements support for sending messages in a MUC
1896to affiliated users who are not in the room. This is a custom extension by
1897Tigase to allow push notifications from MUCs to users who are not currently
1898connected.")))
1899
1900(define-public prosody-password-policy
1901 (package
1902 (inherit (prosody-module "mod_password_policy"))
1903 (synopsis "Password policy enforcement")
1904 (description "This package provides a password policy enforcement")))
1905
1906(define-public prosody-register-apps
1907 (package
1908 (inherit (prosody-module "mod_register_apps"))
1909 (synopsis "Configure a list of XMPP client apps recommended by the current
1910server")
1911 (description "This module provides a way to configure a list of XMPP
1912client apps recommended by the current server. This list is used by other
1913modules such as @code{mod_invites_page} and @code{mod_invites_register_web}.
1914
1915It also contains the logos of a number of popular XMPP clients, and serves
1916them over HTTP for other modules to reference when serving web pages.")))
1917
1918(define-public prosody-rest
1919 (package
1920 (inherit (prosody-module "mod_rest"))
1921 (synopsis "REST API support")
1922 (description "This module adds an API for sending and receiving XMPP
1923stanzas.")))
1924
1925(define-public prosody-smacks
1926 (package
1927 (inherit (prosody-module "mod_smacks"))
1928 (synopsis "XEP-0198: Reliability and fast reconnects for XMPP")
1929 (description "This module implements XEP-0198: when supported by both
1930the client and server, it can allow clients to resume a disconnected session,
1931and prevent message loss.")))
1932
1933(define-public prosody-vcard-muc
1934 (package
1935 (inherit (prosody-module "mod_vcard_muc"))
1936 (synopsis "Support for MUC vCards and avatars")
1937 (description "This module adds the ability to set vCard for MUC rooms. One
1938of the most common use cases is to define avatars for MUC rooms.")))
1939
1940(define-public cmp
1941 (package
1942 (name "cmp")
1943 (properties '((revision . "0")
1944 ;; XXX: the build fails with the version 19. With this more
1945 ;; recent commit picked from the master branch the build
1946 ;; succeeds.
1947 (commit . "52bfcfa17d2eb4322da2037ad625f5575129cece")))
1948 (version (git-version "19"
1949 (assoc-ref properties 'revision)
1950 (assoc-ref properties 'commit)))
1951 (source
1952 (origin
1953 (method git-fetch)
1954 (uri (git-reference
1955 (url "https://github.com/TokTok/cmp")
1956 (commit (assoc-ref properties 'commit))))
1957 (file-name (git-file-name name version))
1958 (sha256
1959 (base32
1960 "15bq8dmk6zk5w5fzrziq2pi8f6iwpiy75raslnrw6mxpxlb4hdbb"))))
1961 (build-system gnu-build-system)
1962 (arguments
1963 (list
1964 #:make-flags
1965 #~(list (string-append "CC=" #$(cc-for-target))
1966 (string-append "CFLAGS=" "-fPIC -O3"))
1967 #:phases
1968 #~(modify-phases %standard-phases
1969 (delete 'configure)
1970 (replace 'build
1971 (lambda* (#:key (make-flags '()) #:allow-other-keys)
1972 (apply invoke "make" "cmp.o" make-flags)
1973 (apply invoke "make" "cmpunittest" make-flags)
1974 (invoke #$(cc-for-target) "-fPIC" "-O3"
1975 "-o" "libcmp.so" "--coverage" "-lgcov"
1976 "-shared" "cmp.o")))
1977 (replace 'check
1978 (lambda* (#:key tests? #:allow-other-keys)
1979 (when tests?
1980 (invoke "./cmpunittest"))))
1981 (replace 'install
1982 (lambda _
1983 (install-file "libcmp.so" (string-append #$output "/lib"))
1984 (install-file "cmp.h" (string-append #$output "/include")))))))
1985 (native-inputs
1986 (list cmocka))
1987 (home-page "https://github.com/TokTok/cmp")
1988 (synopsis "C implementation of the MessagePack serialization format")
1989 (description
1990 "CMP is a C implementation of the @uref{https://msgpack.org/, MessagePack}
1991serialization format.")
1992 (license license:expat)))
1993
1994;; Some tox clients move to c-toxcore, which seems to be where all the
1995;; recent development happens. It is run by the same developers as toxcore,
1996;; forked into a group namespace.
1997(define-public c-toxcore
1998 (package
1999 (name "c-toxcore")
2000 (version "0.2.22")
2001 (source
2002 (origin
2003 (method git-fetch)
2004 (uri (git-reference
2005 (url "https://github.com/TokTok/c-toxcore")
2006 (commit (string-append "v" version))))
2007 (file-name (git-file-name name version))
2008 (sha256
2009 (base32
2010 "1awx3q21ghln9fr605ycirgipsr6p5573xbqqkmhkyrpj2zfpmw4"))))
2011 (arguments
2012 (list
2013 ;; FIXME: Expected family TOX_AF_INET6 (10), got 2.
2014 #:test-exclude "network"
2015 #:configure-flags
2016 #~(list "-DENABLE_STATIC=false"
2017 "-DAUTOTEST=ON")
2018 #:phases
2019 #~(modify-phases %standard-phases
2020 (add-after 'unpack 'unbundle-cmp
2021 (lambda _
2022 (rmdir "third_party/cmp")
2023 (substitute* "cmake/Dependencies.cmake"
2024 (("^find_library\\(NSL_LIBRARIES" all)
2025 (string-append "find_library(CMP_LIB cmp REQUIRED)\n\n"
2026 all)))
2027 (substitute* "CMakeLists.txt"
2028 (("^if\\(TARGET libsodium" all)
2029 (string-append "set(toxcore_LINK_LIBRARIES"
2030 " ${toxcore_LINK_LIBRARIES} ${CMP_LIB})\n"
2031 all))
2032 ((".*third_party\\/cmp.*") ""))
2033 (with-directory-excursion "toxcore"
2034 (substitute* '("bin_pack.c" "bin_unpack.c")
2035 (("#include \"\\.\\.\\/third_party\\/cmp\\/cmp\\.h\"")
2036 "#include <cmp.h>"))))))))
2037 (build-system cmake-build-system)
2038 (native-inputs
2039 (list pkg-config))
2040 (inputs
2041 (list cmp))
2042 (propagated-inputs
2043 (list libsodium opus libvpx))
2044 (home-page "https://tox.chat")
2045 (synopsis "Library for the Tox encrypted messenger protocol")
2046 (description
2047 "Official fork of the C library implementation of the Tox encrypted
2048messenger protocol.")
2049 (license license:gpl3+)))
2050
2051(define-public utox
2052 (package
2053 (name "utox")
2054 (version "0.18.1")
2055 (source
2056 (origin
2057 (method git-fetch)
2058 (uri (git-reference
2059 (url "https://github.com/uTox/uTox")
2060 (commit (string-append "v" version))))
2061 (file-name (string-append name "-" version "-checkout"))
2062 (sha256
2063 (base32
2064 "0wknlpyqc3hkkrhn6shgg67ba6zbd8n1biy2kvy1awqzwyfmc46z"))))
2065 (build-system cmake-build-system)
2066 (arguments
2067 (list
2068 #:configure-flags
2069 #~(list "-DENABLE_TESTS=on")
2070 #:phases
2071 #~(modify-phases %standard-phases
2072 (add-after 'unpack 'patch-cmake
2073 (lambda _
2074 (substitute* "third_party/CMakeLists.txt"
2075 (("add_subdirectory\\(minini\\)")
2076 "find_library(MININI_LIB minIni REQUIRED)")
2077 (("add_subdirectory\\(qrcodegen\\)")
2078 "find_package(qrcodegen REQUIRED)"))
2079 (substitute* "CMakeLists.txt"
2080 (("minini") "minIni"))))
2081 (add-after 'patch-cmake 'patch-includes
2082 (lambda _
2083 (with-directory-excursion "third_party/stb"
2084 (substitute* '("stb.c" "stb.h")
2085 (("\"stb\\/(stb.*\\.h)\"" _ keep)
2086 (string-append "<" keep ">"))))
2087 (with-directory-excursion "src"
2088 (substitute* "qr.c"
2089 (("#include <qrcodegen\\.h>")
2090 "#include <qrcodegen/qrcodegen.h>"))
2091 (substitute* "settings.c"
2092 (("#include <minIni\\.h>")
2093 "#include <minIni/minIni.h>")))))
2094 (add-before 'build 'patch-absolute-filename-libgtk-3
2095 (lambda* (#:key inputs #:allow-other-keys)
2096 (substitute* "../source/src/xlib/gtk.c"
2097 (("libgtk-3.so")
2098 (search-input-file inputs "/lib/libgtk-3.so")))))
2099 (add-after 'install 'wrap-program
2100 (lambda _
2101 (wrap-program (string-append #$output "/bin/utox")
2102 ;; For GtkFileChooserDialog.
2103 `("GSETTINGS_SCHEMA_DIR" =
2104 (,(string-append #$(this-package-input "gtk+")
2105 "/share/glib-2.0/schemas")))))))))
2106 (inputs
2107 (list bash-minimal ;for wrap-program
2108 dbus
2109 filteraudio
2110 fontconfig
2111 freetype
2112 c-toxcore
2113 gtk+
2114 libvpx
2115 libx11
2116 libxext
2117 libxrender
2118 minini
2119 openal
2120 qrcodegen-cpp
2121 stb-image
2122 stb-image-write
2123 v4l-utils))
2124 (native-inputs
2125 (list check pkg-config))
2126 (synopsis "Lightweight Tox client")
2127 (description
2128 "uTox is a lightweight Tox client. Tox is a distributed and secure
2129instant messenger with audio and video chat capabilities.")
2130 (home-page "https://github.com/uTox/uTox")
2131 (license license:gpl3)))
2132
2133(define-public qtox
2134 (package
2135 (name "qtox")
2136 (version "1.18.5")
2137 (source (origin
2138 (method git-fetch)
2139 (uri (git-reference
2140 (url "https://github.com/TokTok/qTox")
2141 (commit (string-append "v" version))))
2142 (file-name (git-file-name name version))
2143 (sha256
2144 (base32
2145 "0rw2r219vxvdpd33gp247321ni40hl96hvm9f39s1wdzy9rcgs03"))))
2146 (build-system qt-build-system)
2147 (arguments
2148 (list #:qtbase qtbase
2149 #:phases
2150 #~(modify-phases %standard-phases
2151 (add-after 'unpack 'disable-network-tests
2152 (lambda _
2153 ;; This test requires network access.
2154 (substitute* "cmake/Testing.cmake"
2155 (("auto_test\\(net bsu") "# auto_test(net bsu")))))))
2156 (native-inputs
2157 (list pkg-config qttools))
2158 (inputs
2159 (list bash-minimal
2160 ffmpeg
2161 filteraudio
2162 libsodium
2163 c-toxcore
2164 libvpx
2165 libxscrnsaver
2166 libx11
2167 libexif
2168 sqlite
2169 openal
2170 qrencode
2171 qtsvg
2172 sonnet
2173 sqlcipher))
2174 (home-page "https://qtox.github.io/")
2175 (synopsis "Tox chat client using Qt")
2176 (description "qTox is a Tox client that follows the Tox design
2177guidelines. It provides an easy to use application that allows you to
2178connect with friends and family without anyone else listening in.")
2179 (license license:gpl3+)))
2180
2181(define-public ytalk
2182 (package
2183 (name "ytalk")
2184 (version "3.3.0")
2185 (source
2186 (origin
2187 (method url-fetch)
2188 (uri (string-append "ftp://ftp.ourproject.org/pub/ytalk/ytalk-"
2189 version ".tar.gz"))
2190 (sha256
2191 (base32
2192 "1d3jhnj8rgzxyxjwfa22vh45qwzjvxw1qh8fz6b7nfkj3zvk9jvf"))))
2193 (build-system gnu-build-system)
2194 (inputs
2195 (list ncurses))
2196 (home-page "https://ytalk.ourproject.org")
2197 (synopsis "Multi-user chat program")
2198 (description "Ytalk is a replacement for the BSD talk program. Its main
2199advantage is the ability to communicate with any arbitrary number of users at
2200once. It supports both talk protocols (\"talk\" and \"ntalk\") and can communicate
2201with several different talk daemons at the same time.")
2202 (license license:gpl2+)))
2203
2204(define-public gloox
2205 (package
2206 (name "gloox")
2207 (version "1.0.28")
2208 (source
2209 (origin
2210 (method url-fetch)
2211 (uri (string-append "https://camaya.net/download/gloox-"
2212 version ".tar.bz2"))
2213 (sha256
2214 (base32 "0v4nqmf22h57jxpihbpxlhdrrvz81nn9jszgl580pply4hnd26sr"))))
2215 (build-system gnu-build-system)
2216 (inputs
2217 (list libidn gnutls zlib))
2218 (native-inputs
2219 (list pkg-config))
2220 (synopsis "Portable high-level Jabber/XMPP library for C++")
2221 (description
2222 "gloox is a full-featured Jabber/XMPP client library,
2223written in ANSI C++. It makes writing spec-compliant clients easy
2224and allows for hassle-free integration of Jabber/XMPP functionality
2225into existing applications.")
2226 (home-page "https://camaya.net/gloox")
2227 (license license:gpl3)))
2228
2229(define-public perl-net-psyc
2230 (package
2231 (name "perl-net-psyc")
2232 (version "1.3")
2233 (source
2234 (origin
2235 (method url-fetch)
2236 (uri (string-append "https://perl.psyc.eu/"
2237 "perlpsyc-" version ".zip"))
2238 (file-name (string-append name "-" version ".zip"))
2239 (sha256
2240 (base32
2241 "0vsjclglkwgbyd9m5ad642fyysxw2x725nhq4r2m9pvqaq6s5yf2"))))
2242 (build-system perl-build-system)
2243 (native-inputs
2244 (list unzip))
2245 (inputs
2246 (list bash-minimal perl-curses perl-io-socket-ssl))
2247 (arguments
2248 `(#:phases
2249 (modify-phases %standard-phases
2250 (delete 'configure) ; No configure script
2251 ;; There is a Makefile, but it does not install everything
2252 ;; (leaves out psycion) and says
2253 ;; "# Just to give you a rough idea". XXX: Fix it upstream.
2254 (replace 'build
2255 (lambda _ (invoke "make" "manuals")))
2256 (replace 'install
2257 (lambda* (#:key outputs #:allow-other-keys)
2258 (let* ((out (assoc-ref outputs "out"))
2259 (doc (string-append out "/share/doc/perl-net-psyc"))
2260 (man1 (string-append out "/share/man/man1"))
2261 (man3 (string-append out "/share/man/man3"))
2262 (bin (string-append out "/bin"))
2263 (libpsyc (string-append out "/lib/psyc/ion"))
2264 (libperl (string-append out "/lib/perl5/site_perl/"
2265 ,(package-version perl))))
2266
2267 (copy-recursively "lib/perl5" libperl)
2268 (copy-recursively "lib/psycion" libpsyc)
2269 (copy-recursively "bin" bin)
2270 (install-file "cgi/psycpager" (string-append doc "/cgi"))
2271 (copy-recursively "contrib" (string-append doc "/contrib"))
2272 (copy-recursively "hooks" (string-append doc "/hooks"))
2273 (copy-recursively "sdj" (string-append doc "/sdj"))
2274 (install-file "README.txt" doc)
2275 (install-file "TODO.txt" doc)
2276 (copy-recursively "share/man/man1" man1)
2277 (copy-recursively "share/man/man3" man3))))
2278 (add-after 'install 'wrap-programs
2279 (lambda* (#:key outputs #:allow-other-keys)
2280 ;; Make sure all executables in "bin" find the Perl modules
2281 ;; provided by this package at runtime.
2282 (let* ((out (assoc-ref outputs "out"))
2283 (bin (string-append out "/bin/"))
2284 (path (getenv "PERL5LIB")))
2285 (for-each (lambda (file)
2286 (wrap-program file
2287 `("PERL5LIB" ":" prefix (,path))))
2288 (find-files bin "\\.*$"))))))))
2289 (description
2290 "@code{Net::PSYC} with support for TCP, UDP, Event.pm, @code{IO::Select} and
2291Gtk2 event loops. This package includes 12 applications and additional scripts:
2292psycion (a @uref{https://about.psyc.eu,PSYC} chat client), remotor (a control console
2293for @uref{https://torproject.org,tor} router) and many more.")
2294 (synopsis "Perl implementation of PSYC protocol")
2295 (home-page "https://perl.psyc.eu")
2296 (license (list license:gpl2
2297 license:perl-license
2298 ;; contrib/irssi-psyc.pl:
2299 license:public-domain
2300 ;; bin/psycplay states AGPL with no version:
2301 license:agpl3+))))
2302
2303(define-public loudmouth
2304 (package
2305 (name "loudmouth")
2306 (version "1.5.4")
2307 (source
2308 (origin
2309 (method url-fetch)
2310 (uri (string-append "https://mcabber.com/files/loudmouth/"
2311 name "-" version ".tar.bz2"))
2312 (sha256
2313 (base32
2314 "03adv5xc84l9brcx0dpyqyffmsclans8yfrpnd357k6x3wfckjri"))))
2315 (build-system gnu-build-system)
2316 (outputs '("out" "doc"))
2317 (arguments
2318 `(#:configure-flags
2319 (list
2320 "--disable-static"
2321 "--enable-gtk-doc"
2322 (string-append "--with-html-dir="
2323 (assoc-ref %outputs "doc")
2324 "/share/gtk-doc/html"))
2325 #:make-flags
2326 (list
2327 "CFLAGS=-Wno-error=all")))
2328 (inputs
2329 `(("glib" ,glib)
2330 ("gnutls" ,gnutls)
2331 ("krb5" ,mit-krb5)
2332 ("libidn" ,libidn)))
2333 (native-inputs
2334 (list pkg-config check
2335 `(,glib "bin") ; gtester
2336 gtk-doc/stable))
2337 (home-page "https://mcabber.com/")
2338 (description
2339 "Loudmouth is a lightweight and easy-to-use C library for programming
2340with the XMPP (formerly known as Jabber) protocol. It is designed to be
2341easy to get started with and yet extensible to let you do anything the XMPP
2342protocol allows.")
2343 (synopsis "Asynchronous XMPP library")
2344 ;; The files have LGPL2.0+ headers, but COPYING specifies LGPL2.1.
2345 (license license:lgpl2.0+)))
2346
2347(define-public mcabber
2348 (package
2349 (name "mcabber")
2350 (version "1.1.2")
2351 (source
2352 (origin
2353 (method url-fetch)
2354 (uri (string-append "https://mcabber.com/files/"
2355 name "-" version ".tar.bz2"))
2356 (sha256
2357 (base32 "0q1i5acyghsmzas88qswvki8kkk2nfpr8zapgnxbcd3lwcxl38f4"))))
2358 (build-system gnu-build-system)
2359 (arguments
2360 `(#:configure-flags
2361 (list
2362 "--disable-static"
2363 "--enable-otr"
2364 "--enable-enchant"
2365 "--enable-aspell")))
2366 (inputs
2367 (list gpgme
2368 libotr
2369 aspell
2370 enchant-1.6
2371 libidn
2372 glib
2373 ncurses
2374 loudmouth))
2375 (native-inputs
2376 `(("perl" ,perl)
2377 ("pkg-config" ,pkg-config)
2378 ("python" ,python-wrapper)))
2379 (home-page "https://mcabber.com")
2380 (description
2381 "Mcabber is a small XMPP (Jabber) console client, which includes features
2382such as SASL and TLS support, @dfn{Multi-User Chat} (MUC) support, logging,
2383command-completion, OpenPGP encryption, @dfn{Off-the-Record Messaging} (OTR)
2384support, and more.")
2385 (synopsis "Small XMPP console client")
2386 (license license:gpl2+)))
2387
2388(define-public freetalk
2389 (package
2390 (name "freetalk")
2391 (version "4.2")
2392 (source (origin
2393 (method url-fetch)
2394 (uri (string-append "mirror://gnu/freetalk/freetalk-"
2395 version ".tar.gz"))
2396 (sha256
2397 (base32
2398 "105mw7pg2mcp85r82cs4rv77nwvbw8025047364jzbq6lwllynxv"))))
2399 (build-system gnu-build-system)
2400 (arguments
2401 (list #:phases
2402 #~(modify-phases %standard-phases
2403 (add-after 'install 'wrap-program
2404 (lambda* (#:key inputs outputs #:allow-other-keys)
2405 (let ((out (assoc-ref outputs "out")))
2406 (wrap-program (string-append out "/bin/freetalk")
2407 `("PATH" ":" suffix
2408 ,(map (lambda (command)
2409 (dirname
2410 (search-input-file
2411 inputs (string-append "bin/" command))))
2412 ;; This list is not exhaustive: we assume that,
2413 ;; e.g., cat is packaged with other coreutils.
2414 (list "bash" ; src/{commands,util}.c et al
2415 "cat" ; extensions/first-time-run.sh
2416 "less")))))))))) ; extensions/history.scm.
2417 (native-inputs
2418 (list autoconf automake pkg-config texinfo))
2419 (inputs
2420 (list bash
2421 glib
2422 guile-3.0
2423 less
2424 loudmouth
2425 readline))
2426 (synopsis "Extensible console-based Jabber client")
2427 (description
2428 "GNU Freetalk is a command-line Jabber/XMPP chat client. It notably uses
2429the Readline library to handle input, so it features convenient navigation of
2430text as well as tab-completion of buddy names, commands and English words. It
2431is also scriptable and extensible via Guile.")
2432 (home-page "https://www.gnu.org/software/freetalk/")
2433 (license license:gpl3+)))
2434
2435(define-public libstrophe
2436 (package
2437 (name "libstrophe")
2438 (version "0.14.0")
2439 (source
2440 (origin
2441 (method git-fetch)
2442 (uri (git-reference
2443 (url "https://github.com/strophe/libstrophe")
2444 (commit version)))
2445 (file-name (git-file-name name version))
2446 (sha256
2447 (base32 "1ih28ys8nsk66n6x9s31khc946q35rma90fgrq0jvxxhgj2bqwz7"))))
2448 (build-system gnu-build-system)
2449 (arguments
2450 (list #:configure-flags '(list "--disable-static")
2451 #:phases
2452 #~(modify-phases %standard-phases
2453 (add-after 'unpack 'patch-make
2454 (lambda _
2455 (substitute* "Makefile.am"
2456 (("'\\^xmpp_'") "'.'"))))
2457 (add-after 'install 'install-extra-licence-files
2458 (lambda _
2459 (let ((license-directory (string-append #$output
2460 "/share/doc/"
2461 #$name "-" #$version "/")))
2462 (install-file "MIT-LICENSE.txt" license-directory)))))))
2463 (inputs
2464 (list expat openssl zlib))
2465 (native-inputs
2466 (list autoconf automake libtool pkg-config))
2467 (synopsis "C library for writing XMPP clients")
2468 (description "Libstrophe is a minimal XMPP library written in C. It has
2469almost no external dependencies, only an XML parsing library (expat or libxml
2470are both supported).")
2471 (home-page "https://strophe.im/libstrophe/")
2472 ;; Dual-licensed.
2473 (license (list license:gpl3+ license:x11))))
2474
2475(define-public profanity
2476 (package
2477 (name "profanity")
2478 (version "0.18.2")
2479 (source
2480 (origin
2481 (method git-fetch)
2482 (uri
2483 (git-reference
2484 (url "https://github.com/profanity-im/profanity")
2485 (commit version)))
2486 (file-name (git-file-name name version))
2487 (sha256
2488 (base32
2489 "07m91fgkk8qjybql93m6k83ggpmc893k1x7jch95zyj57r5mkmi2"))))
2490 (build-system meson-build-system)
2491 (arguments
2492 (list
2493 #:configure-flags
2494 #~(list
2495 "-Dnotifications=enabled"
2496 "-Dpython-plugins=enabled"
2497 "-Dc-plugins=enabled"
2498 "-Dotr=enabled"
2499 "-Dpgp=enabled"
2500 "-Domemo=enabled"
2501 "-Domemo-backend=libomemo-c"
2502 "-Dicons-and-clipboard=enabled"
2503 "-Dinstall_themes=true"
2504 "--buildtype=release")
2505 #:glib-or-gtk? #t))
2506 (native-inputs
2507 (list cmocka
2508 pkg-config))
2509 (inputs
2510 (list curl
2511 expat
2512 glib
2513 gpgme
2514 gtk+
2515 libgcrypt
2516 libnotify
2517 libotr
2518 libomemo-c
2519 libstrophe
2520 ncurses
2521 openssl
2522 python-wrapper
2523 readline
2524 sqlite))
2525 (synopsis "Console-based XMPP client")
2526 (description "Profanity is a console based XMPP client written in C
2527using ncurses and libmesode, inspired by Irssi.")
2528 (home-page "https://profanity-im.github.io")
2529 (properties `((release-monitoring-url . ,home-page)))
2530 (license license:gpl3+)))
2531
2532(define-public libcmatrix
2533 (package
2534 (name "libcmatrix")
2535 (version "0.0.4")
2536 (source (origin
2537 (method git-fetch)
2538 (uri (git-reference
2539 (url "https://source.puri.sm/Librem5/libcmatrix.git")
2540 (commit (string-append "v" version))))
2541 (file-name (git-file-name name version))
2542 (sha256
2543 (base32
2544 "0g4r0hkrgk72civpzm0dcn3mzrs79zb1100d7jjkqs36wb2f0a1k"))))
2545 (build-system meson-build-system)
2546 (native-inputs (list `(,glib "bin") pkg-config))
2547 (inputs (list glib json-glib libgcrypt libsecret libsoup olm))
2548 (home-page "https://source.puri.sm/Librem5/libcmatrix/")
2549 (synopsis "Matrix protocol library written in C using GObject")
2550 (description "libcmatrix is a library for writing Matrix clients in C. It
2551handles transparently end-to-end encryption (E2EE), and stores messages/events
2552in a local database.")
2553 (license license:lgpl2.1+)))
2554
2555(define-public libircclient
2556 (package
2557 (name "libircclient")
2558 (version "1.10")
2559 (source
2560 (origin
2561 (method url-fetch)
2562 (uri (string-append "mirror://sourceforge/libircclient/libircclient/"
2563 version "/libircclient-" version ".tar.gz"))
2564 (sha256
2565 (base32
2566 "0b9wa0h3xc31wpqlvgxgnvqp5wgx3kwsf5s9432m5cj8ycx6zcmv"))))
2567 (build-system gnu-build-system)
2568 (inputs
2569 (list openssl))
2570 (arguments
2571 `(#:configure-flags
2572 (list (string-append "--libdir="
2573 (assoc-ref %outputs "out") "/lib")
2574 "--enable-shared"
2575 "--enable-ipv6"
2576 "--enable-openssl")
2577 #:tests? #f)) ; no test suite
2578 (home-page "https://www.ulduzsoft.com/libircclient/")
2579 (synopsis "Library implementing the client IRC protocol")
2580 (description "Libircclient is a library which implements the client IRC
2581protocol. It is designed to be small, fast, portable and compatible with the
2582RFC standards as well as non-standard but popular features. It can be used for
2583building the IRC clients and bots.")
2584 (license license:lgpl3+)))
2585
2586(define-public toxic
2587 (package
2588 (name "toxic")
2589 (version "0.16.2")
2590 (source
2591 (origin
2592 (method git-fetch)
2593 (uri (git-reference
2594 (url "https://github.com/JFreegman/toxic")
2595 (commit (string-append "v" version))))
2596 (sha256
2597 (base32 "0yxqwsa0cbk3mj76ld3xf23k4knbj1jsh18hvkjy2ya59x2h22jb"))
2598 (file-name (git-file-name name version))))
2599 (build-system gnu-build-system)
2600 (arguments
2601 (list #:tests? #f ; no tests
2602 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
2603 (string-append "PREFIX=" #$output))
2604 #:phases
2605 #~(modify-phases %standard-phases
2606 (delete 'configure)
2607 (add-before 'build 'enable-python-scripting
2608 (lambda _
2609 ;; XXX: For compatibility with Python 3.8, adjust
2610 ;; python3-config invocation to include --embed; see
2611 ;; <https://github.com/JFreegman/toxic/issues/533>.
2612 (substitute* "cfg/checks/python.mk"
2613 (("python3-config --ldflags")
2614 "python3-config --ldflags --embed"))
2615 (setenv "ENABLE_PYTHON" "1"))))))
2616 (inputs
2617 (list c-toxcore
2618 curl
2619 freealut
2620 gdk-pixbuf ; for libnotify.pc
2621 libconfig
2622 libnotify
2623 libpng
2624 libvpx
2625 libx11
2626 ncurses
2627 openal
2628 python
2629 qrencode))
2630 (native-inputs
2631 (list pkg-config))
2632 (home-page "https://github.com/JFreegman/toxic")
2633 (synopsis "Tox chat client using ncurses")
2634 (description "Toxic is a console-based instant messaging client, using
2635c-toxcore and ncurses. It provides audio calls, sound and desktop
2636notifications, and Python scripting support.")
2637 (license license:gpl3+)))
2638
2639(define-public libqmatrixclient
2640 (package
2641 (name "libqmatrixclient")
2642 (version "0.9.5")
2643 (source
2644 (origin
2645 (method git-fetch)
2646 (uri (git-reference
2647 (url "https://github.com/quotient-im/libQuotient")
2648 (commit version)))
2649 (file-name (git-file-name name version))
2650 (sha256
2651 (base32 "100l7nbpr8yhhx9zcd9wd6bw3j7j9f8a17wipsa7b5rqnbj09ln1"))))
2652 (build-system qt-build-system)
2653 (inputs
2654 (list olm openssl qtkeychain-qt6 qtmultimedia))
2655 (arguments
2656 (list #:qtbase qtbase
2657 #:configure-flags
2658 #~(list "-DBUILD_TESTING=ON"
2659 "-DBUILD_SHARED_LIBS=ON")
2660 #:phases
2661 #~[modify-phases %standard-phases
2662 (add-before 'check 'check-setup
2663 (lambda _
2664 (setenv "HOME" "/tmp")))
2665 (replace 'check
2666 (lambda* (#:key tests? #:allow-other-keys)
2667 (when tests?
2668 ;; This test requires internet.
2669 (invoke "ctest" "-E" "testolmaccount"))))]))
2670 (home-page "https://quotient-im.github.io/libQuotient/")
2671 (synopsis "Qt client library for the Matrix instant messaging protocol")
2672 (description "libqmatrixclient is a Qt library to write clients for the
2673Matrix instant messaging protocol. Quaternion is the reference client
2674implementation. Quaternion and libqmatrixclient together form the
2675QMatrixClient project.")
2676 (license license:lgpl2.1+)))
2677
2678(define-public mtxclient
2679 (package
2680 (name "mtxclient")
2681 (version "0.10.1")
2682 (source
2683 (origin
2684 (method git-fetch)
2685 (uri (git-reference
2686 (url "https://github.com/Nheko-Reborn/mtxclient")
2687 (commit (string-append "v" version))))
2688 (file-name (git-file-name name version))
2689 (sha256
2690 (base32 "077f3x45sd0sbk51azz5xg1icp3472nn4vfjsbk2db8wmq54qhb3"))))
2691 (build-system cmake-build-system)
2692 (arguments
2693 (list
2694 #:configure-flags
2695 #~(list "-DBUILD_LIB_EXAMPLES=OFF") ; disable example binaries (not installed)
2696 #:phases
2697 #~(modify-phases %standard-phases
2698 (add-before 'configure 'disable-network-tests
2699 (lambda _
2700 (substitute* "CMakeLists.txt"
2701 (("add_test\\((BasicConnectivity|ClientAPI|Devices|MediaAPI|Encryption|Pushrules)")
2702 "# add_test")))))))
2703 (inputs
2704 (list boost
2705 coeurl
2706 curl
2707 nlohmann-json
2708 libevent
2709 libsodium
2710 olm
2711 openssl
2712 re2
2713 spdlog
2714 zlib))
2715 (native-inputs
2716 (list googletest pkg-config))
2717 (home-page "https://github.com/Nheko-Reborn/mtxclient")
2718 (synopsis "Client API library for the Matrix protocol")
2719 (description "@code{mtxclient} is a C++ library that implements client API
2720for the Matrix protocol. It is built on to of @code{Boost.Asio}.")
2721 (license license:expat)))
2722
2723(define-public nheko
2724 (package
2725 (name "nheko")
2726 (version "0.12.1")
2727 (source
2728 (origin
2729 (method git-fetch)
2730 (uri (git-reference
2731 (url "https://github.com/Nheko-Reborn/nheko")
2732 (commit (string-append "v" version))))
2733 (file-name (git-file-name name version))
2734 (sha256
2735 (base32 "098jqccwsfbqkdpnhbych2rd076385wb51fx9qyjfiddidxv2mas"))
2736 (modules '((guix build utils)))
2737 (snippet '(delete-file-recursively "third_party"))
2738 ;; Release 0.12.1 has a major bug which prevents replies
2739 ;; from rendering: https://github.com/Nheko-Reborn/nheko/issues/1944
2740 ;; TODO: revaluate for future versions.
2741 (patches (search-patches "nheko-0-12-1-fix-rendering-replies.patch"))))
2742 (arguments
2743 (list
2744 #:tests? #f ;no test target
2745 #:qtbase qtbase
2746 #:configure-flags
2747 #~(list "-DCMAKE_BUILD_TYPE=Release"
2748 ;; Fix required because we are using a static SingleApplication
2749 "-DCMAKE_CXX_FLAGS= \"-DQAPPLICATION_CLASS=QApplication\" "
2750 ;; Compile Qml will make Nheko faster, but you will need to recompile
2751 ;; it, when you update Qt. That's fine for us.
2752 "-DCOMPILE_QML=ON"
2753 ;; Use system libraries.
2754 "-DUSE_BUNDLED_BLURHASH=OFF"
2755 "-DUSE_BUNDLED_CPPHTTPLIB=OFF")
2756 #:phases
2757 #~(modify-phases %standard-phases
2758 (add-after 'unpack 'fix-determinism
2759 (lambda _
2760 ;; Make Qt deterministic.
2761 (setenv "QT_RCC_SOURCE_DATE_OVERRIDE" "1")))
2762 (add-after 'install 'wrap-program
2763 (lambda _
2764 (let ((gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
2765 (wrap-program (string-append #$output "/bin/nheko")
2766 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path)))))))))
2767 (build-system qt-build-system)
2768 (inputs
2769 (list bash-minimal
2770 blurhash
2771 brotli
2772 cmark
2773 coeurl
2774 cpp-httplib
2775 curl
2776 gst-plugins-base
2777 gst-plugins-bad ; sdp & webrtc for voip
2778 gst-plugins-good-qt ; rtpmanager for voip
2779 kdsingleapplication
2780 libevent
2781 libnice ; for voip
2782 libxkbcommon
2783 lmdb
2784 lmdbxx
2785 mtxclient
2786 nlohmann-json
2787 olm
2788 openssl
2789 qtdeclarative
2790 qtgraphicaleffects
2791 qtkeychain-qt6
2792 qtmultimedia
2793 qtwayland
2794 qtsvg
2795 re2
2796 spdlog
2797 vulkan-headers
2798 vulkan-loader
2799 xdg-utils ; xdg-open for opening URLs
2800 zlib))
2801 (native-inputs
2802 (list asciidoc pkg-config qttools))
2803 (home-page "https://github.com/Nheko-Reborn/nheko")
2804 (synopsis "Desktop client for Matrix using Qt and C++14")
2805 (description "@code{Nheko} want to provide a native desktop app for the
2806Matrix protocol that feels more like a mainstream chat app and less like an IRC
2807client.
2808
2809Many matrix features are supported, including user registration, rooms, typing
2810notification, emojis, E2E encryption, and voip calls.")
2811 (license license:gpl3+)))
2812
2813(define-public quaternion
2814 (package
2815 (name "quaternion")
2816 (version "0.0.97.1")
2817 (outputs '("out" "debug"))
2818 (source
2819 (origin
2820 (method git-fetch)
2821 (uri (git-reference
2822 (url "https://github.com/quotient-im/Quaternion")
2823 (commit version)))
2824 (file-name (git-file-name name version))
2825 (sha256
2826 (base32 "1628rnj025zz84vvp3zrhq912n27maznhszky2yd4w7ackg08zhf"))))
2827 (build-system qt-build-system)
2828 (arguments
2829 (list #:qtbase qtbase
2830 #:tests? #f)) ;no tests
2831 (native-inputs
2832 (list qttools))
2833 (inputs
2834 (list libqmatrixclient
2835 olm
2836 openssl
2837 qtdeclarative
2838 qtkeychain-qt6
2839 qtmultimedia
2840 qtsvg
2841 qtwayland
2842 xdg-utils))
2843 (home-page "https://matrix.org/ecosystem/clients/quaternion/")
2844 (synopsis "Graphical client for the Matrix instant messaging protocol")
2845 (description "Quaternion is a Qt desktop client for the Matrix instant
2846messaging protocol. It uses libqmatrixclient and is its reference client
2847implementation.")
2848 (license (list license:gpl3+ ; all source code
2849 license:lgpl3+)))) ; icons/breeze
2850
2851(define-public telegram-purple
2852 (package
2853 (name "telegram-purple")
2854 (version "1.4.7")
2855 (home-page "https://github.com/majn/telegram-purple")
2856 (source (origin
2857 (method git-fetch)
2858 (uri (git-reference
2859 (url home-page)
2860 (commit (string-append "v" version))
2861 (recursive? #t)))
2862 (sha256
2863 (base32
2864 "14h8lvj0kjvy1b5i84ha2w9rl3akxjwwvsp5j4dcxwfghrkzqgf2"))
2865 (modules '((guix build utils)))
2866 (snippet
2867 '(begin
2868 (substitute* "Makefile.in"
2869 ;; By default these two directories point to Pidgin's own
2870 ;; prefix.
2871 (("^PLUGIN_DIR_PURPLE=.*")
2872 (string-append
2873 "exec_prefix := @exec_prefix@\n"
2874 "PLUGIN_DIR_PURPLE := @libdir@/purple-2\n"))
2875 (("^DATA_ROOT_DIR_PURPLE=.*")
2876 "DATA_ROOT_DIR_PURPLE := @datarootdir@\n")
2877
2878 ;; Honor sysconfdir instead of trying to write to /etc.
2879 (("DESTDIR\\)/etc/telegram-purple")
2880 "DESTDIR)@sysconfdir@/telegram-purple"))
2881 #t))
2882 (patches (search-patches "telegram-purple-adjust-test.patch"))
2883 (file-name (git-file-name name version))))
2884 (build-system gnu-build-system)
2885 (native-inputs
2886 `(("pkg-config" ,pkg-config)
2887 ("gettext" ,gettext-minimal)
2888 ("which" ,which)))
2889 (inputs
2890 (list pidgin
2891 libgcrypt
2892 libwebp
2893 glib
2894 gtk+-2
2895 zlib))
2896 (arguments
2897 `(#:phases
2898 (modify-phases %standard-phases
2899 ;; We're using release tag for repository checkout - let's prepare
2900 ;; header defining GIT_COMMIT manually instead of running git to
2901 ;; identify version which is being compiled. Git repository
2902 ;; is removed anyway and only source code is kept.
2903 (add-after 'unpack 'prepare-commit.h
2904 (lambda _
2905 (with-output-to-file "./commit.h"
2906 (lambda ()
2907 (display
2908 (string-append "//generated by guix, use version instead of "
2909 "commit\n"
2910 "#ifndef GIT_COMMIT\n"
2911 "# define GIT_COMMIT \"v"
2912 ,version "\"\n"
2913 "#endif\n"))))
2914 #t))
2915 (add-before 'configure 'set-SHELL-variables
2916 ;; Set these environment variables so that 'tgl/configure' uses the
2917 ;; right shell and not /bin/sh.
2918 (lambda _
2919 (let ((bash (which "bash")))
2920 (setenv "SHELL" bash)
2921 (setenv "CONFIG_SHELL" bash)
2922 #t))))))
2923 (synopsis "Telegram messaging support for Pidgin")
2924 (description
2925 "Telegram-purple is a plugin for Libpurple, the communication library
2926used by the Pidgin instant messaging client, that adds support for the
2927Telegram messenger.
2928
2929This package is on ``life support'' until @code{tdlib-purple} is a full
2930replacement.")
2931
2932 ;; Code under tgl/ (the Telegram library) is LGPLv2.1+, but the plugin
2933 ;; itself is GPLv2+.
2934 (license license:gpl2+)))
2935
2936(define-public purple-mm-sms
2937 (package
2938 (name "purple-mm-sms")
2939 (version "0.1.4")
2940 (source (origin
2941 (method git-fetch)
2942 (uri (git-reference
2943 (url "https://source.puri.sm/Librem5/purple-mm-sms.git")
2944 (commit (string-append "v" version))))
2945 (file-name (git-file-name name version))
2946 (sha256
2947 (base32
2948 "1daf7zl8bhhm1szkgxflpqql69f2w9i9nlgf1n4p1nynxifz1bim"))))
2949 (build-system gnu-build-system)
2950 (arguments
2951 `(#:make-flags
2952 (let ((out (assoc-ref %outputs "out")))
2953 ;; Fix hardcoded paths
2954 (list (string-append "PREFIX=" out)
2955 (string-append "PLUGIN_DIR_PURPLE=" out "/lib/purple-2")
2956 (string-append "DATA_ROOT_DIR_PURPLE=" out "/share")))
2957 #:tests? #f ; no tests
2958 #:phases
2959 (modify-phases %standard-phases
2960 (delete 'configure))))
2961 (native-inputs
2962 `(("glib:bin" ,glib "bin")
2963 ("pkg-config" ,pkg-config)))
2964 (inputs
2965 (list modem-manager pidgin))
2966 (synopsis "Libpurple plugin for SMS via ModemManager")
2967 (description "Plugin for libpurple to allow sending SMS using ModemManager.")
2968 (home-page "https://source.puri.sm/Librem5/purple-mm-sms")
2969 (license license:gpl2+)))
2970
2971(define-public purple-lurch
2972 (package
2973 (name "purple-lurch")
2974 (version "0.7.0")
2975 (source
2976 (origin
2977 (method git-fetch)
2978 (uri (git-reference
2979 (url "https://github.com/gkdr/lurch")
2980 (commit (string-append "v" version))))
2981 (modules '((guix build utils)))
2982 (snippet
2983 #~(begin
2984 ;; Submodules
2985 (delete-file-recursively "lib")))
2986 (file-name
2987 (git-file-name name version))
2988 (sha256
2989 (base32 "1ipd9gwh04wbqv6c10yxi02lc2yjsr02hwjycgxhl4r9x8b33psd"))))
2990 (build-system gnu-build-system)
2991 (arguments
2992 (list
2993 #:parallel-tests? #f
2994 #:test-target "test"
2995 #:phases
2996 #~(modify-phases %standard-phases
2997 (replace 'configure
2998 (lambda _
2999 (substitute* "Makefile"
3000 (("^PURPLE_PLUGIN_DIR = .*")
3001 (string-append "PURPLE_PLUGIN_DIR = " #$output
3002 "/lib/purple-2\n")))
3003 ;; Fix for gcc@14.
3004 (setenv "CFLAGS" "-Wno-error=implicit-function-declaration")
3005 (setenv "CC" #$(cc-for-target)))))))
3006 (native-inputs
3007 (list cmocka
3008 pkg-config))
3009 (inputs
3010 (list axc
3011 glib
3012 libgcrypt
3013 libomemo
3014 libsignal-protocol-c
3015 libxml2
3016 minixml
3017 pidgin
3018 sqlite))
3019 (home-page "https://github.com/gkdr/lurch")
3020 (synopsis "OMEMO Encryption for libpurple")
3021 (description
3022 "Purple-lurch plugin adds end-to-end encryption support through the
3023Double Ratchet (Axolotl) algorithm, to @code{libpurple} applications using
3024@acronym{XMPP, Extensible Messaging and Presence Protocol},through its
3025standard XEP-0384: @acronym{OMEMO, OMEMO Multi-End Message and Object
3026Encryption} Encryption. It provides confidentiality, (weak) forward secrecy,
3027break-in recovery, authentication, integrity, deniability, and
3028asynchronicity.")
3029 (license license:gpl3+)))
3030
3031(define-public libphonenumber
3032 (package
3033 (name "libphonenumber")
3034 (version "9.0.21")
3035 (source (origin
3036 (method git-fetch)
3037 (uri (git-reference
3038 (url "https://github.com/google/libphonenumber")
3039 (commit (string-append "v" version))))
3040 (file-name (git-file-name name version))
3041 (patches (search-patches
3042 "libphonenumber-reproducible-build.patch"))
3043 (sha256
3044 (base32
3045 "07ap8qvzlm4wb7x8qvs4n1jhb50fgwsy41ck4ivsj427wy79726r"))))
3046 (arguments
3047 (list
3048 #:modules '((guix build cmake-build-system)
3049 ((guix build gnu-build-system) #:prefix gnu:)
3050 (guix build utils))
3051 #:phases
3052 #~(modify-phases %standard-phases
3053 (add-after 'unpack 'change-directory
3054 (lambda _ (chdir "cpp")))
3055 (replace 'check
3056 (lambda* (#:rest args)
3057 (apply (assoc-ref gnu:%standard-phases 'check)
3058 #:test-target "tests" args))))))
3059 (build-system cmake-build-system)
3060 (native-inputs (list googletest pkg-config))
3061 ;; Upstream issue requesting support for newer boost
3062 ;; <https://issuetracker.google.com/issues/554236365>.
3063 (inputs (list boost-1.83 protobuf openjdk11 icu4c))
3064 (propagated-inputs (list abseil-cpp)) ;included in phonenumberutil.h
3065 (synopsis "Library for parsing and using phone numbers")
3066 (description
3067 "This package provides a C++ library for parsing, formatting, and
3068validating international phone numbers.")
3069 (home-page "https://github.com/google/libphonenumber")
3070 (license license:asl2.0)))
3071
3072(define-public chatty
3073 (package
3074 (name "chatty")
3075 (version "0.8.9")
3076 (source (origin
3077 (method git-fetch)
3078 (uri (git-reference
3079 (url "https://gitlab.gnome.org/World/Chatty.git")
3080 (commit (string-append "v" version))))
3081 (file-name (git-file-name name version))
3082 (sha256
3083 (base32
3084 "0hk222c3rx8mfp5mfd097w6hgpm79rja56lljgb2s8mg2j0nzfjw"))))
3085 (build-system meson-build-system)
3086 (arguments
3087 (list
3088 #:glib-or-gtk? #t
3089 #:phases
3090 #~(modify-phases %standard-phases
3091 (add-after 'unpack 'skip-gtk-update-icon-cache
3092 ;; Don't create 'icon-theme.cache'.
3093 (lambda _
3094 (substitute* "meson.build"
3095 (("glib_compile_schemas: true")
3096 "glib_compile_schemas: false")
3097 (("gtk_update_icon_cache: true")
3098 "gtk_update_icon_cache: false"))))
3099 (add-after 'unpack 'disable-problematic-tests
3100 (lambda _
3101 (substitute* "tests/meson.build"
3102 ;; This test fails with "libEGL warning: DRI3 error: Could not
3103 ;; get DRI3 device".
3104 ((".*'message-row',.*") ""))))
3105 (add-before 'check 'pre-check
3106 (lambda* (#:key tests? #:allow-other-keys)
3107 (when tests?
3108 ;; One test requires a running Xorg server. Start one.
3109 (system "Xvfb :1 &")
3110 (setenv "DISPLAY" ":1")
3111 ;; HOME must be writable for writing configuration files.
3112 (setenv "HOME" "/tmp")
3113 (setenv "XDG_RUNTIME_DIR" "/tmp")))))))
3114 (native-inputs
3115 (list gettext-minimal
3116 `(,glib "bin")
3117 gnupg
3118 itstool
3119 pkg-config
3120 protobuf
3121 xorg-server-for-tests))
3122 (inputs
3123 (list feedbackd
3124 folks
3125 gnome-desktop
3126 gsettings-desktop-schemas
3127 gspell
3128 gstreamer
3129 gtksourceview
3130 json-glib
3131 libadwaita
3132 libcmatrix
3133 libgcrypt
3134 libgee
3135 libhandy
3136 libphonenumber
3137 olm
3138 modem-manager
3139 pidgin
3140 purple-mm-sms
3141 sqlite))
3142 (propagated-inputs
3143 (list adwaita-icon-theme evolution-data-server))
3144 (synopsis "Mobile client for XMPP and SMS messaging")
3145 (description "Chatty is a chat program for XMPP and SMS. It works on mobile
3146as well as on desktop platforms. It's based on libpurple and ModemManager.")
3147 (home-page "https://gitlab.gnome.org/World/Chatty")
3148 (license license:gpl3+)))
3149
3150(define-public mosquitto
3151 (package
3152 (name "mosquitto")
3153 (version "2.0.21")
3154 (source
3155 (origin
3156 (method url-fetch)
3157 (uri (string-append "https://mosquitto.org/files/source/mosquitto-"
3158 version ".tar.gz"))
3159 (sha256
3160 (base32 "17c9gf2xncxsi3v8fbgq3abfyb84lyr18in0s1pbplmqmr6fimbs"))))
3161 (build-system cmake-build-system)
3162 (arguments
3163 (list
3164 #:tests? #f
3165 #:configure-flags
3166 #~(list "-DWITH_WEBSOCKETS=ON")))
3167 (inputs (list openssl libxslt libwebsockets-for-mosquitto))
3168 (synopsis "Message broker")
3169 (description
3170 "This package provides Eclipse Mosquitto, a message broker
3171that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1. Mosquitto
3172is lightweight and is suitable for use on all devices from low power single
3173board computers to full servers.
3174
3175The MQTT protocol provides a lightweight method of carrying out messaging
3176using a publish/subscribe model. This makes it suitable for Internet of
3177Things messaging such as with low power sensors or mobile devices such
3178as phones, embedded computers or microcontrollers.")
3179 (home-page "https://mosquitto.org/")
3180 ;; Dual licensed.
3181 (license (list license:epl1.0 license:edl1.0))))
3182
3183(define-public python-paho-mqtt
3184 (package
3185 (name "python-paho-mqtt")
3186 (version "2.1.0")
3187 (source (origin
3188 (method git-fetch)
3189 (uri (git-reference
3190 (url "https://github.com/eclipse/paho.mqtt.python")
3191 (commit (string-append "v" version))))
3192 (file-name (git-file-name name version))
3193 (sha256
3194 (base32
3195 "1dnn3cvdpgdhq9s38mzic4xgcs27kx74q505w6vk57my6mcvxjjl"))))
3196 (build-system pyproject-build-system)
3197 (arguments
3198 (list
3199 #:phases
3200 #~(modify-phases %standard-phases
3201 ;; Some tests fail to return the correct exit code in build container.
3202 ;; They take very long in the container, so maybe something times out.
3203 ;; All tests pass when ran manually.
3204 (add-after 'unpack 'patch-tests
3205 (lambda* _
3206 (substitute* "tests/lib/conftest.py"
3207 (("raise RuntimeError") "pass;")))))))
3208 (native-inputs (list python-hatchling python-pytest))
3209 (home-page "https://www.eclipse.org/paho/")
3210 (synopsis "Python implementation of an MQTT client class")
3211 (description "MQTT and MQTT-SN are lightweight publish/subscribe messaging
3212transports for TCP/IP and connection-less protocols (such as UDP). The
3213Eclipse Paho project provides client side implementations of MQTT and MQTT-SN
3214in a variety of programming languages. This package is for the Python
3215implementation of an MQTT version client class.")
3216 (license (list license:epl2.0 license:edl1.0)))) ;dual licensed
3217
3218(define-public psi-plus
3219 (package
3220 (name "psi-plus")
3221 (version "1.5.2140")
3222 (source
3223 (origin
3224 (method git-fetch)
3225 (uri
3226 (git-reference
3227 (url "https://github.com/psi-plus/psi-plus-snapshots")
3228 (commit version)))
3229 (file-name (git-file-name name version))
3230 (modules '((guix build utils)))
3231 (snippet
3232 #~(begin
3233 (delete-file-recursively "3rdparty")
3234 (substitute* "CMakeLists.txt"
3235 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty.*") "")
3236 (("add_subdirectory\\( 3rdparty \\)") ""))
3237 (substitute* "src/CMakeLists.txt"
3238 (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty.*") "")
3239 (("add_dependencies\\(\\$\\{PROJECT_NAME\\} qhttp\\)")
3240 "target_link_libraries(${PROJECT_NAME} qhttp)"))
3241 (substitute* "src/src.cmake"
3242 (("include\\(\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qite/libqite/libqite.cmake\\)")
3243 "list(APPEND EXTRA_LIBS qite)"))
3244 (substitute* '("src/filesharingmanager.h" "src/widgets/psirichtext.cpp"
3245 "src/filesharingmanager.cpp" "src/widgets/psitextview.cpp"
3246 "src/chatview_te.cpp" "src/msgmle.cpp")
3247 (("qite.h") "qite/qite.h")
3248 (("qiteaudio.h") "qite/qiteaudio.h")
3249 (("qiteaudiorecorder.h") "qite/qiteaudiorecorder.h"))))
3250 (sha256
3251 (base32 "084nl0808mhz0vndsp504mvnvhwn2gvmp0qz2iw1rvfv86r26y3i"))))
3252 (build-system qt-build-system)
3253 (arguments
3254 `(#:tests? #f ; No target
3255 #:imported-modules
3256 (,@%qt-build-system-modules
3257 (guix build glib-or-gtk-build-system))
3258 #:modules
3259 ((guix build qt-build-system)
3260 ((guix build glib-or-gtk-build-system)
3261 #:prefix glib-or-gtk:)
3262 (guix build utils))
3263 #:configure-flags
3264 (list
3265 "-DBUILD_PSIMEDIA=ON" ; For A/V support
3266 "-DENABLE_PLUGINS=ON"
3267 "-DUSE_HUNSPELL=OFF" ; Use Enchant instead
3268 "-DUSE_ENCHANT=ON"
3269 "-DUSE_CCACHE=OFF") ; Not required
3270 #:phases
3271 (modify-phases %standard-phases
3272 (add-after 'install 'wrap-executable
3273 (lambda* (#:key outputs #:allow-other-keys)
3274 (let ((out (assoc-ref outputs "out")))
3275 (wrap-program (string-append out "/bin/psi-plus")
3276 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,(getenv "GST_PLUGIN_SYSTEM_PATH")))
3277 `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))))))
3278 (add-after 'wrap-executable 'glib-or-gtk-compile-schemas
3279 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
3280 (add-after 'glib-or-gtk-compile-schemas 'glib-or-gtk-wrap
3281 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
3282 (native-inputs
3283 (list `(,glib "bin")
3284 gobject-introspection
3285 perl
3286 pkg-config
3287 python-wrapper
3288 ruby))
3289 (inputs
3290 (list bash-minimal ; for wrap-program
3291 libb2
3292 dbus
3293 enchant
3294 glib
3295 gstreamer
3296 gst-plugins-base
3297 http-parser
3298 libgcrypt
3299 libgpg-error
3300 libidn
3301 libomemo-c
3302 libotr
3303 libsignal-protocol-c
3304 tidy-html
3305 openssl
3306 qca
3307 qhttp
3308 qite
3309 qtbase-5
3310 qtkeychain
3311 qtmultimedia-5
3312 qtsvg-5
3313 qtwayland-5
3314 qtx11extras
3315 usrsctp
3316 libx11
3317 libxext
3318 libxcb
3319 libxscrnsaver
3320 zlib))
3321 (home-page "https://psi-im.com/")
3322 (synopsis "Qt-based XMPP Client")
3323 (description
3324 "Psi+ is a powerful XMPP client designed for experienced users.
3325It's a spin-off of the Psi XMPP client.")
3326 (license license:gpl2+)))
3327
3328(define-public twtxt
3329 (package
3330 (name "twtxt")
3331 (version "1.3.1")
3332 (source
3333 (origin
3334 (method git-fetch)
3335 (uri (git-reference
3336 (url "https://github.com/buckket/twtxt")
3337 (commit (string-append "v" version))))
3338 (file-name (git-file-name name version))
3339 (sha256
3340 (base32 "1k7187fva6pmnyrz1pq37pq7wfnxix8qgzn5dzgjk3l8ipb63c89"))
3341 (patches
3342 ;; Patch already merged in the project for future release.
3343 (search-patches "python-twtxt-replace-pkg-resources.patch"))))
3344 (build-system pyproject-build-system)
3345 (native-inputs
3346 (list python-pytest
3347 python-setuptools))
3348 (inputs
3349 (list python-aiohttp
3350 python-click
3351 python-humanize
3352 python-dateutil))
3353 (home-page "https://github.com/buckket/twtxt")
3354 (synopsis "Decentralised, minimalist microblogging service")
3355 (description
3356 "@command{twtxt} is a decentralised, minimalist microblogging service for
3357hackers.
3358
3359So you want to get some thoughts out on the internet in a convenient and slick
3360way while also following the gibberish of others? Instead of signing up at a
3361closed and/or regulated microblogging platform, getting your status updates
3362out with twtxt is as easy as putting them in a publicly accessible text file.
3363The URL pointing to this file is your identity, your account. @code{twtxt}
3364then tracks these text files, like a feedreader, and builds your unique
3365timeline out of them, depending on which files you track. The format is
3366simple, human readable, and integrates well with UNIX command line
3367utilities.")
3368 (license license:expat)))
3369
3370(define-public python-zulip
3371 (package
3372 (name "python-zulip")
3373 (version "0.9.1")
3374 (source
3375 (origin
3376 (method git-fetch)
3377 (uri (git-reference
3378 (url "https://github.com/zulip/python-zulip-api")
3379 (commit version)))
3380 (file-name (git-file-name name version))
3381 (sha256
3382 (base32 "1dy99ma8iqycl5j52zsahlwrgps96sschnn8jqm7pqmy2rz8ijlr"))
3383 (patches (search-patches
3384 "python-zulip-fix-irc-mirror-timeout.patch"
3385 "python-zulip-make-irc-mirror-installable.patch"))))
3386 (build-system pyproject-build-system)
3387 (arguments
3388 (list
3389 #:test-backend #~'unittest
3390 #:test-flags #~(list "discover" "--verbose" "tests/")
3391 #:phases
3392 #~(modify-phases %standard-phases
3393 ;; Source provides 4 Python packages:
3394 ;; - packaged_helloworld
3395 ;; - zulip
3396 ;; - zulip_bots
3397 ;; - zulip_botserver
3398 (add-after 'unpack 'select-zulip
3399 (lambda _
3400 (chdir "zulip")))
3401 (add-after 'select-zulip 'remove-zulip-api-script
3402 (lambda _
3403 ;; XXX: zulip-api requires configured access to Zulip instance.
3404 (substitute* "setup.py"
3405 ((".*zulip-api=.*")
3406 ""))))
3407 (add-after 'sanity-check 'restore-zulip-api-script
3408 (lambda _
3409 (substitute* "setup.py"
3410 (("matrix_bridge:main\"," match)
3411 (string-append match "\n\"zulip-api=zulip.cli:cli\""))))))))
3412 (native-inputs
3413 (list python-mock
3414 python-setuptools))
3415 (propagated-inputs
3416 (list python-click
3417 python-distro
3418 python-requests
3419 python-typing-extensions
3420 ;; [optional]
3421 python-dateutil
3422 python-feedparser
3423 python-google-api-client
3424 python-google-auth-httplib2
3425 python-google-auth-oauthlib
3426 python-irc
3427 ;; python-litellm
3428 python-matrix-nio
3429 ;; python-mercurial
3430 python-platformdirs
3431 ;; python-pysvn
3432 ;; python-twitter
3433 python-pytz
3434 ;; python-slack-sdk
3435 ;; python-sleekxmpp
3436 ;; python-trac
3437 #;python-zephyr))
3438 (home-page "https://github.com/zulip/python-zulip-api")
3439 (synopsis "Zulip's API Python bindings")
3440 (description
3441 "This package provides Python bindings to Zulip's API.
3442
3443Included common integrations and bridges are located in
3444share/zulip/integrations or in lib/<...>/site-packages/integrations:
3445@itemize
3446@item bridge_between_zulips
3447@item bridge_with_irc
3448@item bridge_with_matrix
3449@item bridge_with_slack
3450@item codebase
3451@item git
3452@item google
3453@item hg
3454@item jabber
3455@item jira
3456@item litellm
3457@item log2zulip
3458@item nagios
3459@item openshift
3460@item perforce
3461@item rss
3462@item svn
3463@item trac
3464@item trello
3465@item twitter
3466@item zephyr
3467@end itemize
3468
3469The package provides `zulip-irc-bridge' and `zulip-matrix-bridge' as
3470standalone scripts.")
3471 (license license:asl2.0)))
3472
3473(define-public python-zulip-bots
3474 (package
3475 (inherit python-zulip)
3476 (name "python-zulip-bots")
3477 (arguments
3478 (list
3479 #:test-backend #~'unittest
3480 #:test-flags #~(list "discover" "--verbose")
3481 #:phases
3482 #~(modify-phases %standard-phases
3483 (add-after 'unpack 'select-zulip-bots
3484 (lambda _
3485 (chdir "zulip_bots")))
3486 (add-after 'select-zulip-bots 'ignore-failing-tests
3487 (lambda _
3488 ;; Additional packaging is required.
3489 (delete-file "zulip_bots/bots/salesforce/test_salesforce.py")
3490 (delete-file "zulip_bots/bots/witai/test_witai.py")
3491 (delete-file "zulip_bots/bots/dialogflow/test_dialogflow.py")
3492 (delete-file "zulip_bots/bots/chessbot/test_chessbot.py"))))))
3493 (propagated-inputs
3494 (list python-beautifulsoup4
3495 python-html2text
3496 python-importlib-metadata
3497 python-lxml
3498 python-dropbox
3499 python-pip ;check if it will pull packages during runtime
3500 python-typing-extensions
3501 python-tweepy
3502 python-zulip
3503 ;; [optional]
3504 ;; python-apiai ;not packaged yet in Guix
3505 ;; python-chess
3506 #;python-wit)) ;witai
3507 (synopsis "Zulip's Bot framework")
3508 (description "This package provides Zulip's Bot framework.")))
3509
3510(define-public python-zulip-botserver
3511 (package
3512 (inherit python-zulip)
3513 (name "python-zulip-botserver")
3514 (arguments
3515 (list
3516 #:test-backend #~'unittest
3517 #:test-flags #~(list "discover" "--verbose")
3518 #:phases
3519 #~(modify-phases %standard-phases
3520 (add-after 'unpack 'select-zulip-bots
3521 (lambda _
3522 (chdir "zulip_botserver"))))))
3523 (propagated-inputs
3524 (list python-flask
3525 python-typing-extensions
3526 python-zulip
3527 python-zulip-bots))
3528 (synopsis "Zulip's Flask server for running bots")
3529 (description
3530 "This package provides Zulip's Flask server for running bots.")))
3531
3532(define-public zulip-term
3533 (package
3534 (name "zulip-term")
3535 ;; XXX: 0.7.0 was released in 2019.
3536 (properties '((commit . "6a799870eccc00d612e25ff881d18f4ff66d92fa")
3537 (revision . "0")))
3538 (version (git-version "0.7.0"
3539 (assoc-ref properties 'revision)
3540 (assoc-ref properties 'commit)))
3541 (source
3542 (origin
3543 (method git-fetch)
3544 (uri (git-reference
3545 (url "https://github.com/zulip/zulip-terminal")
3546 (commit (assoc-ref properties 'commit))))
3547 (file-name (git-file-name name version))
3548 (sha256
3549 (base32 "0sxf07fc9rarxcjl1mi8r5asnh9svggc7hfg9r425rh9qxnsda5i"))))
3550 (build-system pyproject-build-system)
3551 (arguments
3552 (list
3553 ;; tests: 2827 passed, 6 skipped, 7 deselected, 19 xfailed
3554 #:test-flags
3555 #~(list "-k" (string-join
3556 ;; 3 tests fail with pytest passing option in decorator
3557 (list "not test_main_multiple_autohide_options[options0]"
3558 "test_main_multiple_autohide_options[options1]"
3559 "test_main_multiple_notify_options[options0]"
3560 "test_main_multiple_notify_options[options1]"
3561 ;; Some differences in TUI which cause assertion to
3562 ;; fail.
3563 "test_soup2markup[link_api]"
3564 "test_soup2markup[link_userupload]"
3565 "test_soup2markup[preview-twitter]")
3566 " and not "))
3567 #:phases
3568 #~(modify-phases %standard-phases
3569 (add-after 'unpack 'relax-requirements
3570 (lambda _
3571 (substitute* "setup.py"
3572 (("lxml==4.9.4") "lxml>=4.9.4")
3573 (("pygments>=2.17.2,<2.18.0") "pygments>=2.17.2")
3574 (("typing_extensions~=4.5.0") "typing_extensions>=4.5.0")
3575 (("tzlocal>=5.0,<5.1") "tzlocal>=5.0")
3576 ;; XXX: the package provides 0.15 version for some reason.
3577 (("urwid_readline>=0.15.1") "urwid_readline>=0.15.0")
3578 (("zulip>=0.8.2,<0.9.0") "zulip>=0.8.2")))))))
3579 (inputs
3580 (list python-beautifulsoup4
3581 python-lxml
3582 python-pygments
3583 python-pyperclip
3584 python-dateutil
3585 python-pytz
3586 python-typing-extensions
3587 python-tzlocal
3588 python-urwid-for-zulip-term
3589 python-urwid-readline
3590 python-zulip))
3591 (native-inputs
3592 (list python-pytest
3593 python-pytest-mock
3594 python-setuptools))
3595 (home-page "https://github.com/zulip/zulip-terminal")
3596 (synopsis "Zulip's official terminal client")
3597 (description "This package contains Zulip's official terminal client.")
3598 (license license:asl2.0)))
3599
3600(define-public matterbridge
3601 (package
3602 (name "matterbridge")
3603 (version "1.26.0")
3604 (source
3605 (origin
3606 (method git-fetch)
3607 (uri (git-reference
3608 (url "https://github.com/42wim/matterbridge")
3609 (commit (string-append "v" version))))
3610 (file-name (git-file-name name version))
3611 (modules '((guix build utils)))
3612 (snippet '(for-each delete-file-recursively
3613 ;; TODO: unbundle the rest as well
3614 '("vendor/filippo.io"
3615 "vendor/github.com/apex"
3616 "vendor/github.com/blang"
3617 "vendor/github.com/d5"
3618 "vendor/github.com/davecgh"
3619 "vendor/github.com/dustin"
3620 "vendor/github.com/francoispqt"
3621 "vendor/github.com/fsnotify"
3622 "vendor/github.com/go-asn1-ber"
3623 "vendor/github.com/golang"
3624 "vendor/github.com/golang-jwt"
3625 "vendor/github.com/gomarkdown"
3626 "vendor/github.com/google"
3627 "vendor/github.com/gorilla"
3628 "vendor/github.com/hashicorp"
3629 "vendor/github.com/Jeffail"
3630 "vendor/github.com/jpillora"
3631 "vendor/github.com/json-iterator"
3632 "vendor/github.com/kballard"
3633 "vendor/github.com/klauspost"
3634 "vendor/github.com/labstack/echo"
3635 "vendor/github.com/magiconair"
3636 "vendor/github.com/matterbridge/gomatrix"
3637 "vendor/github.com/mattn"
3638 "vendor/github.com/mgutz"
3639 "vendor/github.com/minio/md5-simd"
3640 "vendor/github.com/minio/sha256-simd"
3641 "vendor/github.com/mitchellh"
3642 "vendor/github.com/modern-go"
3643 "vendor/github.com/opentracing"
3644 "vendor/github.com/pborman"
3645 "vendor/github.com/pelletier"
3646 "vendor/github.com/philhofer"
3647 "vendor/github.com/pkg"
3648 "vendor/github.com/pmezard"
3649 "vendor/github.com/remyoudompheng"
3650 "vendor/github.com/rivo"
3651 "vendor/github.com/russross"
3652 "vendor/github.com/sirupsen"
3653 "vendor/github.com/skip2"
3654 "vendor/github.com/spf13"
3655 "vendor/github.com/stretchr"
3656 "vendor/github.com/subosito"
3657 "vendor/github.com/tinylib"
3658 "vendor/github.com/valyala"
3659 "vendor/github.com/vmihailenco"
3660 "vendor/go.mau.fi"
3661 "vendor/go.uber.org"
3662 "vendor/golang.org"
3663 "vendor/google.golang.org"
3664 "vendor/gopkg.in/ini.v1"
3665 "vendor/gopkg.in/natefinch"
3666 "vendor/gopkg.in/yaml.v2"
3667 "vendor/gopkg.in/yaml.v3"
3668 "vendor/lukechampine.com"
3669 "vendor/modernc.org/cc"
3670 "vendor/modernc.org/mathutil"
3671 "vendor/modernc.org/memory"
3672 "vendor/modernc.org/opt"
3673 "vendor/modernc.org/strutil"
3674 "vendor/modernc.org/token")))
3675 (sha256
3676 (base32 "0939fiy7z53izznfhlr7c6vaskbmkbj3ncb09fzx5dmz9cjngy80"))))
3677 (build-system go-build-system)
3678 (arguments
3679 (list
3680 ;; It helps to resolve <golang.org/x/net/publicsuffix/table.go:63:12>:
3681 ;; pattern data/children: cannot embed irregular file data/children
3682 #:embed-files #~(list "children" "nodes" "text")
3683 #:import-path "github.com/42wim/matterbridge"
3684 #:test-flags #~(list "-vet=off")))
3685 (inputs (list
3686 ;; golang.org
3687 go-golang-org-x-crypto
3688 go-golang-org-x-image
3689 go-golang-org-x-mod
3690 go-golang-org-x-oauth2
3691 go-golang-org-x-sys
3692 go-golang-org-x-term
3693 go-golang-org-x-text
3694 go-golang-org-x-time
3695 go-golang-org-x-tools
3696 ;; google.golang.org
3697 go-google-golang-org-appengine
3698 go-google-golang-org-protobuf
3699 ;; gopkg.in
3700 go-gopkg-in-ini-v1
3701 go-gopkg-in-natefinch-lumberjack-v2
3702 go-gopkg-in-yaml-v2
3703 go-gopkg-in-yaml-v3
3704 ;; filippo.io
3705 go-filippo-io-edwards25519
3706 ;; uber.org
3707 go-go-uber-org-atomic
3708 go-go-uber-org-multierr
3709 go-go-uber-org-zap
3710 ;; github.com
3711 go-github-com-apex-log
3712 go-github-com-blang-semver
3713 go-github-com-d5-tengo-v2
3714 go-github-com-davecgh-go-spew
3715 go-github-com-dustin-go-humanize
3716 go-github-com-francoispqt-gojay
3717 go-github-com-fsnotify-fsnotify
3718 go-github-com-go-asn1-ber-asn1-ber
3719 go-github-com-golang-jwt-jwt
3720 go-github-com-golang-protobuf
3721 go-github-com-gomarkdown-markdown
3722 go-github-com-google-gops
3723 go-github-com-google-uuid
3724 go-github-com-gorilla-schema
3725 go-github-com-gorilla-websocket
3726 go-github-com-hashicorp-errwrap
3727 go-github-com-hashicorp-go-multierror
3728 go-github-com-hashicorp-golang-lru
3729 go-github-com-hashicorp-hcl
3730 go-github-com-jeffail-gabs
3731 go-github-com-jpillora-backoff
3732 go-github-com-json-iterator-go
3733 go-github-com-kballard-go-shellquote
3734 go-github-com-klauspost-compress
3735 go-github-com-klauspost-cpuid-v2
3736 go-github-com-labstack-echo-v4
3737 go-github-com-magiconair-properties
3738 go-github-com-matterbridge-gomatrix
3739 go-github-com-mattn-go-colorable
3740 go-github-com-mattn-go-isatty
3741 go-github-com-mattn-go-runewidth
3742 go-github-com-mattn-godown
3743 go-github-com-mgutz-ansi
3744 go-github-com-minio-md5-simd
3745 go-github-com-minio-sha256-simd
3746 go-github-com-mitchellh-go-homedir
3747 go-github-com-mitchellh-mapstructure
3748 go-github-com-modern-go-concurrent
3749 go-github-com-modern-go-reflect2
3750 go-github-com-opentracing-opentracing-go
3751 go-github-com-pborman-uuid
3752 go-github-com-pelletier-go-toml
3753 go-github-com-pelletier-go-toml-v2
3754 go-github-com-philhofer-fwd
3755 go-github-com-pkg-errors
3756 go-github-com-pmezard-go-difflib
3757 go-github-com-remyoudompheng-bigfft
3758 go-github-com-rivo-uniseg
3759 go-github-com-russross-blackfriday
3760 go-github-com-sirupsen-logrus
3761 go-github-com-skip2-go-qrcode
3762 go-github-com-spf13-afero
3763 go-github-com-spf13-cast
3764 go-github-com-spf13-jwalterweatherman
3765 go-github-com-spf13-pflag
3766 go-github-com-spf13-viper
3767 go-github-com-stretchr-testify
3768 go-github-com-subosito-gotenv
3769 go-github-com-tinylib-msgp
3770 go-github-com-valyala-bytebufferpool
3771 go-github-com-valyala-fasttemplate
3772 go-github-com-vmihailenco-msgpack-v5
3773 go-github-com-vmihailenco-tagparser
3774 ;; go.mau.fi
3775 go-go-mau-fi-libsignal
3776 go-go-mau-fi-whatsmeow
3777 ;; lukechampine.com
3778 go-lukechampine-com-uint128
3779 ;; modernc.org
3780 go-modernc-org-cc-v3
3781 go-modernc-org-mathutil
3782 go-modernc-org-memory
3783 go-modernc-org-opt
3784 go-modernc-org-strutil
3785 go-modernc-org-token))
3786 (synopsis "Bridge together various messaging networks and protocols")
3787 (description
3788 "Relays messages between different channels from various
3789messaging networks and protocols. So far it supports mattermost, IRC, gitter,
3790xmpp, slack, discord, telegram, rocketchat, twitch, ssh-chat, zulip, whatsapp,
3791keybase, matrix, microsoft teams, nextcloud, mumble, vk and more with REST
3792API. Mattermost is not required.")
3793 (home-page "https://github.com/42wim/matterbridge")
3794 (license license:asl2.0)))
3795
3796(define-public jj
3797 (package
3798 (name "jj")
3799 (version "2")
3800 (source (origin
3801 (method url-fetch)
3802 (uri (string-append "https://23.fi/jj/jj-" version ".tar.gz"))
3803 (sha256
3804 (base32
3805 "02xz2ci93bccvil5iff804mh3zr5iqkf6zx5mxgraz17xg0azlgh"))))
3806 (build-system gnu-build-system)
3807 (arguments
3808 (list #:tests? #f ;There are no tests.
3809 #:make-flags
3810 #~(list (string-append "CC=" #$(cc-for-target))
3811 (string-append "PREFIX=" #$output))
3812 #:phases
3813 #~(modify-phases %standard-phases
3814 (delete 'configure)
3815 (replace 'install
3816 (lambda* (#:key inputs outputs #:allow-other-keys)
3817 (let* ((out (assoc-ref outputs "out"))
3818 (bin (string-append out "/bin")))
3819 (install-file "jj" bin)))))))
3820 (native-inputs (list pkg-config))
3821 (inputs (list glib loudmouth))
3822 (home-page "https://23.fi/jj/")
3823 (synopsis "FIFO based Jabber client")
3824 (description
3825 "jj is a simple file-system-based Jabber client, inspired by ii IRC
3826client. Interaction with jj is done by writing and reading files from the
3827server directory which jj creates. It is perfect for bots and
3828notifications.")
3829 (license license:expat)))
3830
3831(define-public pounce
3832 (package
3833 (name "pounce")
3834 (version "3.2")
3835 (source
3836 (origin
3837 (method url-fetch)
3838 (uri (string-append "https://git.causal.agency/pounce/snapshot/pounce-"
3839 version ".tar.gz"))
3840 (sha256
3841 (base32 "1i0s76mip9kfmi85bfk10p4k1kg5wkq1gm4l9gadnq9ssxnvzvjs"))
3842 (patches (search-patches "pounce-readable-checks.patch"))))
3843 (outputs '("out" "debug"))
3844 (build-system gnu-build-system)
3845 (arguments
3846 (list
3847 #:tests? #f ;there are no tests
3848 #:phases #~(modify-phases %standard-phases
3849 (add-before 'configure 'pre-configure
3850 (lambda _
3851 ;; The build system is peculiar and sets environment
3852 ;; variables such as CFLAGS itself, which must not be
3853 ;; overridden via Make flags.
3854 (setenv "CC" #$(cc-for-target))
3855 (setenv "CFLAGS" "-g") ;for debug symbols
3856 (setenv "PREFIX" #$output))))))
3857 (native-inputs
3858 (list pkg-config universal-ctags))
3859 (inputs
3860 (list libressl libxcrypt))
3861 (home-page "https://git.causal.agency/pounce")
3862 (synopsis "Simple multi-client TLS-only IRC bouncer")
3863 (description
3864 "@command{pounce} is a multi-client, TLS-only IRC bouncer. It maintains
3865a persistent connection to an IRC server, acting as a proxy and buffer for
3866a number of clients.")
3867 (license license:gpl3+)))
3868
3869(define-public whatscli
3870 (package
3871 (name "whatscli")
3872 (version "1.1.6")
3873 (source
3874 (origin
3875 (method git-fetch)
3876 (uri (git-reference
3877 (url "https://github.com/normen/whatscli")
3878 (commit (string-append "v" version))))
3879 (file-name (git-file-name name version))
3880 (sha256
3881 (base32 "1vhmz4adyl921mk18hrzva7w9azfh0502lkn9n9s9vwd33b3nail"))))
3882 (build-system go-build-system)
3883 (arguments
3884 (list
3885 #:install-source? #f
3886 #:import-path "github.com/normen/whatscli"
3887 #:embed-files #~(list ".*\\.argo" ".*\\.json" ".*\\.sql")))
3888 (native-inputs
3889 (list go-code-rocketnine-space-tslocum-cbind
3890 go-github-com-adrg-xdg
3891 go-github-com-gdamore-tcell-v2
3892 go-github-com-gen2brain-beeep
3893 go-github-com-mattn-go-colorable
3894 go-github-com-mattn-go-sqlite3
3895 go-github-com-rivo-tview
3896 go-github-com-skip2-go-qrcode
3897 go-github-com-skratchdot-open-golang
3898 go-github-com-zyedidia-clipboard
3899 go-go-mau-fi-whatsmeow
3900 go-google-golang-org-protobuf
3901 go-gopkg-in-ini-v1))
3902 (home-page "https://github.com/normen/whatscli")
3903 (synopsis "Command line interface for WhatsApp")
3904 (description
3905 "WhatsCLI is a command-line interface for WhatsApp that connects
3906through the Web App API without requiring a browser. It provides a
3907terminal-based user interface built with tview, featuring:
3908@itemize
3909@item Sending and receiving WhatsApp messages in a terminal
3910@item QR code setup for simple authentication
3911@item Downloading and opening image, video, audio, and document attachments
3912@item Sending images, video, audio, and document attachments
3913@item Basic group management capabilities
3914@item Desktop notifications support
3915@item Color customization options
3916@end itemize")
3917 (license license:expat)))
3918
3919(define-public weechat-wee-slack
3920 (package
3921 (name "weechat-wee-slack")
3922 (version "2.11.0")
3923 (source
3924 (origin
3925 (method git-fetch)
3926 (uri (git-reference
3927 (url "https://github.com/wee-slack/wee-slack")
3928 (commit (string-append "v" version))))
3929 (file-name (git-file-name name version))
3930 (sha256
3931 (base32 "0kz0cskfqmf3wz71rvxrkiz40j7d084mawspzv72j9995v5by0y5"))))
3932 (build-system pyproject-build-system)
3933 (arguments
3934 (list
3935 #:phases
3936 #~(modify-phases %standard-phases
3937 (delete 'build)
3938 (replace 'install
3939 (lambda* (#:key inputs outputs #:allow-other-keys)
3940 ;; Augment sys.path so that dependencies are found.
3941 (substitute* "wee_slack.py"
3942 (("import sys\n" all)
3943 (apply string-append all
3944 (map (lambda (path)
3945 (string-append "sys.path.append('" path "')\n"))
3946 (string-split (getenv "GUIX_PYTHONPATH") #\:)))))
3947 ;; Install script.
3948 (install-file "wee_slack.py"
3949 (string-append #$output
3950 "/share/weechat/python")))))))
3951 (inputs (list python-websocket-client))
3952 (native-inputs (list python-mock python-pytest python-setuptools))
3953 (home-page "https://github.com/wee-slack/wee-slack")
3954 (synopsis "Weechat Slack script")
3955 (description "@code{weechat-wee-slack} is a WeeChat native client for
3956Slack. It provides supplemental features only available in the web/mobile
3957clients such as synchronizing read markers, typing notification, threads (and
3958more)! It connects via the Slack API, and maintains a persistent websocket
3959for notification of events.")
3960 (license license:expat)))
3961
3962(define-public python-pypresence
3963 (package
3964 (name "python-pypresence")
3965 (version "4.6.1")
3966 (source
3967 (origin
3968 (method url-fetch)
3969 (uri (pypi-uri "pypresence" version))
3970 (sha256
3971 (base32
3972 "0krk217hq8m76m7n6kv60wkm9fmpm8am9kdk6yv85qdllcb9a685"))))
3973 (build-system pyproject-build-system)
3974 (arguments
3975 (list
3976 #:build-backend "setuptools.build_meta"
3977 ;; Tests are broken, complaining "fixture 'client_id' not found."
3978 #:tests? #f))
3979 (native-inputs
3980 (list
3981 python-setuptools
3982 python-pytest
3983 python-pytest-asyncio
3984 python-wheel))
3985 (home-page "https://github.com/qwertyquerty/pypresence")
3986 (synopsis "Discord RPC client")
3987 (description "This package provides @code{python-pypresence}, a Discord
3988RPC client written in Python.")
3989 (license license:expat)))
3990
3991(define-public pn
3992 (package
3993 (name "pn")
3994 (version "0.9.0")
3995 (home-page "https://github.com/Orange-OpenSource/pn")
3996 (source (origin
3997 (method git-fetch)
3998 (uri (git-reference
3999 (url home-page)
4000 (commit (string-append "v" version))))
4001 (file-name (git-file-name name version))
4002 (sha256
4003 (base32
4004 "1lvzb0yixj7wmmqzsri20k9nn3gf06j0yjvmg2mi1zihywq7s4dx"))))
4005 (build-system cmake-build-system)
4006 (arguments
4007 (list #:tests? #f ;no tests
4008 #:phases #~(modify-phases %standard-phases
4009 (add-after 'unpack 'set-lib-destination
4010 (lambda _
4011 (substitute* "CMakeLists.txt"
4012 (("DESTINATION \\$\\{AWKLIBPATH\\}")
4013 "DESTINATION lib")))))))
4014 (inputs (list icu4c libphonenumber protobuf))
4015 (synopsis "Command-line validation tool for phone numbers")
4016 (description
4017 "@code{pn} provides a command line tool that allows users to operate on
4018phone numbers (get validity information, reformat them, or extract numbers from
4019a text snippet), using @code{libphonenumber}.")
4020 (license license:asl2.0)))
4021
4022(define-public senpai
4023 (package
4024 (name "senpai")
4025 (version "0.4.1")
4026 (source
4027 (origin
4028 (method git-fetch)
4029 (uri
4030 (git-reference
4031 (url "https://git.sr.ht/~delthas/senpai")
4032 (commit (string-append "v" version))))
4033 (file-name (git-file-name name version))
4034 (sha256
4035 (base32 "1d16wbqm3hrydcb0308mg5cvgzz85vqq1bnwx0ly4647fr3f21wp"))))
4036 (build-system go-build-system)
4037 (arguments
4038 (list #:import-path "git.sr.ht/~delthas/senpai/cmd/senpai"
4039 #:unpack-path "git.sr.ht/~delthas/senpai"
4040 #:install-source? #f
4041 ;; Step away from cmd/senpai to test the whole project.
4042 #:test-subdirs #~(list "../../...")
4043 #:phases
4044 #~(modify-phases
4045 %standard-phases
4046 (add-after 'build 'build-doc
4047 (lambda* (#:key unpack-path #:allow-other-keys)
4048 (invoke "make" "doc"
4049 "-C" (string-append "src/" unpack-path))))
4050 (add-after 'install 'install-doc
4051 (lambda* (#:key unpack-path #:allow-other-keys)
4052 (install-file
4053 (string-append "src/" unpack-path "/doc/senpai.1")
4054 (string-append #$output "/share/man/man1"))
4055 (install-file
4056 (string-append "src/" unpack-path "/doc/senpai.5")
4057 (string-append #$output "/share/man/man5"))))
4058 (add-after 'install 'install-desktop-file
4059 (lambda* (#:key unpack-path #:allow-other-keys)
4060 (install-file
4061 (string-append "src/" unpack-path "/contrib/senpai.desktop")
4062 (string-append #$output "/share/applications")))))))
4063 (native-inputs
4064 (list go-codeberg-org-emersion-go-scfg
4065 go-git-sr-ht-rockorager-vaxis
4066 go-github-com-containerd-console
4067 go-github-com-delthas-go-libnp
4068 go-github-com-delthas-go-localeinfo
4069 go-github-com-disintegration-imaging
4070 go-github-com-godbus-dbus-v5
4071 go-github-com-rivo-uniseg
4072 go-golang-org-x-net
4073 go-golang-org-x-time
4074 go-mvdan-cc-xurls-v2
4075 go-github-com-mattn-go-runewidth
4076 scdoc
4077 which))
4078 (home-page "https://sr.ht/~delthas/senpai")
4079 (synopsis "Modern terminal IRC client")
4080 (description
4081 "@code{senpai} is an IRC client that works best with bouncers.")
4082 (license license:isc)))
4083
4084(define-public ejabberd
4085 (package
4086 (name "ejabberd")
4087 (version "26.04")
4088 (source
4089 (origin
4090 (method git-fetch)
4091 (uri (git-reference
4092 (url "https://github.com/processone/ejabberd")
4093 (commit version)))
4094 (file-name (git-file-name name version))
4095 (sha256
4096 (base32 "01wz6hhqpnyvp18np04n137bdnx28jashanip62f8agg057bjpiw"))))
4097 (build-system rebar-build-system)
4098 (inputs (list bash-minimal coreutils procps sed))
4099 (native-inputs
4100 (list autoconf
4101 automake
4102 erlang-base64url
4103 erlang-cache-tab
4104 erlang-eimp
4105 erlang-epam
4106 erlang-eredis
4107 erlang-erlydtl
4108 erlang-esip
4109 erlang-ezlib
4110 erlang-fast-tls
4111 erlang-fast-xml
4112 erlang-fast-yaml
4113 erlang-idna
4114 erlang-jiffy
4115 erlang-jose
4116 erlang-luerl
4117 erlang-meck
4118 erlang-mqtree
4119 erlang-p1-acme
4120 erlang-p1-mysql
4121 erlang-p1-oauth2
4122 erlang-p1-pgsql
4123 erlang-p1-utils
4124 erlang-pc
4125 erlang-pkix
4126 erlang-provider-asn1
4127 erlang-stringprep
4128 erlang-stun
4129 erlang-sqlite3
4130 erlang-unicode-util-compat
4131 erlang-xmpp
4132 erlang-yconf))
4133 (arguments
4134 (list
4135 #:phases
4136 #~(modify-phases %standard-phases
4137 (add-after 'unpack 'set-environment
4138 (lambda _
4139 (setenv "HOME" "/tmp")
4140 (setenv "CC" "gcc")))
4141 (add-after 'unpack 'bootstrap
4142 (lambda _
4143 (invoke "aclocal" "-I" "m4")
4144 (invoke "autoconf" "-f")))
4145 (add-after 'bootstrap 'make-various-fixes
4146 (lambda* (#:key inputs #:allow-other-keys)
4147 (let ((sh (search-input-file inputs "/bin/sh")))
4148 ;; Fix shell locations.
4149 (substitute* "configure" (("/bin/sh") sh))
4150 (substitute* "rebar.config.script"
4151 (("sh -c '") (string-append sh " -c '")))
4152 ;; Do not recompile dependences.
4153 (substitute* "rebar.config"
4154 (("\\[\\{\"eimp\", \\[\\]\\},") "[]}.\n{nop, ["))
4155 ;; Do not include source files into release.
4156 (substitute* "rebar.config"
4157 (("\\{include_src, true\\},") "{include_src, false},"))
4158 ;; Do not install erl wrapper, we will do it ourselves.
4159 (substitute* "rebar.config"
4160 (("\\{copy, \"rel/files/erl\",")
4161 "%{copy, \"rel/files/erl\","))
4162 ;; It seems ejabberd still needs jiffy due to p1_acme.
4163 (substitute* "rebar.config"
4164 (("\\{if_version_below, \"27\",") "{if_version_below, \"30\","))
4165 ;; Unpin pinned dependences.
4166 (substitute* "rebar.lock"
4167 ((",1\\}") ",0}"))
4168 ;; Set proper paths.
4169 (substitute* "vars.config.in"
4170 (("\\{sysconfdir, \".*\"\\}\\.")
4171 "{sysconfdir, \"/etc\"}."))
4172 (substitute* "vars.config.in"
4173 (("\\{localstatedir, \".*\"\\}\\.")
4174 "{sysconfdir, \"/var\"}."))
4175 (substitute* "vars.config.in"
4176 (("\\{config_dir, \".*\"\\}\\.")
4177 "{config_dir, \"/etc/ejabberd\"}."))
4178 (substitute* "vars.config.in"
4179 (("\\{logs_dir, \".*\"\\}\\.")
4180 "{logs_dir, \"/var/log/ejabberd\"}."))
4181 (substitute* "vars.config.in"
4182 (("\\{spool_dir, \".*\"\\}\\.")
4183 "{spool_dir, \"/var/lib/ejabberd\"}.")))))
4184 (add-after 'make-various-fixes 'configure
4185 (lambda _
4186 (invoke "./configure"
4187 (string-append "--prefix=" #$output))))
4188 (replace 'build
4189 (lambda _
4190 (invoke "make" "rel")))
4191 (replace 'install
4192 (lambda _
4193 (let ((ejabberd "_build/prod/rel/ejabberd"))
4194 (copy-recursively
4195 (string-append ejabberd "/conf")
4196 (string-append ejabberd "/share/doc/ejabberd-"
4197 #$version "/examples"))
4198 (for-each
4199 (lambda (rmdir)
4200 (delete-file-recursively
4201 (string-append ejabberd "/" rmdir)))
4202 '("conf" "database" "logs"))
4203 (delete-file
4204 (string-append (string-append ejabberd "/ejabberd-"
4205 #$version ".tar.gz")))
4206 (let ((erts (car (find-files ejabberd "erts-.*"
4207 #:directories? #t))))
4208 (delete-file (string-append erts "/bin/erl"))
4209 (install-file "rel/files/erl"
4210 (string-append erts "/bin")))
4211 (chmod (string-append ejabberd
4212 "/bin/install_upgrade.escript") #o755)
4213 (copy-recursively ejabberd #$output))))
4214 (add-after 'install 'wrap-program
4215 (lambda* (#:key inputs outputs #:allow-other-keys)
4216 (let ((out (assoc-ref outputs "out")))
4217 (wrap-program (string-append out "/bin/ejabberdctl")
4218 `("PATH" ":" suffix
4219 ,(map (lambda (command)
4220 (dirname
4221 (search-input-file
4222 inputs (string-append "bin/" command))))
4223 (list "date" "dirname" "grep"
4224 "id" "pgrep" "sed"))))))))))
4225 (synopsis "Robust, Ubiquitous and Massively Scalable Messaging Platform")
4226 (description "This package provides Ejabberd -- Robust, Ubiquitous and
4227Massively Scalable Messaging Platform. It supports XMPP, MQTT and SIP
4228protocols.")
4229 (home-page "https://www.ejabberd.im")
4230 (license license:gpl2+)))
4231
4232;;; messaging.scm ends here