messaging.scm 112 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996
  1. ;;; GNU Guix --- Functional package management for GNU
  2. ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
  3. ;;; Copyright © 2014, 2017 Julien Lepiller <julien@lepiller.eu>
  4. ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
  5. ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
  6. ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
  7. ;;; Copyright © 2015, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
  8. ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
  9. ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
  10. ;;; Copyright © 2016, 2017, 2018, 2019 Clément Lassieur <clement@lassieur.org>
  11. ;;; Copyright © 2017 Mekeor Melire <mekeor.melire@gmail.com>
  12. ;;; Copyright © 2017, 2018, 2020 Arun Isaac <arunisaac@systemreboot.net>
  13. ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
  14. ;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org>
  15. ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
  16. ;;; Copyright © 2018 Leo Famulari <leo@famulari.name>
  17. ;;; Copyright © 2018 Pierre-Antoine Rouby <contact@parouby.fr>
  18. ;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
  19. ;;; Copyright © 2019, 2020 Brett Gilio <brettg@gnu.org>
  20. ;;; Copyright © 2019, 2020 Timotej Lazar <timotej.lazar@araneo.si>
  21. ;;; Copyright © 2020, 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
  22. ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
  23. ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
  24. ;;; Copyright © 2020 Reza Alizadeh Majd <r.majd@pantherx.org>
  25. ;;; Copyright © 2020 Jonathan Brielmaier <jonathan.brielmaier@web.de>
  26. ;;; Copyright © 2020 Mason Hock <chaosmonk@riseup.net>
  27. ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
  28. ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
  29. ;;; Copyright © 2020, 2021 Robert Karszniewicz <avoidr@posteo.de>
  30. ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
  31. ;;; Copyright © 2021 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
  32. ;;;
  33. ;;; This file is part of GNU Guix.
  34. ;;;
  35. ;;; GNU Guix is free software; you can redistribute it and/or modify it
  36. ;;; under the terms of the GNU General Public License as published by
  37. ;;; the Free Software Foundation; either version 3 of the License, or (at
  38. ;;; your option) any later version.
  39. ;;;
  40. ;;; GNU Guix is distributed in the hope that it will be useful, but
  41. ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
  42. ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  43. ;;; GNU General Public License for more details.
  44. ;;;
  45. ;;; You should have received a copy of the GNU General Public License
  46. ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
  47. (define-module (gnu packages messaging)
  48. #:use-module (gnu packages)
  49. #:use-module (gnu packages admin)
  50. #:use-module (gnu packages aidc)
  51. #:use-module (gnu packages aspell)
  52. #:use-module (gnu packages audio)
  53. #:use-module (gnu packages autotools)
  54. #:use-module (gnu packages avahi)
  55. #:use-module (gnu packages base)
  56. #:use-module (gnu packages bash)
  57. #:use-module (gnu packages bison)
  58. #:use-module (gnu packages boost)
  59. #:use-module (gnu packages check)
  60. #:use-module (gnu packages compression)
  61. #:use-module (gnu packages cpp)
  62. #:use-module (gnu packages crypto)
  63. #:use-module (gnu packages curl)
  64. #:use-module (gnu packages cyrus-sasl)
  65. #:use-module (gnu packages databases)
  66. #:use-module (gnu packages docbook)
  67. #:use-module (gnu packages documentation)
  68. #:use-module (gnu packages enchant)
  69. #:use-module (gnu packages fontutils)
  70. #:use-module (gnu packages freedesktop)
  71. #:use-module (gnu packages gettext)
  72. #:use-module (gnu packages glib)
  73. #:use-module (gnu packages gnome)
  74. #:use-module (gnu packages gnupg)
  75. #:use-module (gnu packages golang)
  76. #:use-module (gnu packages gperf)
  77. #:use-module (gnu packages graphviz)
  78. #:use-module (gnu packages gstreamer)
  79. #:use-module (gnu packages gtk)
  80. #:use-module (gnu packages guile)
  81. #:use-module (gnu packages icu4c)
  82. #:use-module (gnu packages image)
  83. #:use-module (gnu packages kde)
  84. #:use-module (gnu packages kerberos)
  85. #:use-module (gnu packages less)
  86. #:use-module (gnu packages libcanberra)
  87. #:use-module (gnu packages libidn)
  88. #:use-module (gnu packages libreoffice)
  89. #:use-module (gnu packages linux)
  90. #:use-module (gnu packages logging)
  91. #:use-module (gnu packages lua)
  92. #:use-module (gnu packages man)
  93. #:use-module (gnu packages markup)
  94. #:use-module (gnu packages matrix)
  95. #:use-module (gnu packages mono)
  96. #:use-module (gnu packages mpd)
  97. #:use-module (gnu packages ncurses)
  98. #:use-module (gnu packages networking)
  99. #:use-module (gnu packages nss)
  100. #:use-module (gnu packages pcre)
  101. #:use-module (gnu packages perl)
  102. #:use-module (gnu packages photo)
  103. #:use-module (gnu packages php)
  104. #:use-module (gnu packages pkg-config)
  105. #:use-module (gnu packages protobuf)
  106. #:use-module (gnu packages python)
  107. #:use-module (gnu packages python-check)
  108. #:use-module (gnu packages python-crypto)
  109. #:use-module (gnu packages python-web)
  110. #:use-module (gnu packages python-xyz)
  111. #:use-module (gnu packages qt)
  112. #:use-module (gnu packages readline)
  113. #:use-module (gnu packages ruby)
  114. #:use-module (gnu packages sphinx)
  115. #:use-module (gnu packages sqlite)
  116. #:use-module (gnu packages tcl)
  117. #:use-module (gnu packages texinfo)
  118. #:use-module (gnu packages textutils)
  119. #:use-module (gnu packages tls)
  120. #:use-module (gnu packages video)
  121. #:use-module (gnu packages web)
  122. #:use-module (gnu packages xdisorg)
  123. #:use-module (gnu packages xiph)
  124. #:use-module (gnu packages xml)
  125. #:use-module (gnu packages xorg)
  126. #:use-module (guix build-system cmake)
  127. #:use-module (guix build-system go)
  128. #:use-module (guix build-system glib-or-gtk)
  129. #:use-module (guix build-system gnu)
  130. #:use-module (guix build-system meson)
  131. #:use-module (guix build-system perl)
  132. #:use-module (guix build-system python)
  133. #:use-module (guix build-system qt)
  134. #:use-module (guix build-system trivial)
  135. #:use-module (guix download)
  136. #:use-module (guix git-download)
  137. #:use-module (guix hg-download)
  138. #:use-module ((guix licenses) #:prefix license:)
  139. #:use-module (guix packages)
  140. #:use-module (guix utils))
  141. (define-public omemo-wget
  142. (package
  143. (name "omemo-wget")
  144. (version "0.3.0")
  145. (source
  146. (origin
  147. (method git-fetch)
  148. (uri
  149. (git-reference
  150. (url "https://github.com/roobre/omemo-wget")
  151. (commit (string-append "v" version))))
  152. (file-name (git-file-name name version))
  153. (sha256
  154. (base32 "0s3vfaicw5xbjl9yiyr4ckrzhzqbvfh1w2ih1igavlfpgw4v7kva"))))
  155. (build-system go-build-system)
  156. (arguments
  157. `(#:import-path "github.com/roobre/omemo-wget"
  158. #:phases
  159. (modify-phases %standard-phases
  160. (add-after 'unpack 'patch
  161. (lambda* (#:key inputs #:allow-other-keys)
  162. (let* ((xdg-utils (assoc-ref inputs "xdg-utils"))
  163. (xdg-open (string-append xdg-utils "/bin/xdg-open")))
  164. (substitute* (find-files "." "\\.go$")
  165. ;; Correct the import path of 'aesgcm' package.
  166. (("roob\\.re/omemo-wget/aesgcm")
  167. "github.com/roobre/omemo-wget/aesgcm")
  168. ;; Use absolute path of 'xdg-open' program.
  169. (("xdg-open") xdg-open))))))))
  170. (inputs
  171. `(("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
  172. ("xdg-utils" ,xdg-utils)))
  173. (home-page "https://roob.re/omemo-wget")
  174. (synopsis "Program to download and decrypt @code{aesgcm://} URLs")
  175. (description "OMEMO-wget is a tool to handle cryptographic URLs, generated
  176. by @acronym{OMEMO, OMEMO Multi-End Message and Object Encryption}, during
  177. XMPP-based sessions.")
  178. (license license:lgpl3+)))
  179. (define-public psi
  180. (package
  181. (name "psi")
  182. (version "1.5")
  183. (source
  184. (origin
  185. (method url-fetch)
  186. (uri
  187. (string-append "mirror://sourceforge/psi/Psi/"
  188. version "/psi-" version ".tar.xz"))
  189. (modules '((guix build utils)))
  190. (snippet
  191. `(begin
  192. (delete-file-recursively "3rdparty")))
  193. (sha256
  194. (base32 "1dxmm1d1zr0pfs51lba732ipm6hm2357jlfb934lvarzsh7karri"))))
  195. (build-system qt-build-system)
  196. (arguments
  197. `(#:tests? #f ; No target
  198. #:configure-flags
  199. (list
  200. "-DUSE_ENCHANT=ON"
  201. "-DUSE_CCACHE=OFF")
  202. #:phases
  203. (modify-phases %standard-phases
  204. (add-after 'unpack 'patch-cmake
  205. (lambda _
  206. (substitute* "cmake/modules/FindHunspell.cmake"
  207. (("hunspell-1.6")
  208. "hunspell-1.7"))
  209. #t)))))
  210. (native-inputs
  211. `(("pkg-config" ,pkg-config)
  212. ("python" ,python-wrapper)
  213. ("ruby" ,ruby)))
  214. (inputs
  215. `(("aspell" ,aspell)
  216. ("enchant" ,enchant-1.6)
  217. ("hunspell" ,hunspell)
  218. ("libidn" ,libidn)
  219. ("qca" ,qca)
  220. ("qtbase" ,qtbase-5)
  221. ("qtmultimedia" ,qtmultimedia)
  222. ("qtsvg" ,qtsvg)
  223. ("qtwebkit" ,qtwebkit)
  224. ("qtx11extras" ,qtx11extras)
  225. ("x11" ,libx11)
  226. ("xext" ,libxext)
  227. ("xcb" ,libxcb)
  228. ("zlib" ,zlib)))
  229. (synopsis "Qt-based XMPP Client")
  230. (description "Psi is a capable XMPP client aimed at experienced users.
  231. Its design goals are simplicity and stability.")
  232. (home-page "https://psi-im.org")
  233. (license license:gpl2+)))
  234. (define-public libgnt
  235. (package
  236. (name "libgnt")
  237. (version "2.14.1")
  238. (source
  239. (origin
  240. (method url-fetch)
  241. (uri
  242. (string-append "mirror://sourceforge/pidgin/libgnt/"
  243. version "/libgnt-" version ".tar.xz"))
  244. (sha256
  245. (base32 "1n2bxg0ignn53c08cp69pj4sdg53kwlqn23rincyjmpr327fdhsy"))))
  246. (build-system meson-build-system)
  247. (outputs '("out" "doc"))
  248. (arguments
  249. `(#:glib-or-gtk? #t ; To wrap binaries and/or compile schemas
  250. #:phases
  251. (modify-phases %standard-phases
  252. (add-after 'unpack 'patch-ncurses-path
  253. (lambda* (#:key inputs #:allow-other-keys)
  254. (substitute* "meson.build"
  255. (("'/usr'")
  256. (string-append "'"
  257. (assoc-ref inputs "ncurses")
  258. "'")))
  259. #t))
  260. (add-before 'configure 'patch-docbook-xml
  261. (lambda* (#:key inputs #:allow-other-keys)
  262. (with-directory-excursion "doc"
  263. (substitute* "libgnt-docs.xml"
  264. (("http://www.oasis-open.org/docbook/xml/4.1.2/")
  265. (string-append (assoc-ref inputs "docbook-xml")
  266. "/xml/dtd/docbook/"))))
  267. #t))
  268. (add-after 'install 'move-doc
  269. (lambda* (#:key outputs #:allow-other-keys)
  270. (let* ((out (assoc-ref outputs "out"))
  271. (doc (assoc-ref outputs "doc")))
  272. (mkdir-p (string-append doc "/share"))
  273. (rename-file
  274. (string-append out "/share/gtk-doc")
  275. (string-append doc "/share/gtk-doc"))
  276. #t))))))
  277. (native-inputs
  278. `(("docbook-xml" ,docbook-xml-4.1.2)
  279. ("glib:bin" ,glib "bin")
  280. ("gobject-introspection" ,gobject-introspection)
  281. ("gtk-doc" ,gtk-doc)
  282. ("pkg-config" ,pkg-config)))
  283. (inputs
  284. `(("ncurses" ,ncurses)))
  285. (propagated-inputs
  286. `(("glib" ,glib)
  287. ("libxml" ,libxml2)
  288. ("python" ,python-2)))
  289. (synopsis "GLib Ncurses Toolkit")
  290. (description "GNT is an ncurses toolkit for creating text-mode graphical
  291. user interfaces in a fast and easy way. It is based on GLib and ncurses.")
  292. (home-page "https://keep.imfreedom.org/libgnt/libgnt")
  293. (license license:gpl2+)))
  294. (define-public libgadu
  295. (package
  296. (name "libgadu")
  297. (version "1.12.2")
  298. (source
  299. (origin
  300. (method git-fetch)
  301. (uri
  302. (git-reference
  303. (url "https://github.com/wojtekka/libgadu.git")
  304. (commit version)))
  305. (file-name
  306. (git-file-name name version))
  307. (sha256
  308. (base32 "1s16cripy5w9k12534qb012iwc5m9qcjyrywgsziyn3kl3i0aa8h"))))
  309. (build-system gnu-build-system)
  310. (arguments
  311. `(#:configure-flags
  312. (list
  313. "--disable-static")
  314. #:phases
  315. (modify-phases %standard-phases
  316. (add-after 'unpack 'patch-shebangs
  317. (lambda* (#:key inputs #:allow-other-keys)
  318. (substitute* "protobufgen.sh"
  319. (("/bin/sh")
  320. (search-input-file inputs "/bin/sh"))))))))
  321. (native-inputs
  322. `(("autoconf" ,autoconf)
  323. ("automake" ,automake)
  324. ("bash" ,bash)
  325. ("doxygen" ,doxygen)
  326. ("libtool" ,libtool)
  327. ("perl" ,perl)
  328. ("pkg-config" ,pkg-config)))
  329. (inputs
  330. `(("curl" ,curl)
  331. ("expat" ,expat)
  332. ("libprotobuf-c" ,protobuf-c)
  333. ("libxml" ,libxml2)
  334. ("openssl" ,openssl)
  335. ("zlib" ,zlib)))
  336. (propagated-inputs
  337. `(("gnutls" ,gnutls)))
  338. (synopsis "Library for handling the protocol of Gadu-Gadu")
  339. (description "LibGadu is library for handling Gadu-Gadu instant messenger
  340. protocol. The library is written in C and aims to be operating system and
  341. environment independent.")
  342. (home-page "https://libgadu.net/index.en.html")
  343. (license license:lgpl2.1+)))
  344. (define-public silc-toolkit
  345. (package
  346. (name "silc-toolkit")
  347. (version "1.1.12")
  348. (source
  349. (origin
  350. (method url-fetch)
  351. (uri
  352. (string-append "mirror://sourceforge/silc/silc/toolkit/sources/silc-toolkit-"
  353. version ".tar.gz"))
  354. (sha256
  355. (base32 "0mnvf9n7qriadg0p7a8qmvcayhnns2g9fhmcymavlm0v8xrky33y"))))
  356. (build-system gnu-build-system)
  357. (arguments
  358. `(#:configure-flags
  359. (list
  360. "--disable-static"
  361. "--enable-ipv6"
  362. "--enable-stack-trace")
  363. #:phases
  364. (modify-phases %standard-phases
  365. (add-after 'unpack 'trigger-bootstrap
  366. (lambda _
  367. (delete-file "configure")
  368. (delete-file "Makefile.in")
  369. #t)))))
  370. (native-inputs
  371. `(("autoconf" ,autoconf)
  372. ("automake" ,automake)
  373. ("libtool" ,libtool)
  374. ("perl" ,perl)
  375. ("pkg-config" ,pkg-config)))
  376. (synopsis "SILC ToolKit")
  377. (description "SILC (Secure Internet Live Conferencing) is a modern and secure
  378. conferencing protocol. It provides all the common conferencing services like
  379. private messages, instant messages, channels and groups, and video and audio
  380. conferencing.")
  381. (home-page "https://silc.github.io/info")
  382. (license
  383. ;; Dual-licensed
  384. (list
  385. license:gpl2+
  386. license:bsd-2))))
  387. (define-public meanwhile
  388. (package
  389. (name "meanwhile")
  390. (version "1.1.1")
  391. (source
  392. (origin
  393. (method git-fetch)
  394. (uri
  395. (git-reference
  396. (url "https://github.com/obriencj/meanwhile.git")
  397. (commit
  398. (string-append "v" version))))
  399. (file-name
  400. (git-file-name name version))
  401. (sha256
  402. (base32 "1k1gvmx1ikm0y1mdmm495rzkb00pl170jfaf2dy0n5aiiknkk7q3"))))
  403. (build-system glib-or-gtk-build-system)
  404. (native-inputs
  405. `(("autoconf" ,autoconf)
  406. ("automake" ,automake)
  407. ("doxygen" ,doxygen)
  408. ("libtool" ,libtool)
  409. ("pkg-config" ,pkg-config)))
  410. (propagated-inputs
  411. `(("glib" ,glib)))
  412. (synopsis "Library for Lotus Instant Messaging")
  413. (description "Meanwhile is a library for connecting to a LIM (Lotus Instant
  414. Messaging, formerly Lotus Sametime, formerly VPBuddy) community. It uses a
  415. protocol based in part off of the IMPP draft(*1), and in part off of traces of
  416. TCP sessions from existing clients.")
  417. (home-page "https://github.com/obriencj/meanwhile")
  418. (license license:lgpl3)))
  419. (define-public poezio
  420. (package
  421. (name "poezio")
  422. (version "0.13.1")
  423. (source
  424. (origin
  425. (method git-fetch)
  426. (uri
  427. (git-reference
  428. (url "https://lab.louiz.org/poezio/poezio.git")
  429. (commit
  430. (string-append "v" version))))
  431. (file-name
  432. (git-file-name name version))
  433. (sha256
  434. (base32 "041y61pcbdb86s04qwp8s1g6bp84yskc7vdizwpi2hz18y01x5fy"))))
  435. (build-system python-build-system)
  436. (arguments
  437. `(#:phases
  438. (modify-phases %standard-phases
  439. (add-after 'unpack 'patch
  440. (lambda _
  441. (substitute* "setup.py"
  442. (("'CC', 'cc'")
  443. "'CC', 'gcc'"))
  444. #t)))))
  445. (native-inputs
  446. `(("pkg-config" ,pkg-config)
  447. ("python-setuptools" ,python-setuptools)
  448. ("python-sphinx" ,python-sphinx)))
  449. (inputs
  450. `(("python-mpd2" ,python-mpd2)
  451. ("python-potr" ,python-potr)
  452. ("python-pyasn1" ,python-pyasn1)
  453. ("python-pyasn1-modules" ,python-pyasn1-modules)
  454. ("python-pygments" ,python-pygments)
  455. ("python-pyinotify" ,python-pyinotify)
  456. ;("python" ,python)
  457. ("python-qrcode" ,python-qrcode)
  458. ("python-slixmpp" ,python-slixmpp)))
  459. (synopsis "Console Jabber/XMPP Client")
  460. (description "Poezio is a free console XMPP client (the protocol on which
  461. the Jabber IM network is built).
  462. Its goal is to let you connect very easily (no account creation needed) to the
  463. network and join various chatrooms, immediately. It tries to look like the
  464. most famous IRC clients (weechat, irssi, etc). Many commands are identical and
  465. you won't be lost if you already know these clients. Configuration can be
  466. made in a configuration file or directly from the client.
  467. You'll find the light, fast, geeky and anonymous spirit of IRC while using a
  468. powerful, standard and open protocol.")
  469. (home-page "https://poez.io/en/")
  470. (license license:zlib)))
  471. (define-public libotr
  472. (package
  473. (name "libotr")
  474. (version "4.1.1")
  475. (source
  476. (origin
  477. (method url-fetch)
  478. (uri (string-append "https://otr.cypherpunks.ca/libotr-"
  479. version ".tar.gz"))
  480. (sha256
  481. (base32 "1x8rliydhbibmzwdbyr7pd7n87m2jmxnqkpvaalnf4154hj1hfwb"))
  482. (patches
  483. (search-patches "libotr-test-auth-fix.patch"))))
  484. (build-system gnu-build-system)
  485. (native-inputs
  486. `(("perl" ,perl))) ; for the test suite
  487. (inputs
  488. `(("libgpg-error" ,libgpg-error)))
  489. (propagated-inputs
  490. `(("libgcrypt" ,libgcrypt))) ; libotr headers include gcrypt.h
  491. (synopsis "Off-the-Record (OTR) Messaging Library and Toolkit")
  492. (description "OTR allows you to have private conversations over instant
  493. messaging by providing: (1) Encryption: No one else can read your instant
  494. messages. (2) Authentication: You are assured the correspondent is who you
  495. think it is. (3) Deniability: The messages you send do not have digital
  496. signatures that are checkable by a third party. Anyone can forge messages
  497. after a conversation to make them look like they came from you. However,
  498. during a conversation, your correspondent is assured the messages he sees are
  499. authentic and unmodified. (4) Perfect forward secrecy: If you lose control of
  500. your private keys, no previous conversation is compromised.")
  501. (home-page "https://otr.cypherpunks.ca/")
  502. (license
  503. (list
  504. ;; Library
  505. license:lgpl2.1+
  506. ;; Others
  507. license:gpl2+))))
  508. (define-public libsignal-protocol-c
  509. (package
  510. (name "libsignal-protocol-c")
  511. (version "2.3.3")
  512. (source (origin
  513. (method git-fetch)
  514. (uri (git-reference
  515. (url "https://github.com/WhisperSystems/libsignal-protocol-c")
  516. (commit (string-append "v" version))))
  517. (file-name (git-file-name name version))
  518. (sha256
  519. (base32
  520. "0z5p03vk15i6h870azfjgyfgxhv31q2vq6rfhnybrnkxq2wqzwhk"))))
  521. (arguments
  522. `(;; Required for proper linking and for tests to run.
  523. #:configure-flags '("-DBUILD_SHARED_LIBS=on" "-DBUILD_TESTING=1")))
  524. (build-system cmake-build-system)
  525. (inputs `( ;; Required for tests:
  526. ("check" ,check)
  527. ("openssl" ,openssl)))
  528. (native-inputs `(("pkg-config" ,pkg-config)))
  529. (home-page "https://github.com/WhisperSystems/libsignal-protocol-c")
  530. (synopsis "Implementation of a ratcheting forward secrecy protocol")
  531. (description "libsignal-protocol-c is an implementation of a ratcheting
  532. forward secrecy protocol that works in synchronous and asynchronous
  533. messaging environments. It can be used with messaging software to provide
  534. end-to-end encryption.")
  535. (license license:gpl3+)))
  536. (define-public bitlbee
  537. (package
  538. (name "bitlbee")
  539. (version "3.6")
  540. (source (origin
  541. (method url-fetch)
  542. (uri (string-append "https://get.bitlbee.org/src/bitlbee-"
  543. version ".tar.gz"))
  544. (sha256
  545. (base32 "0zhhcbcr59sx9h4maf8zamzv2waya7sbsl7w74gbyilvy93dw5cz"))))
  546. (build-system gnu-build-system)
  547. (native-inputs `(("pkg-config" ,pkg-config)
  548. ;; Note: Change to 'check' for versions > 3.6.
  549. ("check" ,check-0.12)))
  550. (inputs `(("glib" ,glib)
  551. ("libotr" ,libotr)
  552. ("gnutls" ,gnutls)
  553. ("python" ,python)
  554. ("perl" ,perl)))
  555. (arguments
  556. `(#:phases
  557. (modify-phases %standard-phases
  558. (add-before 'configure 'set-python
  559. (lambda _ (setenv "PYTHON" (which "python3")) #t))
  560. (add-after 'install 'install-etc
  561. (lambda* (#:key (make-flags '()) #:allow-other-keys)
  562. (apply invoke "make" "install-etc" make-flags)))
  563. (add-after 'install-etc 'install-lib
  564. (lambda* (#:key (make-flags '()) #:allow-other-keys)
  565. (apply invoke "make" "install-dev" make-flags)))
  566. (replace 'configure
  567. ;; bitlbee's configure script does not tolerate many of the
  568. ;; variable settings that Guix would pass to it.
  569. (lambda* (#:key outputs #:allow-other-keys)
  570. (invoke "./configure"
  571. (string-append "--prefix="
  572. (assoc-ref outputs "out"))
  573. "--otr=1"))))))
  574. (synopsis "IRC to instant messaging gateway")
  575. (description "BitlBee brings IM (instant messaging) to IRC clients, for
  576. people who have an IRC client running all the time and don't want to run an
  577. additional IM client. BitlBee currently supports XMPP/Jabber (including
  578. Google Talk), MSN Messenger, Yahoo! Messenger, AIM and ICQ, and the Twitter
  579. microblogging network (plus all other Twitter API compatible services like
  580. identi.ca and status.net).")
  581. (home-page "https://www.bitlbee.org/")
  582. (license (list license:gpl2+ license:bsd-2))))
  583. (define-public bitlbee-purple
  584. ;; This variant uses libpurple, which provides support for more protocols at
  585. ;; the expense of a much bigger closure.
  586. (package/inherit bitlbee
  587. (name "bitlbee-purple")
  588. (synopsis "IRC to instant messaging gateway (using Pidgin's libpurple)")
  589. (inputs `(("purple" ,pidgin)
  590. ,@(package-inputs bitlbee)))
  591. (arguments
  592. (substitute-keyword-arguments (package-arguments bitlbee)
  593. ((#:phases phases '%standard-phases)
  594. `(modify-phases ,phases
  595. (replace 'configure ;add "--purple=1"
  596. (lambda* (#:key outputs #:allow-other-keys)
  597. (invoke "./configure"
  598. (string-append "--prefix="
  599. (assoc-ref outputs "out"))
  600. "--otr=1" "--purple=1")))))
  601. ((#:tests? _ #t)
  602. ;; XXX: Tests fail to link, and ./configure says that it's "supported
  603. ;; on a best-effort basis" anyway.
  604. #f)))))
  605. (define-public bitlbee-discord
  606. (package
  607. (name "bitlbee-discord")
  608. (version "0.4.3")
  609. (source
  610. (origin
  611. (method git-fetch)
  612. (uri (git-reference
  613. (url "https://github.com/sm00th/bitlbee-discord")
  614. (commit version)))
  615. (file-name (git-file-name name version))
  616. (sha256
  617. (base32 "00qgdvrp7hv02n0ns685igp810zxmv3adsama8601122al6x041n"))))
  618. (build-system gnu-build-system)
  619. (arguments
  620. `(#:configure-flags
  621. (let ((out (assoc-ref %outputs "out")))
  622. (list (string-append "--with-bdatadir=" out "/share/bitlbee/")
  623. (string-append "--with-plugindir=" out "/lib/bitlbee/")))
  624. #:phases
  625. (modify-phases %standard-phases
  626. (add-after 'unpack 'patch-autogen
  627. (lambda _
  628. (let ((sh (which "sh")))
  629. (substitute* "autogen.sh" (("/bin/sh") sh))
  630. (setenv "CONFIG_SHELL" sh)))))))
  631. (inputs `(("glib" ,glib)))
  632. (native-inputs `(("pkg-config" ,pkg-config)
  633. ("autoconf" ,autoconf)
  634. ("automake" ,automake)
  635. ("texinfo" ,texinfo)
  636. ("libtool" ,libtool)
  637. ("bitlbee" ,bitlbee) ; needs bitlbee headers
  638. ("bash" ,bash)))
  639. (synopsis "Discord plugin for Bitlbee")
  640. (description "Bitlbee-discord is a plugin for Bitlbee which provides
  641. access to servers running the Discord protocol.")
  642. (home-page "https://github.com/sm00th/bitlbee-discord/")
  643. (license license:gpl2+)))
  644. (define-public purple-mattermost
  645. ;; The latest release (1.2) only supports Mattermost's /api/v3. Choose a
  646. ;; commit that supports /api/v4.
  647. (let ((commit "158ce2052af9aaf3d1f6f045f0cfba276e0e91cf")
  648. (revision "0"))
  649. (package
  650. (name "purple-mattermost")
  651. (version (git-version "1.2" revision commit))
  652. (home-page "https://github.com/EionRobb/purple-mattermost")
  653. (source (origin
  654. (method git-fetch)
  655. (uri (git-reference (url home-page)
  656. (commit commit)))
  657. (file-name (git-file-name name version))
  658. (sha256
  659. (base32
  660. "1481zm20pnfq52ncg7hxayjq8cw3a6yh9m4jm1m5s8chsq04015l"))))
  661. (build-system gnu-build-system)
  662. (arguments
  663. `(#:phases (modify-phases %standard-phases
  664. (replace 'configure
  665. (lambda* (#:key inputs outputs #:allow-other-keys)
  666. ;; Adjust the makefile to install files in the right
  667. ;; place.
  668. (let ((out (assoc-ref outputs "out")))
  669. (substitute* "Makefile"
  670. (("MATTERMOST_DEST = .*")
  671. (string-append "MATTERMOST_DEST = " out
  672. "/lib/purple-2\n")) ;XXX: hardcoded
  673. (("MATTERMOST_ICONS_DEST = .*")
  674. (string-append "MATTERMOST_ICONS_DEST = "
  675. out
  676. "/share/pixmaps/pidgin/protocols\n")))
  677. #t))))
  678. #:make-flags (list "CC=gcc"
  679. ,(string-append "PLUGIN_VERSION=" version))
  680. #:tests? #f))
  681. (inputs `(("glib" ,glib)
  682. ("json-glib" ,json-glib)
  683. ("discount" ,discount)
  684. ("pidgin" ,pidgin)))
  685. (native-inputs `(("pkg-config" ,pkg-config)))
  686. (synopsis "Purple plug-in to access Mattermost instant messaging")
  687. (description
  688. "Purple-Mattermost is a plug-in for Purple, the instant messaging library
  689. used by Pidgin and Bitlbee, among others, to access
  690. @uref{https://mattermost.com/, Mattermost} servers.")
  691. (license license:gpl3+))))
  692. (define-public hexchat
  693. (package
  694. (name "hexchat")
  695. (version "2.14.3")
  696. (source (origin
  697. (method url-fetch)
  698. (uri (string-append "https://dl.hexchat.net/hexchat/hexchat-"
  699. version ".tar.xz"))
  700. (patches (search-patches "hexchat-add-libera-chat.patch"))
  701. (sha256
  702. (base32
  703. "10p829jm1r6kidkgf5lhqhyqc5mxdcq96q3zhadsckasvc9rs6lh"))))
  704. (build-system meson-build-system)
  705. (native-inputs `(("gettext" ,gettext-minimal)
  706. ("glib:bin" ,glib "bin") ;need glib-genmarshal
  707. ("perl" ,perl)
  708. ("pkg-config" ,pkg-config)))
  709. (inputs `(("dbus-glib" ,dbus-glib)
  710. ("dbus" ,dbus)
  711. ("enchant" ,enchant)
  712. ("gtk" ,gtk+-2)
  713. ("libcanberra" ,libcanberra)
  714. ("libnotify" ,libnotify)
  715. ("libproxy" ,libproxy)
  716. ("openssl" ,openssl)
  717. ;; Bindings for add-on scripts.
  718. ("luajit" ,luajit)
  719. ("perl-xml-parser" ,perl-xml-parser)
  720. ("python-2" ,python-2)))
  721. (arguments
  722. `(#:phases
  723. (modify-phases %standard-phases
  724. (add-after 'unpack 'skip-desktop-database-updates
  725. (lambda _
  726. ;; The build scripts update icon and desktop file databases when
  727. ;; DESTDIR is not set. We can't update these databases from
  728. ;; within the build chroot, but we also don't set DESTDIR. So, we
  729. ;; just skip this code.
  730. (substitute* "meson_post_install.py"
  731. (("if 'DESTDIR' not in os.environ:")
  732. "if False:"))
  733. #t)))))
  734. (synopsis "Graphical IRC client")
  735. (description
  736. "HexChat lets you connect to multiple IRC networks at once. The main
  737. window shows the list of currently connected networks and their channels, the
  738. current conversation and the list of users. It uses colors to differentiate
  739. between users and to highlight messages. It checks spelling using available
  740. dictionaries. HexChat can be extended with multiple addons.")
  741. (home-page "https://hexchat.net/")
  742. (license license:gpl2+)))
  743. (define-public ngircd
  744. (package
  745. (name "ngircd")
  746. (version "26.1")
  747. (source (origin
  748. (method url-fetch)
  749. (uri (string-append "https://arthur.barton.de/pub/ngircd/ngircd-"
  750. version ".tar.xz"))
  751. (sha256
  752. (base32
  753. "0m32v0c7mq96rshws4h6d0pi4bm0hynfzx3x01mgrxh9c396zham"))
  754. (patches (search-patches "ngircd-handle-zombies.patch"))))
  755. (build-system gnu-build-system)
  756. ;; Needed for the test suite.
  757. (native-inputs `(("procps" ,procps)
  758. ("expect" ,expect)
  759. ("inetutils" ,inetutils)
  760. ("openssl" ,openssl)))
  761. ;; XXX Add libident.
  762. (inputs `(("zlib" ,zlib)
  763. ("libwrap" ,tcp-wrappers)
  764. ("gnutls" ,gnutls)
  765. ,@(if (string-suffix? "-linux"
  766. (or (%current-target-system)
  767. (%current-system)))
  768. `(("linux-pam" ,linux-pam))
  769. '())))
  770. (arguments
  771. `(#:configure-flags
  772. '("--with-gnutls" "--with-iconv" "--enable-ipv6" "--with-tcp-wrappers"
  773. ,@(if (string-suffix? "-linux"
  774. (or (%current-target-system)
  775. (%current-system)))
  776. '("--with-pam")
  777. '()))
  778. #:phases
  779. (modify-phases %standard-phases
  780. ;; Necessary for the test suite.
  781. (add-after 'configure 'post-configure
  782. (lambda _
  783. (substitute* "src/ngircd/Makefile"
  784. (("/bin/sh") (which "sh")))
  785. ;; The default getpid.sh does a sloppy grep over 'ps -ax' output,
  786. ;; which fails arbitrarily.
  787. (with-output-to-file "src/testsuite/getpid.sh"
  788. (lambda ()
  789. (display
  790. (string-append
  791. "#!" (which "sh") "\n"
  792. "ps -C \"$1\" -o pid=\n"))))
  793. ;; Our variant of getpid.sh does not match interpreter names
  794. ;; when the script's shebang is invoked directly as "./foo".
  795. ;; Patch cases where the test suite relies on this.
  796. (substitute* "src/testsuite/start-server.sh"
  797. ;; It runs 'getpid.sh sh' to test if it works at all. Run it on
  798. ;; 'make' instead.
  799. (("getpid.sh sh") "getpid.sh make")))))))
  800. (home-page "https://ngircd.barton.de/")
  801. (synopsis "Lightweight Internet Relay Chat server for small networks")
  802. (description
  803. "ngIRCd is a lightweight @dfn{Internet Relay Chat} (IRC) server for small
  804. or private networks. It is easy to configure, can cope with dynamic IP
  805. addresses, and supports IPv6, SSL-protected connections, as well as PAM for
  806. authentication.")
  807. (license license:gpl2+)))
  808. (define-public pidgin
  809. (package
  810. (name "pidgin")
  811. (version "2.14.5")
  812. (source
  813. (origin
  814. (method url-fetch)
  815. (uri
  816. (string-append "mirror://sourceforge/pidgin/Pidgin/"
  817. version "/pidgin-" version ".tar.gz"))
  818. (sha256
  819. (base32 "12llip3r8126gph82r638xjv2v2rg34qgggn1nbwfmc3s7halimr"))
  820. (patches
  821. (search-patches "pidgin-add-search-path.patch"))
  822. (modules '((guix build utils)))
  823. (snippet
  824. '(begin
  825. ;; Remove stale generated file after applying patches.
  826. (delete-file "configure")
  827. #t))))
  828. (build-system glib-or-gtk-build-system)
  829. (native-inputs
  830. `(("autoconf" ,autoconf) ;; For bootstrap
  831. ("automake" ,automake) ;; For bootstrap
  832. ("check" ,check)
  833. ("dot" ,graphviz)
  834. ("gconf" ,gconf)
  835. ("intltool" ,intltool)
  836. ("libtool" ,libtool) ;; For bootstrap
  837. ("pkg-config" ,pkg-config)))
  838. (inputs
  839. `(("avahi" ,avahi)
  840. ("cyrus-sasl" ,cyrus-sasl)
  841. ("dbus" ,dbus)
  842. ("dbus-glib" ,dbus-glib)
  843. ;; ("evolution-data-server" ,evolution-data-server)
  844. ("farstream" ,farstream)
  845. ("gnutls" ,gnutls)
  846. ("gstreamer" ,gstreamer)
  847. ;; ("gtkspell2" ,gtkspell2)
  848. ("libgadu" ,libgadu)
  849. ("libgcrypt" ,libgcrypt)
  850. ("libgnt" ,libgnt)
  851. ("libice" ,libice)
  852. ("libidn" ,libidn)
  853. ("libltdl" ,libltdl)
  854. ("libsm" ,libsm)
  855. ("libx11" ,libx11)
  856. ("libxext" ,libxext)
  857. ("libxml2" ,libxml2)
  858. ("libxscrnsaver" ,libxscrnsaver)
  859. ("libxslt" ,libxslt)
  860. ;; ("libzephyr" ,libzephyr)
  861. ("meanwhile" ,meanwhile)
  862. ("mono" ,mono)
  863. ("ncurses" ,ncurses)
  864. ("network-manager" ,network-manager)
  865. ("nspr" ,nspr)
  866. ("nss" ,nss)
  867. ("pango" ,pango)
  868. ("perl" ,perl)
  869. ("python" ,python-2)
  870. ("python2-dbus" ,python2-dbus)
  871. ("silc" ,silc-toolkit)
  872. ("sqlite" ,sqlite)
  873. ("startup-notification" ,startup-notification)
  874. ("tcl" ,tcl)
  875. ("tk" ,tk)))
  876. (propagated-inputs
  877. `(("glib" ,glib)
  878. ("gtk+" ,gtk+-2)))
  879. (arguments
  880. `(#:configure-flags
  881. (list
  882. (string-append "CFLAGS=-I"
  883. (assoc-ref %build-inputs "gst-plugins-base")
  884. "/include/gstreamer-1.0")
  885. "--disable-gtkspell"
  886. "--disable-gevolution"
  887. "--enable-cap"
  888. "--enable-mono"
  889. "--enable-cyrus-sasl"
  890. (string-append "--with-ncurses-headers="
  891. (assoc-ref %build-inputs "ncurses")
  892. "/include")
  893. (string-append "--with-tclconfig="
  894. (assoc-ref %build-inputs "tcl")
  895. "/lib")
  896. (string-append "--with-tkconfig="
  897. (assoc-ref %build-inputs "tk")
  898. "/lib"))))
  899. (native-search-paths
  900. (list
  901. (search-path-specification
  902. (variable "PURPLE_PLUGIN_PATH")
  903. (files
  904. (list
  905. (string-append "lib/purple-"
  906. (version-major version))
  907. "lib/pidgin")))))
  908. (home-page "https://www.pidgin.im/")
  909. (synopsis "Graphical multi-protocol instant messaging client")
  910. (description "Pidgin is a modular instant messaging client that supports
  911. many popular chat protocols.")
  912. (license
  913. (list
  914. license:gpl2+ ; Most of the code
  915. license:lgpl2.1 ; GG protocol plugin (libpurple/protocols/gg/lib)
  916. license:lgpl2.0+ ; OSCAR protocol plugin (libpurple/protocols/oscar)
  917. ;; The following licenses cover the zephyr protocol plugin:
  918. (license:non-copyleft
  919. "file://libpurple/protocols/zephyr/mit-copyright.h"
  920. "See libpurple/protocols/zephyr/mit-copyright.h in the distribution.")
  921. (license:non-copyleft
  922. "file://libpurple/protocols/zephyr/mit-sipb-copyright.h"
  923. "See libpurple/protocols/zephyr/mit-sipb-copyright.h in the distribution.")))))
  924. (define-public pidgin-otr
  925. (package
  926. (name "pidgin-otr")
  927. (version "4.0.2")
  928. (source
  929. (origin
  930. (method url-fetch)
  931. (uri
  932. (string-append "https://otr.cypherpunks.ca/"
  933. name "-" version ".tar.gz"))
  934. (sha256
  935. (base32 "1i5s9rrgbyss9rszq6c6y53hwqyw1k86s40cpsfx5ccl9bprxdgl"))))
  936. (build-system gnu-build-system)
  937. (native-inputs
  938. `(("gettext" ,gettext-minimal)
  939. ("intltool" ,intltool)
  940. ("pkg-config" ,pkg-config)))
  941. (inputs
  942. `(("glib" ,glib)
  943. ("gtk+" ,gtk+-2)
  944. ("libgcrypt" ,libgcrypt)
  945. ("libgpg-error" ,libgpg-error)
  946. ("libotr" ,libotr)
  947. ("perl" ,perl)
  948. ("pidgin" ,pidgin)))
  949. (home-page "https://otr.cypherpunks.ca/")
  950. (synopsis "Off-the-Record Messaging plugin for Pidgin")
  951. (description "Pidgin-OTR is a plugin that adds support for OTR to the Pidgin
  952. instant messaging client. OTR (Off-the-Record) Messaging allows you to have
  953. private conversations over instant messaging by providing: (1) Encryption: No
  954. one else can read your instant messages. (2) Authentication: You are assured
  955. the correspondent is who you think it is. (3) Deniability: The messages you
  956. send do not have digital signatures that are checkable by a third party. Anyone
  957. can forge messages after a conversation to make them look like they came from
  958. you. However, during a conversation, your correspondent is assured the messages
  959. he sees are authentic and unmodified. (4) Perfect forward secrecy: If you lose
  960. control of your private keys, no previous conversation is compromised.")
  961. (license license:gpl2+)))
  962. (define-public znc
  963. (package
  964. (name "znc")
  965. (version "1.8.2")
  966. (source (origin
  967. (method url-fetch)
  968. (uri (string-append "https://znc.in/releases/archive/znc-"
  969. version ".tar.gz"))
  970. (sha256
  971. (base32
  972. "03fyi0j44zcanj1rsdx93hkdskwfvhbywjiwd17f9q1a7yp8l8zz"))))
  973. (build-system cmake-build-system)
  974. (arguments
  975. `(#:configure-flags
  976. (list "-DWANT_CYRUS=ON"
  977. "-DWANT_I18N=ON"
  978. "-DWANT_PERL=ON"
  979. "-DWANT_PYTHON=ON")
  980. #:phases
  981. (modify-phases %standard-phases
  982. (add-after 'unpack 'unpack-googletest
  983. ;; Copy the googletest sources to where the CMake build expects them.
  984. (lambda* (#:key inputs #:allow-other-keys)
  985. (let ((source (assoc-ref inputs "googletest-source"))
  986. (target "third_party/googletest"))
  987. (mkdir-p target)
  988. (copy-recursively source target)
  989. #t))))))
  990. (native-inputs
  991. `(("boost" ,boost)
  992. ("gettext" ,gettext-minimal)
  993. ("googletest-source" ,(package-source googletest))
  994. ("pkg-config" ,pkg-config)))
  995. (inputs
  996. `(("cyrus-sasl" ,cyrus-sasl)
  997. ("icu4c" ,icu4c)
  998. ("openssl" ,openssl)
  999. ("perl" ,perl)
  1000. ("python" ,python)
  1001. ("zlib" ,zlib)))
  1002. (home-page "https://wiki.znc.in/ZNC")
  1003. (synopsis "IRC network bouncer")
  1004. (description "ZNC is an @dfn{IRC network bouncer} or @dfn{BNC}. It can
  1005. detach the client from the actual IRC server, and also from selected channels.
  1006. Multiple clients from different locations can connect to a single ZNC account
  1007. simultaneously and therefore appear under the same nickname on IRC.")
  1008. (license license:asl2.0)))
  1009. (define-public python-nbxmpp
  1010. (package
  1011. (name "python-nbxmpp")
  1012. (version "2.0.2")
  1013. (source
  1014. (origin
  1015. (method url-fetch)
  1016. (uri
  1017. (pypi-uri "nbxmpp" version))
  1018. (sha256
  1019. (base32 "1482fva70i01w60fk70c0fhqmqgzi1fb4xflllz2v6c8mdqkd1m3"))))
  1020. (build-system python-build-system)
  1021. (native-inputs
  1022. `(("glib:bin" ,glib "bin")))
  1023. (inputs
  1024. `(("glib" ,glib)
  1025. ("glib-networking" ,glib-networking)
  1026. ("libsoup" ,libsoup)
  1027. ("python-gssapi" ,python-gssapi)
  1028. ("python-idna" ,python-idna)
  1029. ("python-precis-i18n" ,python-precis-i18n)
  1030. ("python-pygobject" ,python-pygobject)))
  1031. (synopsis "Non-blocking XMPP Module")
  1032. (description "Python-nbxmpp is a Python library that provides a way for
  1033. Python applications to use the XMPP network. This library was initially a fork
  1034. of xmpppy.")
  1035. (home-page "https://dev.gajim.org/gajim/python-nbxmpp")
  1036. (license license:gpl3+)))
  1037. (define-public gajim
  1038. (package
  1039. (name "gajim")
  1040. (version "1.3.2")
  1041. (source
  1042. (origin
  1043. (method url-fetch)
  1044. (uri
  1045. (string-append "https://gajim.org/downloads/"
  1046. (version-major+minor version)
  1047. "/gajim-" version ".tar.gz"))
  1048. (sha256
  1049. (base32 "1vjzv8zg9s393xw81klcgbkn4h6j2blzla9iil5kqfrw7wmldskh"))
  1050. (patches (search-patches "gajim-honour-GAJIM_PLUGIN_PATH.patch"))))
  1051. (build-system python-build-system)
  1052. (arguments
  1053. `(#:imported-modules
  1054. (,@%python-build-system-modules
  1055. (guix build glib-or-gtk-build-system))
  1056. #:modules
  1057. ((guix build python-build-system)
  1058. ((guix build glib-or-gtk-build-system)
  1059. #:prefix glib-or-gtk:)
  1060. (guix build utils))
  1061. #:phases
  1062. (modify-phases %standard-phases
  1063. (add-after 'unpack 'disable-failing-tests
  1064. (lambda _
  1065. ;; ModuleNotFoundError: No module named 'gajim.gui.emoji_data'
  1066. ;; https://dev.gajim.org/gajim/gajim/-/issues/10478
  1067. (delete-file "test/lib/gajim_mocks.py")
  1068. (delete-file "test/unit/test_gui_interface.py")
  1069. #t))
  1070. (replace 'check
  1071. (lambda _
  1072. ;; Tests require a running X server.
  1073. (system "Xvfb :1 +extension GLX &")
  1074. (setenv "DISPLAY" ":1")
  1075. ;; For missing '/etc/machine-id'.
  1076. (setenv "DBUS_FATAL_WARNINGS" "0")
  1077. (invoke "dbus-launch" "python" "./setup.py" "test")
  1078. #t))
  1079. (add-after 'install 'glib-or-gtk-compile-schemas
  1080. (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
  1081. (add-after 'install 'glib-or-gtk-wrap
  1082. (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))
  1083. (add-after 'install 'wrap-env
  1084. (lambda* (#:key outputs #:allow-other-keys)
  1085. (let ((out (assoc-ref outputs "out")))
  1086. (for-each
  1087. (lambda (name)
  1088. (let ((file (string-append out "/bin/" name))
  1089. (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH"))
  1090. (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
  1091. (wrap-program file
  1092. `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
  1093. `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))
  1094. '("gajim" "gajim-remote" "gajim-history-manager")))
  1095. #t)))))
  1096. (native-search-paths
  1097. (list
  1098. (search-path-specification
  1099. (variable "GAJIM_PLUGIN_PATH")
  1100. (separator #f) ;single entry
  1101. (files
  1102. (list
  1103. "share/gajim/plugins")))
  1104. ;; Gajim needs to use the propagated inputs of its plugins.
  1105. (search-path-specification
  1106. (variable "GUIX_PYTHONPATH")
  1107. (files
  1108. (list
  1109. (string-append
  1110. "lib/python"
  1111. ;; FIXME: Cannot use this expression as it would
  1112. ;; introduce a circular dependency at the top level.
  1113. ;; (version-major+minor (package-version python))
  1114. "3.8"
  1115. "/site-packages"))))))
  1116. (native-inputs
  1117. `(("gettext" ,gettext-minimal)
  1118. ("glib:bin" ,glib "bin")
  1119. ("gobject-introspection" ,gobject-introspection)
  1120. ("gtk+:bin" ,gtk+ "bin")
  1121. ("python-distutils-extra" ,python-distutils-extra)
  1122. ("python-setuptools" ,python-setuptools)
  1123. ("xorg-server" ,xorg-server-for-tests)))
  1124. (inputs
  1125. `(("avahi" ,avahi)
  1126. ("dbus" ,dbus)
  1127. ("farstream" ,farstream)
  1128. ("geoclue" ,geoclue)
  1129. ("glib" ,glib)
  1130. ("glib-networking" ,glib-networking)
  1131. ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
  1132. ("gsound",gsound)
  1133. ("gspell" ,gspell)
  1134. ("gstreamer" ,gstreamer)
  1135. ("gst-plugins-base" ,gst-plugins-base)
  1136. ("gtk+" ,gtk+)
  1137. ("gupnp-igd" ,gupnp-igd)
  1138. ("libsecret" ,libsecret)
  1139. ("libsoup" ,libsoup)
  1140. ("libxss" ,libxscrnsaver)
  1141. ("network-manager" ,network-manager)
  1142. ("python-css-parser" ,python-css-parser)
  1143. ("python-keyring" ,python-keyring)
  1144. ("python-nbxmpp" ,python-nbxmpp)
  1145. ("python-packaging" ,python-packaging)
  1146. ("python-pillow" ,python-pillow)
  1147. ("python-precis-i18n" ,python-precis-i18n)
  1148. ("python-pycairo" ,python-pycairo)
  1149. ("python-pygobject" ,python-pygobject)
  1150. ("python-pyopenssl" ,python-pyopenssl)))
  1151. (propagated-inputs
  1152. `(("dconf" ,dconf)))
  1153. (synopsis "Fully-featured XMPP client")
  1154. (description "Gajim aims to be an easy to use and fully-featured XMPP chat
  1155. client. It is extensible via plugins, supports end-to-end encryption (OMEMO
  1156. and OpenPGP) and available in 29 languages.")
  1157. (home-page "https://gajim.org/")
  1158. (license license:gpl3)))
  1159. (define-public gajim-omemo
  1160. (package
  1161. (name "gajim-omemo")
  1162. (version "2.7.14")
  1163. (source
  1164. (origin
  1165. (method url-fetch/zipbomb)
  1166. (uri
  1167. (string-append
  1168. "https://ftp.gajim.org/plugins_releases/omemo_"
  1169. version ".zip"))
  1170. (sha256
  1171. (base32 "0jmyjqfc4vimvq5vdqsvz25dsij6bh92alml8qnn59p5farnf86v"))))
  1172. (build-system trivial-build-system)
  1173. (arguments
  1174. `(#:modules ((guix build utils))
  1175. #:builder
  1176. (begin
  1177. (use-modules (guix build utils))
  1178. (let* ((out (assoc-ref %outputs "out"))
  1179. (share (in-vicinity out "share/gajim/plugins"))
  1180. (source (assoc-ref %build-inputs "source")))
  1181. (mkdir-p share)
  1182. (copy-recursively source share)
  1183. #t))))
  1184. (propagated-inputs
  1185. `(("python-axolotl" ,python-axolotl)
  1186. ("python-axolotl-curve25519" ,python-axolotl-curve25519)
  1187. ("python-cryptography" ,python-cryptography)
  1188. ("python-qrcode" ,python-qrcode)))
  1189. (synopsis "Gajim OMEMO plugin")
  1190. (description "Gajim-OMEMO is a plugin that adds support for the OMEMO
  1191. Encryption to Gajim. OMEMO is an XMPP Extension Protocol (XEP) for secure
  1192. multi-client end-to-end encryption.")
  1193. (home-page
  1194. "https://dev.gajim.org/gajim/gajim-plugins/-/wikis/OmemoGajimPlugin")
  1195. (license license:gpl3+)))
  1196. (define-public gajim-openpgp
  1197. (package
  1198. (name "gajim-openpgp")
  1199. (version "1.3.9")
  1200. (source
  1201. (origin
  1202. (method url-fetch/zipbomb)
  1203. (uri
  1204. (string-append
  1205. "https://ftp.gajim.org/plugins_releases/openpgp_"
  1206. version ".zip"))
  1207. (sha256
  1208. (base32 "0fzvvrap1hmj4rbrcjs6cs5c9l9c0795bgw9vxxxk915n6j91m23"))))
  1209. (build-system trivial-build-system)
  1210. (arguments
  1211. `(#:modules ((guix build utils))
  1212. #:builder
  1213. (begin
  1214. (use-modules (guix build utils))
  1215. (let* ((out (assoc-ref %outputs "out"))
  1216. (share (in-vicinity out "share/gajim/plugins"))
  1217. (source (assoc-ref %build-inputs "source")))
  1218. (mkdir-p share)
  1219. (copy-recursively source share)
  1220. #t))))
  1221. (propagated-inputs
  1222. `(("python-cryptography" ,python-cryptography)
  1223. ("python-gnupg" ,python-gnupg)
  1224. ("python-gpg" ,python-gpg)))
  1225. (synopsis "Gajim OpenPGP plugin")
  1226. (description "Gajim-OpenPGP is a plugin that adds support for the OpenPGP
  1227. Encryption to Gajim.")
  1228. (home-page "https://dev.gajim.org/gajim/gajim-plugins/-/wikis/OpenPGPplugin")
  1229. (license license:gpl3+)))
  1230. (define-public dino
  1231. (package
  1232. (name "dino")
  1233. (version "0.2.1")
  1234. (source
  1235. (origin
  1236. (method url-fetch)
  1237. (uri
  1238. (string-append "https://github.com/dino/dino/releases/download/v"
  1239. version "/dino-" version ".tar.gz"))
  1240. (sha256
  1241. (base32 "13rk8b0sj35az32c0ii173g9ww231awmyb4jlk56jy38hpyp7x1g"))))
  1242. (build-system cmake-build-system)
  1243. (outputs '("out" "debug"))
  1244. (arguments
  1245. `(#:tests? #f
  1246. #:parallel-build? #f ; not supported
  1247. #:modules ((guix build cmake-build-system)
  1248. ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
  1249. (guix build utils))
  1250. #:imported-modules (,@%gnu-build-system-modules
  1251. (guix build cmake-build-system)
  1252. (guix build glib-or-gtk-build-system))
  1253. #:phases
  1254. (modify-phases %standard-phases
  1255. ;; To be enabled in v0.3.0, for A/V support.
  1256. ;;(add-after 'install 'wrap
  1257. ;;(lambda* (#:key outputs #:allow-other-keys)
  1258. ;;(let* ((out (assoc-ref outputs "out"))
  1259. ;;(dino (string-append out "/bin/dino"))
  1260. ;;(gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
  1261. ;;(wrap-program dino
  1262. ;;`("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))))))
  1263. (add-after 'install 'glib-or-gtk-wrap
  1264. (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
  1265. (native-inputs
  1266. `(("gettext" ,gettext-minimal)
  1267. ("glib:bin" ,glib "bin")
  1268. ("gobject-introspection" ,gobject-introspection)
  1269. ("gtk+:bin" ,gtk+ "bin")
  1270. ("pkg-config" ,pkg-config)
  1271. ("vala" ,vala)))
  1272. (inputs
  1273. ;; NOTE: Commented-out lines are to be enabled in v0.3.0.
  1274. `(("atk" ,atk)
  1275. ("cairo" ,cairo)
  1276. ("gdk-pixbuf" ,gdk-pixbuf+svg)
  1277. ("glib" ,glib)
  1278. ("glib-networking" ,glib-networking)
  1279. ("gpgme" ,gpgme)
  1280. ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
  1281. ("gspell" ,gspell) ;for spell-check support
  1282. ;;("gstreamer" ,gstreamer) ;for A/V support
  1283. ;;("gst-plugins-base" ,gst-plugins-base)
  1284. ;;("gst-plugins-good" ,gst-plugins-good)
  1285. ("gtk+" ,gtk+)
  1286. ("icu4c" ,icu4c) ;for emoji support
  1287. ;;("libcanberra" ,libcanberra) ;for sound-notification support
  1288. ("libgcrypt" ,libgcrypt)
  1289. ("libgee" ,libgee)
  1290. ("libnice" ,libnice)
  1291. ("libsignal-protocol-c" ,libsignal-protocol-c)
  1292. ("libsoup" ,libsoup)
  1293. ;;("libsrtp" ,libsrtp) ;for calls support
  1294. ("pango" ,pango)
  1295. ("qrencode" ,qrencode)
  1296. ("sqlite" ,sqlite)))
  1297. ;;("webrtc-audio-processing" ,webrtc-audio-processing))) ;for A/V support
  1298. (synopsis "Graphical Jabber/XMPP Client using GTK+/Vala")
  1299. (description "Dino is a chat client for the desktop. It focuses on providing
  1300. a minimal yet reliable Jabber/XMPP experience and having encryption enabled by
  1301. default.")
  1302. (home-page "https://dino.im")
  1303. (license license:gpl3+)))
  1304. (define-public prosody
  1305. (package
  1306. (name "prosody")
  1307. (version "0.11.9")
  1308. (source (origin
  1309. (method url-fetch)
  1310. (uri (string-append "https://prosody.im/downloads/source/"
  1311. "prosody-" version ".tar.gz"))
  1312. (sha256
  1313. (base32
  1314. "02gzvsaq0l5lx608sfh7hfz14s6yfsr4sr4kzcsqd1cxljp35h6c"))))
  1315. (build-system gnu-build-system)
  1316. (arguments
  1317. `(#:tests? #f ;tests require "busted"
  1318. #:configure-flags (list "--no-example-certs")
  1319. #:modules ((ice-9 match)
  1320. (srfi srfi-1)
  1321. (guix build gnu-build-system)
  1322. (guix build utils))
  1323. #:phases
  1324. (modify-phases %standard-phases
  1325. (add-after 'unpack 'fix-configure-script
  1326. (lambda _
  1327. ;; The configure script aborts when it encounters unexpected
  1328. ;; arguments. Make it more tolerant.
  1329. (substitute* "configure"
  1330. (("exit 1") ""))
  1331. #t))
  1332. (add-after 'unpack 'fix-makefile
  1333. (lambda _
  1334. (substitute* "GNUmakefile"
  1335. ;; prosodyctl needs to read the configuration file.
  1336. (("^INSTALLEDCONFIG =.*") "INSTALLEDCONFIG = /etc/prosody\n")
  1337. ;; prosodyctl needs a place to put auto-generated certificates.
  1338. (("^INSTALLEDDATA =.*") "INSTALLEDDATA = /var/lib/prosody\n"))
  1339. #t))
  1340. (add-after 'install 'wrap-programs
  1341. (lambda* (#:key inputs outputs #:allow-other-keys)
  1342. ;; Make sure all executables in "bin" find the required Lua
  1343. ;; modules at runtime.
  1344. (let* ((out (assoc-ref outputs "out"))
  1345. (bin (string-append out "/bin/"))
  1346. (deps (delete #f (map (match-lambda
  1347. ((label . directory)
  1348. (if (string-prefix? "lua" label)
  1349. directory #f)))
  1350. inputs)))
  1351. (lua-path (string-join
  1352. (map (lambda (path)
  1353. (string-append
  1354. path "/share/lua/5.2/?.lua;"
  1355. path "/share/lua/5.2/?/?.lua"))
  1356. (cons out deps))
  1357. ";"))
  1358. (lua-cpath (string-join
  1359. (map (lambda (path)
  1360. (string-append
  1361. path "/lib/lua/5.2/?.so;"
  1362. path "/lib/lua/5.2/?/?.so"))
  1363. (cons out deps))
  1364. ";"))
  1365. (openssl (assoc-ref inputs "openssl"))
  1366. (coreutils (assoc-ref inputs "coreutils"))
  1367. (path (map (lambda (dir)
  1368. (string-append dir "/bin"))
  1369. (list openssl coreutils))))
  1370. (for-each (lambda (file)
  1371. (wrap-program file
  1372. `("LUA_PATH" ";" = (,lua-path))
  1373. `("LUA_CPATH" ";" = (,lua-cpath))
  1374. `("PATH" ":" prefix ,path)))
  1375. (find-files bin ".*"))
  1376. #t))))))
  1377. (inputs
  1378. `(("libidn" ,libidn)
  1379. ("openssl" ,openssl)
  1380. ("lua" ,lua-5.2)
  1381. ("lua5.2-bitop" ,lua5.2-bitop)
  1382. ("lua5.2-expat" ,lua5.2-expat)
  1383. ("lua5.2-socket" ,lua5.2-socket)
  1384. ("lua5.2-filesystem" ,lua5.2-filesystem)
  1385. ("lua5.2-sec" ,lua5.2-sec)))
  1386. (home-page "https://prosody.im/")
  1387. (synopsis "Jabber (XMPP) server")
  1388. (description "Prosody is a modern XMPP communication server. It aims to
  1389. be easy to set up and configure, and efficient with system resources.
  1390. Additionally, for developers it aims to be easy to extend and give a flexible
  1391. system on which to rapidly develop added functionality, or prototype new
  1392. protocols.")
  1393. (license license:x11)))
  1394. (define-public prosody-http-upload
  1395. (let ((changeset "765735bb590b")
  1396. (revision "1"))
  1397. (package
  1398. (name "prosody-http-upload")
  1399. (version (string-append "0-" revision "." (string-take changeset 7)))
  1400. (source (origin
  1401. (method hg-fetch)
  1402. (uri (hg-reference
  1403. (url "https://hg.prosody.im/prosody-modules/")
  1404. (changeset changeset)))
  1405. (file-name (string-append name "-" version "-checkout"))
  1406. (sha256
  1407. (base32
  1408. "142wrcism70nf8ffahhd961cqg2pi1h7ic8adfs3zwh0j3pnf41f"))))
  1409. (build-system trivial-build-system)
  1410. (arguments
  1411. '(#:modules ((guix build utils))
  1412. #:builder
  1413. (begin
  1414. (use-modules (guix build utils))
  1415. (let ((out (assoc-ref %outputs "out"))
  1416. (source (assoc-ref %build-inputs "source")))
  1417. (with-directory-excursion (in-vicinity source "mod_http_upload")
  1418. (install-file "mod_http_upload.lua" out))
  1419. #t))))
  1420. (home-page "https://modules.prosody.im/mod_http_upload.html")
  1421. (synopsis "XEP-0363: Allow clients to upload files over HTTP")
  1422. (description "This module implements XEP-0363: it allows clients to
  1423. upload files over HTTP.")
  1424. (license (package-license prosody)))))
  1425. (define-public prosody-smacks
  1426. (let ((changeset "67f1d1f22625")
  1427. (revision "1"))
  1428. (package
  1429. (name "prosody-smacks")
  1430. (version (string-append "0-" revision "." (string-take changeset 7)))
  1431. (source (origin
  1432. (method hg-fetch)
  1433. (uri (hg-reference
  1434. (url "https://hg.prosody.im/prosody-modules/")
  1435. (changeset changeset)))
  1436. (file-name (string-append name "-" version "-checkout"))
  1437. (sha256
  1438. (base32
  1439. "020ngpax30fgarah98yvlj0ni8rcdwq60if03a9hqdw8mic0nxxs"))))
  1440. (build-system trivial-build-system)
  1441. (arguments
  1442. '(#:modules ((guix build utils))
  1443. #:builder
  1444. (begin
  1445. (use-modules (guix build utils))
  1446. (let ((out (assoc-ref %outputs "out"))
  1447. (source (assoc-ref %build-inputs "source")))
  1448. (with-directory-excursion (in-vicinity source "mod_smacks")
  1449. (install-file "mod_smacks.lua" out))
  1450. #t))))
  1451. (home-page "https://modules.prosody.im/mod_smacks.html")
  1452. (synopsis "XEP-0198: Reliability and fast reconnects for XMPP")
  1453. (description "This module implements XEP-0198: when supported by both
  1454. the client and server, it can allow clients to resume a disconnected session,
  1455. and prevent message loss.")
  1456. (license (package-license prosody)))))
  1457. (define-public libtoxcore
  1458. (let ((revision "2")
  1459. (commit "bf69b54f64003d160d759068f4816b2d9b2e1e21"))
  1460. (package
  1461. (name "libtoxcore")
  1462. (version (string-append "0.0.0" "-"
  1463. revision "."(string-take commit 7)))
  1464. (source (origin
  1465. (method git-fetch)
  1466. (uri (git-reference
  1467. (url "https://github.com/irungentoo/toxcore")
  1468. (commit commit)))
  1469. (file-name (string-append name "-" version "-checkout"))
  1470. (sha256
  1471. (base32
  1472. "11lqra4yd7v293cp286ynff5lqz1pprzg8vn3wq6vryj08g88zqb"))))
  1473. (build-system gnu-build-system)
  1474. (arguments `(#:tests? #f)) ; FIXME: tests hang, some fail.
  1475. (native-inputs
  1476. `(("autoconf" ,autoconf)
  1477. ("automake" ,automake)
  1478. ("libtool" ,libtool)
  1479. ("check" ,check)
  1480. ("pkg-config" ,pkg-config)))
  1481. (inputs
  1482. `(("libsodium" ,libsodium)
  1483. ("opus" ,opus)
  1484. ("libvpx" ,libvpx)))
  1485. (synopsis "Library for the Tox encrypted messenger protocol")
  1486. (description
  1487. "C library implementation of the Tox encrypted messenger protocol.")
  1488. (license license:gpl3+)
  1489. (home-page "https://tox.chat"))))
  1490. ;; Some tox clients move to c-toxcore, which seems to be where all the
  1491. ;; recent development happens. It is run by the same developers as toxcore,
  1492. ;; forked into a group namespace.
  1493. (define-public c-toxcore
  1494. (package
  1495. (name "c-toxcore")
  1496. (version "0.2.12")
  1497. (source
  1498. (origin
  1499. (method git-fetch)
  1500. (uri (git-reference
  1501. (url "https://github.com/TokTok/c-toxcore")
  1502. (commit (string-append "v" version))))
  1503. (file-name (git-file-name name version))
  1504. (sha256
  1505. (base32
  1506. "0a6sqpm00d2rn0nviqfz4gh9ck1wzci6rxgmqmcyryl5ca19ffvp"))))
  1507. (arguments
  1508. `(#:tests? #f)) ; FIXME: Testsuite seems to stay stuck on test 3. Disable
  1509. ; for now.
  1510. (build-system cmake-build-system)
  1511. (native-inputs
  1512. `(("pkg-config" ,pkg-config)))
  1513. (propagated-inputs
  1514. `(("libsodium" ,libsodium)
  1515. ("opus" ,opus)
  1516. ("libvpx" ,libvpx)))
  1517. (home-page "https://tox.chat")
  1518. (synopsis "Library for the Tox encrypted messenger protocol")
  1519. (description
  1520. "Official fork of the C library implementation of the Tox encrypted
  1521. messenger protocol.")
  1522. (license license:gpl3+)))
  1523. (define-public utox
  1524. (package
  1525. (name "utox")
  1526. (version "0.18.1")
  1527. (source
  1528. (origin
  1529. (method git-fetch)
  1530. (uri (git-reference
  1531. (url "https://github.com/uTox/uTox")
  1532. (commit (string-append "v" version))
  1533. (recursive? #t))) ;; Needed for 'minini' git submodule.
  1534. (file-name (string-append name "-" version "-checkout"))
  1535. (sha256
  1536. (base32
  1537. "01rvlf94d4rkrygnnjak3cg16hrrqyi1rn9nx65y17qk2nbyh68g"))))
  1538. (build-system cmake-build-system)
  1539. (arguments
  1540. `(#:configure-flags '("-DENABLE_TESTS=on")
  1541. #:phases
  1542. (modify-phases %standard-phases
  1543. (add-before 'build 'patch-absolute-filename-libgtk-3
  1544. (lambda* (#:key inputs outputs #:allow-other-keys)
  1545. (substitute* "../source/src/xlib/gtk.c"
  1546. (("libgtk-3.so")
  1547. (search-input-file inputs "/lib/libgtk-3.so")))))
  1548. (add-after 'install 'wrap-program
  1549. (lambda* (#:key inputs outputs #:allow-other-keys)
  1550. (wrap-program (string-append (assoc-ref outputs "out")
  1551. "/bin/utox")
  1552. ;; For GtkFileChooserDialog.
  1553. `("GSETTINGS_SCHEMA_DIR" =
  1554. (,(string-append (assoc-ref inputs "gtk+")
  1555. "/share/glib-2.0/schemas")))))))))
  1556. (inputs
  1557. `(("dbus" ,dbus)
  1558. ("filteraudio" ,filteraudio)
  1559. ("fontconfig" ,fontconfig)
  1560. ("freetype" ,freetype)
  1561. ("c-toxcore" ,c-toxcore)
  1562. ("gtk+" ,gtk+)
  1563. ("libvpx" ,libvpx)
  1564. ("libx11" ,libx11)
  1565. ("libxext" ,libxext)
  1566. ("libxrender" ,libxrender)
  1567. ("openal" ,openal)
  1568. ("v4l-utils" ,v4l-utils)))
  1569. (native-inputs
  1570. `(("check" ,check)
  1571. ("pkg-config" ,pkg-config)))
  1572. (synopsis "Lightweight Tox client")
  1573. (description
  1574. "uTox is a lightweight Tox client. Tox is a distributed and secure
  1575. instant messenger with audio and video chat capabilities.")
  1576. (home-page "https://github.com/uTox/uTox")
  1577. (license license:gpl3)))
  1578. (define-public qtox
  1579. (package
  1580. (name "qtox")
  1581. (version "1.17.3")
  1582. (source (origin
  1583. (method url-fetch)
  1584. (uri (string-append "https://github.com/qTox/qTox/releases"
  1585. "/download/v" version
  1586. "/v" version ".tar.gz"))
  1587. (sha256
  1588. (base32
  1589. "11n7si9wdpf80iwkvbspp14dh5jrwm7hxkj8vqhn5pkc48c5bh9j"))
  1590. (file-name (string-append name "-" version ".tar.gz"))))
  1591. (build-system cmake-build-system)
  1592. (arguments
  1593. '(#:phases
  1594. (modify-phases %standard-phases
  1595. (add-after 'unpack 'fix-reproducibility-issues
  1596. (lambda _
  1597. (substitute* "src/main.cpp"
  1598. (("__DATE__") "\"\"")
  1599. (("__TIME__") "\"\"")
  1600. (("TIMESTAMP") "\"\""))
  1601. #t))
  1602. (add-after 'unpack 'disable-network-tests
  1603. (lambda _
  1604. ;; These tests require network access.
  1605. (substitute* "cmake/Testing.cmake"
  1606. (("auto_test\\(core core\\)") "# auto_test(core core)")
  1607. (("auto_test\\(net bsu\\)") "# auto_test(net bsu)"))
  1608. #t))
  1609. ;; Ensure that icons are found at runtime.
  1610. (add-after 'install 'wrap-executable
  1611. (lambda* (#:key inputs outputs #:allow-other-keys)
  1612. (let ((out (assoc-ref outputs "out")))
  1613. (wrap-program (string-append out "/bin/qtox")
  1614. `("QT_PLUGIN_PATH" prefix
  1615. ,(list (string-append (assoc-ref inputs "qtsvg")
  1616. "/lib/qt5/plugins/"))))))))))
  1617. (inputs
  1618. `(("ffmpeg" ,ffmpeg)
  1619. ("filteraudio" ,filteraudio)
  1620. ("glib" ,glib)
  1621. ("gtk+" ,gtk+-2)
  1622. ("libsodium" ,libsodium)
  1623. ("c-toxcore" ,c-toxcore)
  1624. ("libvpx" ,libvpx)
  1625. ("libxscrnsaver" ,libxscrnsaver)
  1626. ("libx11" ,libx11)
  1627. ("libexif" ,libexif)
  1628. ("sqlite" ,sqlite)
  1629. ("openal" ,openal)
  1630. ("qrencode" ,qrencode)
  1631. ("qtbase" ,qtbase-5)
  1632. ("qtsvg" ,qtsvg)
  1633. ("sqlcipher" ,sqlcipher)))
  1634. (native-inputs
  1635. `(("pkg-config" ,pkg-config)
  1636. ("qmake" ,qttools)))
  1637. (home-page "https://qtox.github.io/")
  1638. (synopsis "Tox chat client using Qt")
  1639. (description "qTox is a Tox client that follows the Tox design
  1640. guidelines. It provides an easy to use application that allows you to
  1641. connect with friends and family without anyone else listening in.")
  1642. (license license:gpl3+)))
  1643. (define-public ytalk
  1644. (package
  1645. (name "ytalk")
  1646. (version "3.3.0")
  1647. (source
  1648. (origin
  1649. (method url-fetch)
  1650. (uri (string-append "ftp://ftp.ourproject.org/pub/ytalk/ytalk-"
  1651. version ".tar.gz"))
  1652. (sha256
  1653. (base32
  1654. "1d3jhnj8rgzxyxjwfa22vh45qwzjvxw1qh8fz6b7nfkj3zvk9jvf"))))
  1655. (build-system gnu-build-system)
  1656. (inputs
  1657. `(("ncurses" ,ncurses)))
  1658. (home-page "https://ytalk.ourproject.org")
  1659. (synopsis "Multi-user chat program")
  1660. (description "Ytalk is a replacement for the BSD talk program. Its main
  1661. advantage is the ability to communicate with any arbitrary number of users at
  1662. once. It supports both talk protocols (\"talk\" and \"ntalk\") and can communicate
  1663. with several different talk daemons at the same time.")
  1664. (license license:gpl2+)))
  1665. (define-public gloox
  1666. (package
  1667. (name "gloox")
  1668. (version "1.0.24")
  1669. (source
  1670. (origin
  1671. (method url-fetch)
  1672. (uri (string-append "https://camaya.net/download/gloox-"
  1673. version ".tar.bz2"))
  1674. (sha256
  1675. (base32 "1jgrd07qr9jvbb5hcmhrqz4w4lvwc51m30jls1fgxf1f5az6455f"))))
  1676. (build-system gnu-build-system)
  1677. (inputs
  1678. `(("libidn" ,libidn)
  1679. ("gnutls" ,gnutls)
  1680. ("zlib" ,zlib)))
  1681. (native-inputs
  1682. `(("pkg-config" ,pkg-config)))
  1683. (synopsis "Portable high-level Jabber/XMPP library for C++")
  1684. (description
  1685. "gloox is a full-featured Jabber/XMPP client library,
  1686. written in ANSI C++. It makes writing spec-compliant clients easy
  1687. and allows for hassle-free integration of Jabber/XMPP functionality
  1688. into existing applications.")
  1689. (home-page "https://camaya.net/gloox")
  1690. (license license:gpl3)))
  1691. (define-public perl-net-psyc
  1692. (package
  1693. (name "perl-net-psyc")
  1694. (version "1.3")
  1695. (source
  1696. (origin
  1697. (method url-fetch)
  1698. (uri (string-append "https://perl.psyc.eu/"
  1699. "perlpsyc-" version ".zip"))
  1700. (file-name (string-append name "-" version ".zip"))
  1701. (sha256
  1702. (base32
  1703. "0vsjclglkwgbyd9m5ad642fyysxw2x725nhq4r2m9pvqaq6s5yf2"))))
  1704. (build-system perl-build-system)
  1705. (native-inputs
  1706. `(("unzip" ,unzip)))
  1707. (inputs
  1708. `(("perl-curses" ,perl-curses)
  1709. ("perl-io-socket-ssl" ,perl-io-socket-ssl)))
  1710. (arguments
  1711. `(#:phases
  1712. (modify-phases %standard-phases
  1713. (delete 'configure) ; No configure script
  1714. ;; There is a Makefile, but it does not install everything
  1715. ;; (leaves out psycion) and says
  1716. ;; "# Just to give you a rough idea". XXX: Fix it upstream.
  1717. (replace 'build
  1718. (lambda _ (invoke "make" "manuals")))
  1719. (replace 'install
  1720. (lambda* (#:key outputs #:allow-other-keys)
  1721. (let* ((out (assoc-ref outputs "out"))
  1722. (doc (string-append out "/share/doc/perl-net-psyc"))
  1723. (man1 (string-append out "/share/man/man1"))
  1724. (man3 (string-append out "/share/man/man3"))
  1725. (bin (string-append out "/bin"))
  1726. (libpsyc (string-append out "/lib/psyc/ion"))
  1727. (libperl (string-append out "/lib/perl5/site_perl/"
  1728. ,(package-version perl))))
  1729. (copy-recursively "lib/perl5" libperl)
  1730. (copy-recursively "lib/psycion" libpsyc)
  1731. (copy-recursively "bin" bin)
  1732. (install-file "cgi/psycpager" (string-append doc "/cgi"))
  1733. (copy-recursively "contrib" (string-append doc "/contrib"))
  1734. (copy-recursively "hooks" (string-append doc "/hooks"))
  1735. (copy-recursively "sdj" (string-append doc "/sdj"))
  1736. (install-file "README.txt" doc)
  1737. (install-file "TODO.txt" doc)
  1738. (copy-recursively "share/man/man1" man1)
  1739. (copy-recursively "share/man/man3" man3)
  1740. #t)))
  1741. (add-after 'install 'wrap-programs
  1742. (lambda* (#:key outputs #:allow-other-keys)
  1743. ;; Make sure all executables in "bin" find the Perl modules
  1744. ;; provided by this package at runtime.
  1745. (let* ((out (assoc-ref outputs "out"))
  1746. (bin (string-append out "/bin/"))
  1747. (path (getenv "PERL5LIB")))
  1748. (for-each (lambda (file)
  1749. (wrap-program file
  1750. `("PERL5LIB" ":" prefix (,path))))
  1751. (find-files bin "\\.*$"))
  1752. #t))))))
  1753. (description
  1754. "@code{Net::PSYC} with support for TCP, UDP, Event.pm, @code{IO::Select} and
  1755. Gtk2 event loops. This package includes 12 applications and additional scripts:
  1756. psycion (a @uref{https://about.psyc.eu,PSYC} chat client), remotor (a control console
  1757. for @uref{https://torproject.org,tor} router) and many more.")
  1758. (synopsis "Perl implementation of PSYC protocol")
  1759. (home-page "https://perl.psyc.eu")
  1760. (license (list license:gpl2
  1761. license:perl-license
  1762. ;; contrib/irssi-psyc.pl:
  1763. license:public-domain
  1764. ;; bin/psycplay states AGPL with no version:
  1765. license:agpl3+))))
  1766. (define-public libpsyc
  1767. (package
  1768. (name "libpsyc")
  1769. (version "20160913")
  1770. (source (origin
  1771. (method url-fetch)
  1772. (uri (string-append "http://www.psyced.org/files/"
  1773. name "-" version ".tar.xz"))
  1774. (sha256
  1775. (base32
  1776. "14q89fxap05ajkfn20rnhc6b1h4i3i2adyr7y6hs5zqwb2lcmc1p"))))
  1777. (build-system gnu-build-system)
  1778. (native-inputs
  1779. `(("perl" ,perl)
  1780. ("netcat" ,netcat)
  1781. ("procps" ,procps)))
  1782. (arguments
  1783. `(#:make-flags
  1784. (list "CC=gcc"
  1785. (string-append "PREFIX=" (assoc-ref %outputs "out")))
  1786. #:phases
  1787. (modify-phases %standard-phases
  1788. ;; The rust bindings are the only ones in use, the lpc bindings
  1789. ;; are in psyclpc. The other bindings are not used by anything,
  1790. ;; the chances are high that the bindings do not even work,
  1791. ;; therefore we do not include them.
  1792. ;; TODO: Get a cargo build system in Guix.
  1793. (delete 'configure)))) ; no configure script
  1794. (home-page "https://about.psyc.eu/libpsyc")
  1795. (description
  1796. "@code{libpsyc} is a PSYC library in C which implements
  1797. core aspects of PSYC, useful for all kinds of clients and servers
  1798. including psyced.")
  1799. (synopsis "PSYC library in C")
  1800. (license license:agpl3+)))
  1801. (define-public loudmouth
  1802. (package
  1803. (name "loudmouth")
  1804. (version "1.5.4")
  1805. (source
  1806. (origin
  1807. (method url-fetch)
  1808. (uri (string-append "https://mcabber.com/files/loudmouth/"
  1809. name "-" version ".tar.bz2"))
  1810. (sha256
  1811. (base32
  1812. "03adv5xc84l9brcx0dpyqyffmsclans8yfrpnd357k6x3wfckjri"))))
  1813. (build-system gnu-build-system)
  1814. (outputs '("out" "doc"))
  1815. (arguments
  1816. `(#:configure-flags
  1817. (list
  1818. "--disable-static"
  1819. "--enable-gtk-doc"
  1820. (string-append "--with-html-dir="
  1821. (assoc-ref %outputs "doc")
  1822. "/share/gtk-doc/html"))
  1823. #:make-flags
  1824. (list
  1825. "CFLAGS=-Wno-error=all")))
  1826. (inputs
  1827. `(("glib" ,glib)
  1828. ("gnutls" ,gnutls)
  1829. ("krb5" ,mit-krb5)
  1830. ("libidn" ,libidn)))
  1831. (native-inputs
  1832. `(("pkg-config" ,pkg-config)
  1833. ("check" ,check)
  1834. ("glib" ,glib "bin") ; gtester
  1835. ("gtk-doc" ,gtk-doc)))
  1836. (home-page "https://mcabber.com/")
  1837. (description
  1838. "Loudmouth is a lightweight and easy-to-use C library for programming
  1839. with the XMPP (formerly known as Jabber) protocol. It is designed to be
  1840. easy to get started with and yet extensible to let you do anything the XMPP
  1841. protocol allows.")
  1842. (synopsis "Asynchronous XMPP library")
  1843. ;; The files have LGPL2.0+ headers, but COPYING specifies LGPL2.1.
  1844. (license license:lgpl2.0+)))
  1845. (define-public mcabber
  1846. (package
  1847. (name "mcabber")
  1848. (version "1.1.2")
  1849. (source
  1850. (origin
  1851. (method url-fetch)
  1852. (uri (string-append "https://mcabber.com/files/"
  1853. name "-" version ".tar.bz2"))
  1854. (sha256
  1855. (base32 "0q1i5acyghsmzas88qswvki8kkk2nfpr8zapgnxbcd3lwcxl38f4"))))
  1856. (build-system gnu-build-system)
  1857. (arguments
  1858. `(#:configure-flags
  1859. (list
  1860. "--disable-static"
  1861. "--enable-otr"
  1862. "--enable-enchant"
  1863. "--enable-aspell")))
  1864. (inputs
  1865. `(("gpgme" ,gpgme)
  1866. ("libotr" ,libotr)
  1867. ("aspell" ,aspell)
  1868. ("enchant" ,enchant-1.6)
  1869. ("libidn" ,libidn)
  1870. ("glib" ,glib)
  1871. ("ncurses" ,ncurses)
  1872. ("loudmouth" ,loudmouth)))
  1873. (native-inputs
  1874. `(("perl" ,perl)
  1875. ("pkg-config" ,pkg-config)
  1876. ("python" ,python-wrapper)))
  1877. (home-page "https://mcabber.com")
  1878. (description
  1879. "Mcabber is a small XMPP (Jabber) console client, which includes features
  1880. such as SASL and TLS support, @dfn{Multi-User Chat} (MUC) support, logging,
  1881. command-completion, OpenPGP encryption, @dfn{Off-the-Record Messaging} (OTR)
  1882. support, and more.")
  1883. (synopsis "Small XMPP console client")
  1884. (license license:gpl2+)))
  1885. (define-public freetalk
  1886. (package
  1887. (name "freetalk")
  1888. (version "4.1")
  1889. (source (origin
  1890. (method url-fetch)
  1891. (uri (string-append "mirror://gnu/freetalk/freetalk-"
  1892. version ".tar.gz"))
  1893. (sha256
  1894. (base32
  1895. "1rmrn7a1bb7vm26yaklrvx008a9qhwc32s57dwrlf40lv9gffwny"))))
  1896. (build-system gnu-build-system)
  1897. (arguments
  1898. `(#:configure-flags
  1899. (list "CFLAGS=-fcommon")
  1900. #:phases
  1901. (modify-phases %standard-phases
  1902. ;; For 'system' commands in Scheme code.
  1903. (add-after 'install 'wrap-program
  1904. (lambda* (#:key inputs outputs #:allow-other-keys)
  1905. (let* ((out (assoc-ref outputs "out"))
  1906. (bash (assoc-ref inputs "bash"))
  1907. (coreutils (assoc-ref inputs "coreutils"))
  1908. (less (assoc-ref inputs "less")))
  1909. (wrap-program (string-append out "/bin/freetalk")
  1910. `("PATH" ":" prefix
  1911. ,(map (lambda (dir)
  1912. (string-append dir "/bin"))
  1913. (list bash coreutils less))))
  1914. #t))))))
  1915. (native-inputs
  1916. `(("autoconf" ,autoconf)
  1917. ("automake" ,automake)
  1918. ("pkg-config" ,pkg-config)
  1919. ("texinfo" ,texinfo)))
  1920. (inputs
  1921. `(("bash" ,bash)
  1922. ("glib" ,glib)
  1923. ("guile" ,guile-2.0)
  1924. ("less" ,less)
  1925. ("loudmouth" ,loudmouth)
  1926. ("readline" ,readline)))
  1927. (synopsis "Extensible console-based Jabber client")
  1928. (description
  1929. "GNU Freetalk is a command-line Jabber/XMPP chat client. It notably uses
  1930. the Readline library to handle input, so it features convenient navigation of
  1931. text as well as tab-completion of buddy names, commands and English words. It
  1932. is also scriptable and extensible via Guile.")
  1933. (home-page "https://www.gnu.org/software/freetalk/")
  1934. (license license:gpl3+)))
  1935. (define-public libmesode
  1936. (package
  1937. (name "libmesode")
  1938. (version "0.10.1")
  1939. (source (origin
  1940. (method git-fetch)
  1941. (uri (git-reference
  1942. (url "https://github.com/profanity-im/libmesode")
  1943. (commit version)))
  1944. (file-name (git-file-name name version))
  1945. (sha256
  1946. (base32
  1947. "1bxnkhrypgv41qyy1n545kcggmlw1hvxnhwihijhhcf2pxd2s654"))))
  1948. (build-system gnu-build-system)
  1949. (arguments
  1950. `(#:configure-flags (list "--disable-static")
  1951. #:phases
  1952. (modify-phases %standard-phases
  1953. (add-after 'unpack 'patch-make
  1954. (lambda _
  1955. (substitute* "Makefile.am"
  1956. (("'\\^xmpp_'") "'.'"))
  1957. #t)))))
  1958. (inputs
  1959. `(("expat" ,expat)
  1960. ("openssl" ,openssl)))
  1961. (native-inputs
  1962. `(("autoconf" ,autoconf)
  1963. ("automake" ,automake)
  1964. ("libtool" ,libtool)
  1965. ("pkg-config" ,pkg-config)))
  1966. (synopsis "C library for writing XMPP clients")
  1967. (description "Libmesode is a fork of libstrophe for use with Profanity
  1968. XMPP Client. In particular, libmesode provides extra TLS functionality such as
  1969. manual SSL certificate verification.")
  1970. (home-page "https://github.com/profanity/libmesode")
  1971. ;; Dual-licensed.
  1972. (license (list license:gpl3+ license:x11))))
  1973. (define-public libstrophe
  1974. (package
  1975. (name "libstrophe")
  1976. (version "0.10.1")
  1977. (source
  1978. (origin
  1979. (method git-fetch)
  1980. (uri (git-reference
  1981. (url "https://github.com/strophe/libstrophe")
  1982. (commit version)))
  1983. (file-name (git-file-name name version))
  1984. (sha256
  1985. (base32 "11d341avsfr0z4lq15cy5dkmff6qpy91wkgzdpfdy31l27pa1g79"))))
  1986. (build-system gnu-build-system)
  1987. (arguments
  1988. `(#:configure-flags (list "--disable-static")
  1989. #:phases
  1990. (modify-phases %standard-phases
  1991. (add-after 'unpack 'patch-make
  1992. (lambda _
  1993. (substitute* "Makefile.am"
  1994. (("'\\^xmpp_'") "'.'"))
  1995. #t)))))
  1996. (inputs
  1997. `(("expat" ,expat)
  1998. ("openssl" ,openssl)))
  1999. (native-inputs
  2000. `(("autoconf" ,autoconf)
  2001. ("automake" ,automake)
  2002. ("libtool" ,libtool)
  2003. ("pkg-config" ,pkg-config)))
  2004. (synopsis "C library for writing XMPP clients")
  2005. (description "Libstrophe is a minimal XMPP library written in C. It has
  2006. almost no external dependencies, only an XML parsing library (expat or libxml
  2007. are both supported).")
  2008. (home-page "http://strophe.im/libstrophe")
  2009. ;; Dual-licensed.
  2010. (license (list license:gpl3+ license:x11))))
  2011. (define-public profanity
  2012. (package
  2013. (name "profanity")
  2014. (version "0.10.0")
  2015. (source
  2016. (origin
  2017. (method url-fetch)
  2018. (uri
  2019. (string-append "https://profanity-im.github.io/profanity-"
  2020. version ".tar.gz"))
  2021. (sha256
  2022. (base32
  2023. "137z77514fgj2dk13d12g4jrn6gs5k85nwrk1r1kiv7rj0jy61aa"))))
  2024. (build-system glib-or-gtk-build-system)
  2025. (arguments
  2026. `(#:configure-flags
  2027. (list
  2028. "--disable-static"
  2029. "--enable-notifications"
  2030. "--enable-python-plugins"
  2031. "--enable-c-plugins"
  2032. "--enable-plugins"
  2033. "--enable-otr"
  2034. "--enable-pgp"
  2035. "--enable-omemo"
  2036. "--enable-icons-and-clipboard")))
  2037. (native-inputs
  2038. `(("autoconf" ,autoconf)
  2039. ("autoconf-archive" ,autoconf-archive)
  2040. ("automake" ,automake)
  2041. ("cmocka" ,cmocka)
  2042. ("libtool" ,libtool)
  2043. ("pkg-config" ,pkg-config)))
  2044. (inputs
  2045. `(("curl" ,curl)
  2046. ("expat" ,expat)
  2047. ("glib" ,glib)
  2048. ("gpgme" ,gpgme)
  2049. ("gtk+" ,gtk+-2)
  2050. ("libgcrypt" ,libgcrypt)
  2051. ("libmesode" ,libmesode)
  2052. ("libnotify" ,libnotify)
  2053. ("libotr" ,libotr)
  2054. ("libsignal-protocol-c" ,libsignal-protocol-c)
  2055. ;; ("libxss" ,libxss)
  2056. ("ncurses" ,ncurses)
  2057. ("openssl" ,openssl)
  2058. ("python" ,python-wrapper)
  2059. ("readline" ,readline)
  2060. ("sqlite" ,sqlite)))
  2061. (synopsis "Console-based XMPP client")
  2062. (description "Profanity is a console based XMPP client written in C
  2063. using ncurses and libmesode, inspired by Irssi.")
  2064. (home-page "https://profanity-im.github.io")
  2065. (license license:gpl3+)))
  2066. (define-public libircclient
  2067. (package
  2068. (name "libircclient")
  2069. (version "1.10")
  2070. (source
  2071. (origin
  2072. (method url-fetch)
  2073. (uri (string-append "mirror://sourceforge/libircclient/libircclient/"
  2074. version "/libircclient-" version ".tar.gz"))
  2075. (sha256
  2076. (base32
  2077. "0b9wa0h3xc31wpqlvgxgnvqp5wgx3kwsf5s9432m5cj8ycx6zcmv"))))
  2078. (build-system gnu-build-system)
  2079. (inputs
  2080. `(("openssl" ,openssl)))
  2081. (arguments
  2082. `(#:configure-flags
  2083. (list (string-append "--libdir="
  2084. (assoc-ref %outputs "out") "/lib")
  2085. "--enable-shared"
  2086. "--enable-ipv6"
  2087. "--enable-openssl")
  2088. #:tests? #f)) ; no test suite
  2089. (home-page "https://www.ulduzsoft.com/libircclient/")
  2090. (synopsis "Library implementing the client IRC protocol")
  2091. (description "Libircclient is a library which implements the client IRC
  2092. protocol. It is designed to be small, fast, portable and compatible with the
  2093. RFC standards as well as non-standard but popular features. It can be used for
  2094. building the IRC clients and bots.")
  2095. (license license:lgpl3+)))
  2096. (define-public toxic
  2097. (package
  2098. (name "toxic")
  2099. (version "0.8.4")
  2100. (source
  2101. (origin
  2102. (method git-fetch)
  2103. (uri (git-reference
  2104. (url "https://github.com/JFreegman/toxic")
  2105. (commit (string-append "v" version))))
  2106. (sha256
  2107. (base32 "0p1cmj1kyp506y5xm04mhlznhf5wcylvgsn6b307ms91vjqs3fg2"))
  2108. (file-name (git-file-name name version))))
  2109. (build-system gnu-build-system)
  2110. (arguments
  2111. `(#:tests? #f ; no tests
  2112. #:make-flags
  2113. (list
  2114. "CC=gcc"
  2115. (string-append "PREFIX="
  2116. (assoc-ref %outputs "out")))
  2117. #:phases
  2118. (modify-phases %standard-phases
  2119. (delete 'configure)
  2120. (add-before 'build 'enable-python-scripting
  2121. (lambda _
  2122. ;; XXX: For compatibility with Python 3.8, adjust python3-config
  2123. ;; invokation to include --embed; see
  2124. ;; <https://github.com/JFreegman/toxic/issues/533>.
  2125. (substitute* "cfg/checks/python.mk"
  2126. (("python3-config --ldflags")
  2127. "python3-config --ldflags --embed"))
  2128. (setenv "ENABLE_PYTHON" "1")
  2129. #t)))))
  2130. (inputs
  2131. `(("c-toxcore" ,c-toxcore)
  2132. ("curl" ,curl)
  2133. ("freealut" ,freealut)
  2134. ("gdk-pixbuf" ,gdk-pixbuf) ; for libnotify.pc
  2135. ("libconfig" ,libconfig)
  2136. ("libnotify" ,libnotify)
  2137. ("libpng" ,libpng)
  2138. ("libvpx" ,libvpx)
  2139. ("libx11" ,libx11)
  2140. ("ncurses" ,ncurses)
  2141. ("openal" ,openal)
  2142. ("python" ,python)
  2143. ("qrencode" ,qrencode)))
  2144. (native-inputs
  2145. `(("pkg-config" ,pkg-config)))
  2146. (home-page "https://github.com/JFreegman/toxic")
  2147. (synopsis "Tox chat client using ncurses")
  2148. (description "Toxic is a console-based instant messaging client, using
  2149. c-toxcore and ncurses. It provides audio calls, sound and desktop
  2150. notifications, and Python scripting support.")
  2151. (license license:gpl3+)))
  2152. (define-public libqmatrixclient
  2153. (package
  2154. (name "libqmatrixclient")
  2155. (version "0.5.3.2")
  2156. (source
  2157. (origin
  2158. (method git-fetch)
  2159. (uri (git-reference
  2160. (url "https://github.com/quotient-im/libQuotient")
  2161. (commit version)))
  2162. (file-name (git-file-name name version))
  2163. (sha256
  2164. (base32 "0gkwr3yw6k2m0j8cc085b5p2q788rf5nhp1p5hc5d55pc7mci2qs"))))
  2165. (build-system cmake-build-system)
  2166. (inputs
  2167. `(("qtbase" ,qtbase-5)
  2168. ("qtmultimedia" ,qtmultimedia)))
  2169. (arguments
  2170. `(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON")
  2171. #:tests? #f)) ; no tests
  2172. (home-page "https://matrix.org/docs/projects/sdk/libqmatrixclient.html")
  2173. (synopsis "Qt5 client library for the Matrix instant messaging protocol")
  2174. (description "libqmatrixclient is a Qt5 library to write clients for the
  2175. Matrix instant messaging protocol. Quaternion is the reference client
  2176. implementation. Quaternion and libqmatrixclient together form the
  2177. QMatrixClient project.")
  2178. (license license:lgpl2.1+)))
  2179. (define-public mtxclient
  2180. (package
  2181. (name "mtxclient")
  2182. (version "0.5.1")
  2183. (source
  2184. (origin
  2185. (method git-fetch)
  2186. (uri (git-reference
  2187. (url "https://github.com/Nheko-Reborn/mtxclient")
  2188. (commit (string-append "v" version))))
  2189. (file-name (git-file-name name version))
  2190. (sha256
  2191. (base32 "1xznfx2bhw0ahwmkxm0rs05vz05ijk5k4190rj6qp3bvb9byiajh"))))
  2192. (arguments
  2193. `(#:configure-flags
  2194. (list
  2195. ;; Disable example binaries (not installed)
  2196. "-DBUILD_LIB_EXAMPLES=OFF")
  2197. #:phases
  2198. (modify-phases %standard-phases
  2199. (add-before 'configure 'disable-network-tests
  2200. (lambda _
  2201. (substitute* "CMakeLists.txt"
  2202. (("add_test\\((BasicConnectivity|ClientAPI|MediaAPI|Encryption|Pushrules)")
  2203. "# add_test"))
  2204. #t)))))
  2205. (build-system cmake-build-system)
  2206. (inputs
  2207. `(("boost" ,boost)
  2208. ("json-modern-cxx" ,json-modern-cxx)
  2209. ("libolm" ,libolm)
  2210. ("libsodium" ,libsodium)
  2211. ("openssl" ,openssl)
  2212. ("spdlog" ,spdlog)
  2213. ("zlib" ,zlib)))
  2214. (native-inputs
  2215. `(("googletest" ,googletest)
  2216. ("pkg-config" ,pkg-config)))
  2217. (home-page "https://github.com/Nheko-Reborn/mtxclient")
  2218. (synopsis "Client API library for the Matrix protocol")
  2219. (description "@code{mtxclient} is a C++ library that implements client API
  2220. for the Matrix protocol. It is built on to of @code{Boost.Asio}.")
  2221. (license license:expat)))
  2222. (define-public nheko
  2223. (package
  2224. (name "nheko")
  2225. (version "0.8.2")
  2226. (source
  2227. (origin
  2228. (method git-fetch)
  2229. (uri (git-reference
  2230. (url "https://github.com/Nheko-Reborn/nheko")
  2231. (commit (string-append "v" version))))
  2232. (file-name (git-file-name name version))
  2233. (sha256
  2234. (base32 "0362hkbprc6jqlgmvzwxyvify4b1ldjakyqdz55m25xsypbpv2f3"))
  2235. (modules '((guix build utils)))
  2236. (snippet
  2237. '(begin
  2238. (delete-file-recursively "third_party")))))
  2239. (arguments
  2240. `(#:tests? #f ;no test target
  2241. #:configure-flags
  2242. '("-DCMAKE_BUILD_TYPE=Release"
  2243. "-DBUILD_DOCS=ON"
  2244. ;; Fix required because we are using a static SingleApplication
  2245. "-DCMAKE_CXX_FLAGS= \"-DQAPPLICATION_CLASS=QApplication\" "
  2246. ;; Compile Qml will make Nheko faster, but you will need to recompile
  2247. ;; it, when you update Qt. That's fine for us.
  2248. "-DCOMPILE_QML=ON")
  2249. #:phases
  2250. (modify-phases %standard-phases
  2251. (add-after 'unpack 'unbundle-dependencies
  2252. (lambda* (#:key inputs #:allow-other-keys)
  2253. (let ((single-app (assoc-ref inputs "single-application")))
  2254. (substitute* "CMakeLists.txt"
  2255. ;; Remove include and source dirs,replace with the correct one
  2256. (("third_party/blurhash/blurhash.cpp") "")
  2257. (("third_party/cpp-httplib-0.5.12")
  2258. (string-append "\"" single-app "/include\""))
  2259. (("add_subdirectory.*third_party/SingleApplication.*") "")
  2260. ;; Link using the correct static/shared libs
  2261. (("SingleApplication::SingleApplication")
  2262. (string-append
  2263. ;; Dynamic libraries
  2264. "httplib" "\n" "blurhash" "\n"
  2265. ;; Static library
  2266. single-app "/lib/libSingleApplication.a"))))))
  2267. (add-after 'unpack 'fix-determinism
  2268. (lambda _
  2269. ;; Make Qt deterministic.
  2270. (setenv "QT_RCC_SOURCE_DATE_OVERRIDE" "1")))
  2271. (add-after 'install 'wrap-program
  2272. (lambda* (#:key inputs outputs #:allow-other-keys)
  2273. (let ((out (assoc-ref outputs "out"))
  2274. (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
  2275. (wrap-program (string-append out "/bin/nheko")
  2276. `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path)))))))))
  2277. (build-system qt-build-system)
  2278. (inputs
  2279. `(("boost" ,boost)
  2280. ("blurhash" ,blurhash)
  2281. ("cpp-httplib" ,cpp-httplib)
  2282. ("cmark" ,cmark)
  2283. ("gst-plugins-base" ,gst-plugins-base)
  2284. ("gst-plugins-bad" ,gst-plugins-bad) ; sdp & webrtc for voip
  2285. ("gst-plugins-good" ,gst-plugins-good) ; rtpmanager for voip
  2286. ("json-modern-cxx" ,json-modern-cxx)
  2287. ("libnice" ,libnice) ; for voip
  2288. ("libolm" ,libolm)
  2289. ("lmdb" ,lmdb)
  2290. ("lmdbxx" ,lmdbxx)
  2291. ("mtxclient" ,mtxclient)
  2292. ("openssl" ,openssl)
  2293. ("qtbase" ,qtbase-5)
  2294. ("qtdeclarative" ,qtdeclarative)
  2295. ("qtkeychain" ,qtkeychain)
  2296. ("qtgraphicaleffects" ,qtgraphicaleffects)
  2297. ("qtmultimedia" ,qtmultimedia)
  2298. ("qtquickcontrols2" ,qtquickcontrols2)
  2299. ("qtsvg" ,qtsvg)
  2300. ("spdlog" ,spdlog)
  2301. ("single-application" ,single-application-qt5)
  2302. ("zlib" ,zlib)))
  2303. (native-inputs
  2304. `(("doxygen" ,doxygen)
  2305. ("graphviz" ,graphviz)
  2306. ("pkg-config" ,pkg-config)
  2307. ("qtlinguist" ,qttools)))
  2308. (home-page "https://github.com/Nheko-Reborn/nheko")
  2309. (synopsis "Desktop client for Matrix using Qt and C++14")
  2310. (description "@code{Nheko} want to provide a native desktop app for the
  2311. Matrix protocol that feels more like a mainstream chat app and less like an IRC
  2312. client.
  2313. Many matrix features are supported, including user registration, rooms, typing
  2314. notification, emojis, E2E encryption, and voip calls.")
  2315. (license license:gpl3+)))
  2316. (define-public quaternion
  2317. (package
  2318. (name "quaternion")
  2319. (version "0.0.9.4f")
  2320. (outputs '("out" "debug"))
  2321. (source
  2322. (origin
  2323. (method git-fetch)
  2324. (uri (git-reference
  2325. (url "https://github.com/quotient-im/Quaternion")
  2326. (commit version)))
  2327. (file-name (git-file-name name version))
  2328. (sha256
  2329. (base32 "1q9ddz4rs02a0w3lwrsjnh59khv38cq9f0kv09vnwvazvayn87ck"))))
  2330. (build-system qt-build-system)
  2331. (inputs
  2332. `(("libqmatrixclient" ,libqmatrixclient)
  2333. ("qtbase" ,qtbase-5)
  2334. ("qtdeclarative" ,qtdeclarative)
  2335. ("qtmultimedia" ,qtmultimedia)
  2336. ("qtquickcontrols" ,qtquickcontrols)
  2337. ("qtquickcontrols2" ,qtquickcontrols2)
  2338. ("qtsvg" ,qtsvg)
  2339. ("qttools" ,qttools)
  2340. ("xdg-utils" ,xdg-utils)))
  2341. (arguments
  2342. `(#:tests? #f)) ; no tests
  2343. (home-page "https://matrix.org/docs/projects/client/quaternion.html")
  2344. (synopsis "Graphical client for the Matrix instant messaging protocol")
  2345. (description "Quaternion is a Qt5 desktop client for the Matrix instant
  2346. messaging protocol. It uses libqmatrixclient and is its reference client
  2347. implementation. Quaternion and libqmatrixclient together form the
  2348. QMatrixClient project.")
  2349. (license (list license:gpl3+ ; all source code
  2350. license:lgpl3+)))) ; icons/breeze
  2351. (define-public hangups
  2352. (package
  2353. (name "hangups")
  2354. (version "0.4.14")
  2355. (source
  2356. (origin
  2357. (method url-fetch)
  2358. (uri (pypi-uri "hangups" version))
  2359. (sha256
  2360. (base32 "15qbbafcrdkx73xz9y30qa3d8nj6mgrp2m41749i5nn1qywmikk8"))))
  2361. (build-system python-build-system)
  2362. (arguments
  2363. `(#:phases
  2364. (modify-phases %standard-phases
  2365. (add-before 'build 'relax-dependencies
  2366. ;; Relax overly strict package version specifications.
  2367. (lambda _
  2368. (substitute* "setup.py"
  2369. (("==") ">=")
  2370. ((",<.*'") "'"))
  2371. #t))
  2372. (replace 'check
  2373. (lambda* (#:key tests? #:allow-other-keys)
  2374. (when tests?
  2375. (invoke "pytest" "hangups"))
  2376. #t)))))
  2377. (propagated-inputs
  2378. `(("python-aiohttp" ,python-aiohttp)
  2379. ("python-appdirs" ,python-appdirs)
  2380. ("python-async-timeout" ,python-async-timeout)
  2381. ("python-configargparse" ,python-configargparse)
  2382. ("python-mechanicalsoup" ,python-mechanicalsoup)
  2383. ("python-protobuf" ,python-protobuf-3.6)
  2384. ("python-readlike" ,python-readlike)
  2385. ("python-reparser" ,python-reparser)
  2386. ("python-requests" ,python-requests)
  2387. ("python-urwid" ,python-urwid)))
  2388. (native-inputs
  2389. `(("python-httpretty" ,python-httpretty)
  2390. ("python-pytest" ,python-pytest)))
  2391. (home-page "https://hangups.readthedocs.io/")
  2392. (synopsis "Instant messaging client for Google Hangouts")
  2393. (description
  2394. "Hangups is an instant messaging client for Google Hangouts. It includes
  2395. both a Python library and a reference client with a text-based user interface.
  2396. Hangups is implements a reverse-engineered version of Hangouts' proprietary,
  2397. non-interoperable protocol, which allows it to support features like group
  2398. messaging that aren’t available to clients that connect over XMPP.")
  2399. (license license:expat)))
  2400. (define-public telegram-purple
  2401. (package
  2402. (name "telegram-purple")
  2403. (version "1.4.7")
  2404. (home-page "https://github.com/majn/telegram-purple")
  2405. (source (origin
  2406. (method git-fetch)
  2407. (uri (git-reference
  2408. (url home-page)
  2409. (commit (string-append "v" version))
  2410. (recursive? #t)))
  2411. (sha256
  2412. (base32
  2413. "14h8lvj0kjvy1b5i84ha2w9rl3akxjwwvsp5j4dcxwfghrkzqgf2"))
  2414. (modules '((guix build utils)))
  2415. (snippet
  2416. '(begin
  2417. (substitute* "Makefile.in"
  2418. ;; By default these two directories point to Pidgin's own
  2419. ;; prefix.
  2420. (("^PLUGIN_DIR_PURPLE=.*")
  2421. (string-append
  2422. "exec_prefix := @exec_prefix@\n"
  2423. "PLUGIN_DIR_PURPLE := @libdir@/purple-2\n"))
  2424. (("^DATA_ROOT_DIR_PURPLE=.*")
  2425. "DATA_ROOT_DIR_PURPLE := @datarootdir@\n")
  2426. ;; Honor sysconfdir instead of trying to write to /etc.
  2427. (("DESTDIR\\)/etc/telegram-purple")
  2428. "DESTDIR)@sysconfdir@/telegram-purple"))
  2429. #t))
  2430. (patches (search-patches "telegram-purple-adjust-test.patch"))
  2431. (file-name (git-file-name name version))))
  2432. (build-system gnu-build-system)
  2433. (native-inputs
  2434. `(("pkg-config" ,pkg-config)
  2435. ("gettext" ,gettext-minimal)
  2436. ("which" ,which)))
  2437. (inputs
  2438. `(("pidgin" ,pidgin)
  2439. ("libgcrypt" ,libgcrypt)
  2440. ("libwebp" ,libwebp)
  2441. ("glib" ,glib)
  2442. ("gtk+" ,gtk+-2)
  2443. ("zlib" ,zlib)))
  2444. (arguments
  2445. `(#:phases
  2446. (modify-phases %standard-phases
  2447. ;; We're using release tag for repository checkout - let's prepare
  2448. ;; header defining GIT_COMMIT manually instead of running git to
  2449. ;; identify version which is being compiled. Git repository
  2450. ;; is removed anyway and only source code is kept.
  2451. (add-after 'unpack 'prepare-commit.h
  2452. (lambda _
  2453. (with-output-to-file "./commit.h"
  2454. (lambda ()
  2455. (display
  2456. (string-append "//generated by guix, use version instead of "
  2457. "commit\n"
  2458. "#ifndef GIT_COMMIT\n"
  2459. "# define GIT_COMMIT \"v"
  2460. ,version "\"\n"
  2461. "#endif\n"))))
  2462. #t))
  2463. (add-before 'configure 'set-SHELL-variables
  2464. ;; Set these environment variables so that 'tgl/configure' uses the
  2465. ;; right shell and not /bin/sh.
  2466. (lambda _
  2467. (let ((bash (which "bash")))
  2468. (setenv "SHELL" bash)
  2469. (setenv "CONFIG_SHELL" bash)
  2470. #t))))))
  2471. (synopsis "Telegram messaging support for Pidgin")
  2472. (description
  2473. "Telegram-purple is a plugin for Libpurple, the communication library
  2474. used by the Pidgin instant messaging client, that adds support for the
  2475. Telegram messenger.
  2476. This package is on ``life support'' until @code{tdlib-purple} is a full
  2477. replacement.")
  2478. ;; Code under tgl/ (the Telegram library) is LGPLv2.1+, but the plugin
  2479. ;; itself is GPLv2+.
  2480. (license license:gpl2+)))
  2481. (define-public tdlib
  2482. (package
  2483. (name "tdlib")
  2484. (version "1.7.0")
  2485. (source (origin
  2486. (method git-fetch)
  2487. (uri (git-reference
  2488. (url "https://github.com/tdlib/td")
  2489. (commit (string-append "v" version))))
  2490. (sha256
  2491. (base32
  2492. "0dfir57ljcn98mkg061c5642qb93wh2lm1n4nngpl3na9vvfk75i"))
  2493. (file-name (git-file-name name version))))
  2494. (build-system cmake-build-system)
  2495. (arguments
  2496. `(#:tests? #t
  2497. #:configure-flags
  2498. (list "-DCMAKE_BUILD_TYPE=Release"
  2499. "-DTD_ENABLE_LTO=OFF") ; FIXME: Get LTO to work.
  2500. #:phases
  2501. (modify-phases %standard-phases
  2502. (add-after 'unpack 'remove-failing-tests
  2503. (lambda _
  2504. (substitute* "test/CMakeLists.txt"
  2505. ;; The test cases are compiled into a distinct binary
  2506. ;; which uses mtproto.cpp to attempt to connect to
  2507. ;; a remote server. Removing this file from the sources
  2508. ;; list disables those specific test cases.
  2509. (("\\$\\{CMAKE_CURRENT_SOURCE_DIR\\}/mtproto.cpp") ""))
  2510. #t)))))
  2511. (native-inputs
  2512. `(("gperf" ,gperf)
  2513. ("openssl" ,openssl)
  2514. ("zlib" ,zlib)
  2515. ("php" ,php)
  2516. ("doxygen" ,doxygen)))
  2517. (synopsis "Cross-platform library for building Telegram clients")
  2518. (description "Tdlib is a cross-platform library for creating custom
  2519. Telegram clients following the official Telegram API. It can be easily used
  2520. from almost any programming language with a C-FFI and features first-class
  2521. support for high performance Telegram Bot creation.")
  2522. (home-page "https://core.telegram.org/tdlib")
  2523. (license license:boost1.0)))
  2524. (define-public purple-mm-sms
  2525. (package
  2526. (name "purple-mm-sms")
  2527. (version "0.1.4")
  2528. (source (origin
  2529. (method git-fetch)
  2530. (uri (git-reference
  2531. (url "https://source.puri.sm/Librem5/purple-mm-sms.git")
  2532. (commit (string-append "v" version))))
  2533. (file-name (git-file-name name version))
  2534. (sha256
  2535. (base32
  2536. "1daf7zl8bhhm1szkgxflpqql69f2w9i9nlgf1n4p1nynxifz1bim"))))
  2537. (build-system gnu-build-system)
  2538. (arguments
  2539. `(#:make-flags
  2540. (let ((out (assoc-ref %outputs "out")))
  2541. ;; Fix hardcoded paths
  2542. (list (string-append "PREFIX=" out)
  2543. (string-append "PLUGIN_DIR_PURPLE=" out "/lib/purple-2")
  2544. (string-append "DATA_ROOT_DIR_PURPLE=" out "/share")))
  2545. #:tests? #f ; no tests
  2546. #:phases
  2547. (modify-phases %standard-phases
  2548. (delete 'configure))))
  2549. (native-inputs
  2550. `(("glib:bin" ,glib "bin")
  2551. ("pkg-config" ,pkg-config)))
  2552. (inputs
  2553. `(("modem-manager" ,modem-manager)
  2554. ("pidgin" ,pidgin)))
  2555. (synopsis "Libpurple plugin for SMS via ModemManager")
  2556. (description "Plugin for libpurple to allow sending SMS using ModemManager.")
  2557. (home-page "https://source.puri.sm/Librem5/purple-mm-sms")
  2558. (license license:gpl2+)))
  2559. (define-public chatty
  2560. (package
  2561. (name "chatty")
  2562. (version "0.1.17")
  2563. (source (origin
  2564. (method git-fetch)
  2565. (uri (git-reference
  2566. (url "https://source.puri.sm/Librem5/chatty.git")
  2567. (commit (string-append "v" version))))
  2568. (file-name (git-file-name name version))
  2569. (sha256
  2570. (base32
  2571. "0ba1rw8a3vif9k3570hxjfm25vqys3vk3f6g8z5irklwq4bi6lmn"))))
  2572. (build-system meson-build-system)
  2573. (arguments
  2574. '(#:phases
  2575. (modify-phases %standard-phases
  2576. (add-after 'unpack 'skip-updating-desktop-database
  2577. (lambda _
  2578. (substitute* "meson.build"
  2579. (("meson.add_install_script.*") ""))
  2580. #t)))))
  2581. (native-inputs
  2582. `(("gettext" ,gettext-minimal)
  2583. ("glib:bin" ,glib "bin")
  2584. ("pkg-config" ,pkg-config)))
  2585. (inputs
  2586. `(("feedbackd" ,feedbackd)
  2587. ("folks" ,folks)
  2588. ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
  2589. ("libgcrypt" ,libgcrypt)
  2590. ("libgee" ,libgee)
  2591. ("libhandy" ,libhandy-0.0)
  2592. ("pidgin" ,pidgin)
  2593. ("purple-mm-sms" ,purple-mm-sms)
  2594. ("sqlite" ,sqlite)))
  2595. (propagated-inputs
  2596. `(("adwaita-icon-theme" ,adwaita-icon-theme)
  2597. ("evolution-data-server" ,evolution-data-server)))
  2598. (synopsis "Mobile client for XMPP and SMS messaging")
  2599. (description "Chatty is a chat program for XMPP and SMS. It works on mobile
  2600. as well as on desktop platforms. It's based on libpurple and ModemManager.")
  2601. (home-page "https://source.puri.sm/Librem5/chatty")
  2602. (license license:gpl3+)))
  2603. (define-public mosquitto
  2604. (package
  2605. (name "mosquitto")
  2606. (version "1.6.12")
  2607. (source
  2608. (origin
  2609. (method url-fetch)
  2610. (uri (string-append "https://mosquitto.org/files/source/mosquitto-"
  2611. version ".tar.gz"))
  2612. (sha256
  2613. (base32
  2614. "1yq7y329baa1ly488rw125c3mvsnsa7kjkik602xv1xpkz8p73al"))))
  2615. (build-system cmake-build-system)
  2616. (inputs
  2617. `(("openssl" ,openssl)))
  2618. (synopsis "Message broker")
  2619. (description "This package provides Eclipse Mosquitto, a message broker
  2620. that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1. Mosquitto
  2621. is lightweight and is suitable for use on all devices from low power single
  2622. board computers to full servers.
  2623. The MQTT protocol provides a lightweight method of carrying out messaging
  2624. using a publish/subscribe model. This makes it suitable for Internet of
  2625. Things messaging such as with low power sensors or mobile devices such
  2626. as phones, embedded computers or microcontrollers.")
  2627. (home-page "https://mosquitto.org/")
  2628. ;; Dual licensed.
  2629. (license (list license:epl1.0 license:edl1.0))))
  2630. (define-public movim-desktop
  2631. (let ((commit "83d583b83629dbd2ec448da9a1ffd81f6c1fb295")
  2632. (revision "3"))
  2633. (package
  2634. (name "movim-desktop")
  2635. (version
  2636. (git-version "0.14.0" revision commit))
  2637. (source
  2638. (origin
  2639. (method git-fetch)
  2640. (uri
  2641. (git-reference
  2642. (url "https://github.com/movim/movim_desktop")
  2643. (commit commit)))
  2644. (file-name (git-file-name name version))
  2645. (sha256
  2646. (base32 "1lsa3k3wx1d2lk0qs0k5jc5bmapnmpzwynprjf2wihh8c8y3iwlz"))))
  2647. (build-system qt-build-system)
  2648. (arguments
  2649. `(#:tests? #f ; No target
  2650. #:phases
  2651. (modify-phases %standard-phases
  2652. (add-after 'unpack 'patch
  2653. (lambda* (#:key outputs #:allow-other-keys)
  2654. (substitute* `("CMakeLists.txt" "movim.desktop")
  2655. (("/usr")
  2656. (assoc-ref outputs "out"))
  2657. (("\"build")
  2658. "\"../build"))
  2659. #t)))))
  2660. (inputs
  2661. `(("qtbase" ,qtbase-5)
  2662. ("qtdeclarative" ,qtdeclarative)
  2663. ("qtwebchannel" ,qtwebchannel)))
  2664. (propagated-inputs
  2665. `(("qtwebengine" ,qtwebengine)))
  2666. (home-page "https://movim.eu/")
  2667. (synopsis "Desktop Application for Movim")
  2668. (description
  2669. "Movim-Desktop is a desktop application, relying on Qt, for the Movim
  2670. social and chat platform.")
  2671. (license license:gpl3+))))
  2672. (define-public psi-plus
  2673. (package
  2674. (name "psi-plus")
  2675. (version "1.5.1484")
  2676. (source
  2677. (origin
  2678. (method git-fetch)
  2679. (uri
  2680. (git-reference
  2681. (url "https://github.com/psi-plus/psi-plus-snapshots")
  2682. (commit version)))
  2683. (file-name (git-file-name name version))
  2684. (modules '((guix build utils)))
  2685. (snippet
  2686. `(begin
  2687. (delete-file-recursively "3rdparty")))
  2688. (sha256
  2689. (base32 "1jsm39nzzbqkp3zc0xqx7jid6p4q1ra28xad38wjr2l1jb8qjn24"))))
  2690. (build-system qt-build-system)
  2691. (arguments
  2692. `(#:tests? #f ; No target
  2693. #:imported-modules
  2694. (,@%qt-build-system-modules
  2695. (guix build glib-or-gtk-build-system))
  2696. #:modules
  2697. ((guix build qt-build-system)
  2698. ((guix build glib-or-gtk-build-system)
  2699. #:prefix glib-or-gtk:)
  2700. (guix build utils))
  2701. #:configure-flags
  2702. (list
  2703. "-DBUILD_PSIMEDIA=ON" ; For A/V support
  2704. "-DENABLE_PLUGINS=ON"
  2705. "-DUSE_HUNSPELL=OFF" ; Use Enchant instead
  2706. "-DUSE_ENCHANT=ON"
  2707. "-DUSE_CCACHE=OFF") ; Not required
  2708. #:phases
  2709. (modify-phases %standard-phases
  2710. (add-after 'unpack 'patch-source
  2711. (lambda _
  2712. (substitute* "CMakeLists.txt"
  2713. (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/http-parser/http_parser.h")
  2714. "")
  2715. (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qhttp/qhttp.pro")
  2716. "")
  2717. (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qite/qite.pro")
  2718. "")
  2719. (("add_subdirectory\\( 3rdparty \\)")
  2720. ""))
  2721. (substitute* "src/CMakeLists.txt"
  2722. (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qite/libqite")
  2723. "")
  2724. (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/http-parser")
  2725. "")
  2726. (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qhttp/src/private")
  2727. "")
  2728. (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qhttp/src")
  2729. "")
  2730. (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty")
  2731. "")
  2732. (("add_dependencies\\(\\$\\{PROJECT_NAME\\} qhttp\\)")
  2733. "target_link_libraries(${PROJECT_NAME} qhttp)"))
  2734. (substitute* "src/src.cmake"
  2735. (("include\\(\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qite/libqite/libqite.cmake\\)")
  2736. "list(APPEND EXTRA_LIBS qite)"))
  2737. (substitute* '("src/filesharingmanager.h" "src/widgets/psirichtext.cpp"
  2738. "src/filesharingmanager.cpp" "src/widgets/psitextview.cpp"
  2739. "src/chatview_te.cpp" "src/msgmle.cpp")
  2740. (("qite.h")
  2741. "qite/qite.h")
  2742. (("qiteaudio.h")
  2743. "qite/qiteaudio.h")
  2744. (("qiteaudiorecorder.h")
  2745. "qite/qiteaudiorecorder.h"))
  2746. #t))
  2747. (add-after 'install 'wrap-env
  2748. (lambda* (#:key outputs #:allow-other-keys)
  2749. (let ((out (assoc-ref outputs "out")))
  2750. (for-each
  2751. (lambda (name)
  2752. (let ((file (string-append out "/bin/" name))
  2753. (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH"))
  2754. (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
  2755. (wrap-program file
  2756. `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
  2757. `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))
  2758. '("psi-plus")))
  2759. #t))
  2760. (add-after 'wrap-env 'glib-or-gtk-compile-schemas
  2761. (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
  2762. (add-after 'glib-or-gtk-compile-schemas 'glib-or-gtk-wrap
  2763. (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
  2764. (native-inputs
  2765. `(("glib:bin" ,glib "bin")
  2766. ("gobject-introspection" ,gobject-introspection)
  2767. ("perl" ,perl)
  2768. ("pkg-config" ,pkg-config)
  2769. ("python" ,python-wrapper)
  2770. ("ruby" ,ruby)))
  2771. (inputs
  2772. `(("blake2" ,libb2)
  2773. ("dbus" ,dbus)
  2774. ("enchant" ,enchant)
  2775. ("glib" ,glib)
  2776. ("gstreamer" ,gstreamer)
  2777. ("gst-plugins-base" ,gst-plugins-base)
  2778. ("http-parser" ,http-parser)
  2779. ("libgcrypt" ,libgcrypt)
  2780. ("libgpg-error" ,libgpg-error)
  2781. ("libidn" ,libidn)
  2782. ("libotr" ,libotr)
  2783. ("libsignal-protocol-c" ,libsignal-protocol-c)
  2784. ("libtidy" ,tidy-html)
  2785. ("openssl" ,openssl)
  2786. ("qca" ,qca)
  2787. ("qhttp" ,qhttp)
  2788. ("qite" ,qite)
  2789. ("qtbase" ,qtbase-5)
  2790. ("qtkeychain" ,qtkeychain)
  2791. ("qtmultimedia" ,qtmultimedia)
  2792. ("qtsvg" ,qtsvg)
  2793. ("qtx11extras" ,qtx11extras)
  2794. ("usrsctp" ,usrsctp)
  2795. ("x11" ,libx11)
  2796. ("xext" ,libxext)
  2797. ("xcb" ,libxcb)
  2798. ("xss" ,libxscrnsaver)
  2799. ("zlib" ,zlib)))
  2800. (home-page "https://psi-plus.com/")
  2801. (synopsis "Qt-based XMPP Client")
  2802. (description
  2803. "Psi+ is a spin-off of Psi XMPP client. It is a powerful XMPP client
  2804. designed for experienced users.")
  2805. (license license:gpl2+)))
  2806. (define-public python-zulip
  2807. (package
  2808. (name "python-zulip")
  2809. (version "0.7.1")
  2810. (source
  2811. (origin
  2812. ;; There is no source on Pypi.
  2813. (method git-fetch)
  2814. (uri (git-reference
  2815. (url "https://github.com/zulip/python-zulip-api")
  2816. (commit version)))
  2817. (file-name (git-file-name name version))
  2818. (sha256
  2819. (base32
  2820. "0da1ki1v252avy27j6d7snnc0gyq0xa9fypm3qdmxhw2w79d6q36"))))
  2821. (build-system python-build-system)
  2822. (arguments
  2823. `(#:phases
  2824. (modify-phases %standard-phases
  2825. (add-after 'unpack 'cd-to-zulip-dir
  2826. (lambda _
  2827. (chdir "zulip")
  2828. #t))
  2829. (replace 'check
  2830. (lambda* (#:key inputs outputs tests? #:allow-other-keys)
  2831. (let ((test-zulip "../tools/test-zulip"))
  2832. (when tests?
  2833. (add-installed-pythonpath inputs outputs)
  2834. (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
  2835. (patch-shebang test-zulip)
  2836. (invoke test-zulip))
  2837. #t))))))
  2838. (propagated-inputs
  2839. `(("python-matrix-client" ,python-matrix-client)
  2840. ("python-pyopenssl" ,python-pyopenssl)
  2841. ("python-requests" ,python-requests)
  2842. ("python-six" ,python-six)))
  2843. (native-inputs
  2844. `(("python-cython" ,python-cython)
  2845. ("python-distro" ,python-distro)
  2846. ("python-pytest" ,python-pytest)))
  2847. (home-page "https://github.com/zulip/python-zulip-api")
  2848. (synopsis "Zulip's API Python bindings")
  2849. (description
  2850. "This package provides Python bindings to Zulip's API.")
  2851. (license license:asl2.0)))
  2852. (define-public zulip-term
  2853. (package
  2854. (name "zulip-term")
  2855. (version "0.5.2")
  2856. (source
  2857. (origin
  2858. ;; Pypi package doesn't ship tests.
  2859. (method git-fetch)
  2860. (uri (git-reference
  2861. (url "https://github.com/zulip/zulip-terminal")
  2862. (commit version)))
  2863. (file-name (git-file-name name version))
  2864. (sha256
  2865. (base32
  2866. "1xhhy3v4wck74a83avil0rnmsi2grrh03cww19n5mv80p2q1cjmf"))
  2867. (modules '((guix build utils)))
  2868. (snippet
  2869. '(begin
  2870. (substitute* "setup.py"
  2871. (("\\=\\=1\\.7") ">=1.7") ; pytest-mock
  2872. (("\\=\\=2\\.5") ">=2.5") ; pytest-cov
  2873. (("4\\.5\\.2") "4.4.2")) ; lxml
  2874. #t))))
  2875. (build-system python-build-system)
  2876. (arguments
  2877. '(#:phases
  2878. (modify-phases %standard-phases
  2879. (replace 'check
  2880. (lambda* (#:key tests? #:allow-other-keys)
  2881. (when tests?
  2882. ;; Delete failing tests.
  2883. (delete-file "tests/cli/test_run.py")
  2884. (invoke "pytest"))
  2885. #t)))))
  2886. (inputs
  2887. `(("python-beautifulsoup4" ,python-beautifulsoup4)
  2888. ("python-lxml" ,python-lxml)
  2889. ("python-mypy-extensions" ,python-mypy-extensions)
  2890. ("python-urwid" ,python-urwid)
  2891. ("python-urwid-readline" ,python-urwid-readline)
  2892. ("python-zulip" ,python-zulip)))
  2893. (native-inputs
  2894. `(("python-distro" ,python-distro)
  2895. ("python-pytest" ,python-pytest)
  2896. ("python-pytest-cov" ,python-pytest-cov)
  2897. ("python-pytest-mock" ,python-pytest-mock)))
  2898. (home-page "https://github.com/zulip/zulip-terminal")
  2899. (synopsis "Zulip's official terminal client")
  2900. (description "This package contains Zulip's official terminal client.")
  2901. (license license:asl2.0)))
  2902. (define-public matterbridge
  2903. (package
  2904. (name "matterbridge")
  2905. (version "1.22.2")
  2906. (source
  2907. (origin
  2908. (method git-fetch)
  2909. (uri (git-reference
  2910. (url "https://github.com/42wim/matterbridge")
  2911. (commit (string-append "v" version))))
  2912. (file-name (git-file-name name version))
  2913. (sha256
  2914. (base32
  2915. "07rgdc4v043fhzsalmlhickqizk6xjlpjkzn6l5v9ryp5gmv580z"))))
  2916. (build-system go-build-system)
  2917. (arguments
  2918. `(#:import-path "github.com/42wim/matterbridge"
  2919. #:unpack-path "github.com/42wim/matterbridge"))
  2920. (synopsis "Bridge together various messaging networks and protocols")
  2921. (description "Relays messages between different channels from various
  2922. messaging networks and protocols. So far it supports mattermost, IRC, gitter,
  2923. xmpp, slack, discord, telegram, rocketchat, twitch, ssh-chat, zulip, whatsapp,
  2924. keybase, matrix, microsoft teams, nextcloud, mumble, vk and more with REST
  2925. API. Mattermost is not required.")
  2926. (home-page "https://github.com/42wim/matterbridge")
  2927. (license license:asl2.0)))
  2928. ;;; messaging.scm ends here