gnu: rust-percent-encoding-2: Update to 2.2.0.
[jackhill/guix/guix.git] / gnu / packages / guile-xyz.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2012-2022 Ludovic Courtès <ludo@gnu.org>
3 ;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
4 ;;; Copyright © 2015, 2017, 2022 Christine Lemmer-Webber <cwebber@dustycloud.org>
5 ;;; Copyright © 2016 Alex Sassmannshausen <alex@pompo.co>
6 ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
7 ;;; Copyright © 2016 Erik Edrosa <erik.edrosa@gmail.com>
8 ;;; Copyright © 2016, 2019, 2020, 2021 Eraim Flashner <efraim@flashner.co.il>
9 ;;; Copyright © 2016, 2017, 2021 Alex Kost <alezost@gmail.com>
10 ;;; Copyright © 2016, 2017 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@openmailbox.org>
11 ;;; Copyright © 2016, 2021 Amirouche <amirouche@hypermove.net>
12 ;;; Copyright © 2016, 2019, 2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
13 ;;; Copyright © 2017 Andy Wingo <wingo@igalia.com>
14 ;;; Copyright © 2017 David Thompson <davet@gnu.org>
15 ;;; Copyright © 2017, 2018, 2019, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
16 ;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org>
17 ;;; Copyright © 2017 Nikita <nikita@n0.is>
18 ;;; Copyright © 2017, 2018, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
19 ;;; Copyright © 2018, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
20 ;;; Copyright © 2018, 2019, 2020, 2021, 2022 Arun Isaac <arunisaac@systemreboot.net>
21 ;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
22 ;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
23 ;;; Copyright © 2019 swedebugia <swedebugia@riseup.net>
24 ;;; Copyright © 2019, 2020 Amar Singh <nly@disroot.org>
25 ;;; Copyright © 2019, 2021 Timothy Sample <samplet@ngyro.com>
26 ;;; Copyright © 2019, 2020 Martin Becze <mjbecze@riseup.net>
27 ;;; Copyright © 2020 Evan Straw <evan.straw99@gmail.com>
28 ;;; Copyright © 2020 Jack Hill <jackhill@jackhill.us>
29 ;;; Copyright © 2020 Julien Lepiler <julien@lepiller.eu>
30 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
31 ;;; Copyright © 2020, 2021 Masaya Tojo <masaya@tojo.tokyo>
32 ;;; Copyright © 2020 Jesse Gibbons <jgibbons2357@gmail.com>
33 ;;; Copyright © 2020 Mike Rosset <mike.rosset@gmail.com>
34 ;;; Copyright © 2020 Liliana Marie Prikler <liliana.prikler@gmail.com>
35 ;;; Copyright © 2020, 2021, 2022 pukkamustard <pukkamustard@posteo.net>
36 ;;; Copyright © 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
37 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
38 ;;; Copyright © 2021 Leo Le Bouter <lle-bout@zaclys.net>
39 ;;; Copyright © 2021 Zelphir Kaltstahl <zelphirkaltstahl@posteo.de>
40 ;;; Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com>
41 ;;; Copyright © 2021, 2022 Artyom V. Poptsov <poptsov.artyom@gmail.com>
42 ;;; Copyright © 2022 Maxime Devos <maximedevos@telenet.be>
43 ;;; Copyright © 2022 Zhu Zihao <all_but_last@163.com>
44 ;;; Copyright © 2022 Antero Mejr <antero@mailbox.org>
45 ;;; Copyright © 2022 Taiju HIGASHI <higashi@taiju.info>
46 ;;; Copyright © 2022 Zheng Junjie <873216071@qq.com>
47 ;;;
48 ;;; This file is part of GNU Guix.
49 ;;;
50 ;;; GNU Guix is free software; you can redistribute it and/or modify it
51 ;;; under the terms of the GNU General Public License as published by
52 ;;; the Free Software Foundation; either version 3 of the License, or (at
53 ;;; your option) any later version.
54 ;;;
55 ;;; GNU Guix is distributed in the hope that it will be useful, but
56 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
57 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
58 ;;; GNU General Public License for more details.
59 ;;;
60 ;;; You should have received a copy of the GNU General Public License
61 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
62
63 (define-module (gnu packages guile-xyz)
64 #:use-module ((guix licenses) #:prefix license:)
65 #:use-module (gnu packages)
66 #:use-module (gnu packages admin)
67 #:use-module (gnu packages algebra)
68 #:use-module (gnu packages aspell)
69 #:use-module (gnu packages autotools)
70 #:use-module (gnu packages avahi)
71 #:use-module (gnu packages base)
72 #:use-module (gnu packages bash)
73 #:use-module (gnu packages compression)
74 #:use-module (gnu packages crypto)
75 #:use-module (gnu packages databases)
76 #:use-module (gnu packages disk)
77 #:use-module (gnu packages emacs)
78 #:use-module (gnu packages emacs-xyz)
79 #:use-module (gnu packages gawk)
80 #:use-module (gnu packages gettext)
81 #:use-module (gnu packages gl)
82 #:use-module (gnu packages glib)
83 #:use-module (gnu packages gnome)
84 #:use-module (gnu packages gnupg)
85 #:use-module (gnu packages gperf)
86 #:use-module (gnu packages gstreamer)
87 #:use-module (gnu packages gtk)
88 #:use-module (gnu packages guile)
89 #:use-module (gnu packages haskell-xyz) ;pandoc
90 #:use-module (gnu packages hurd)
91 #:use-module (gnu packages image)
92 #:use-module (gnu packages imagemagick)
93 #:use-module (gnu packages libffi)
94 #:use-module (gnu packages libunistring)
95 #:use-module (gnu packages linux)
96 #:use-module (gnu packages man)
97 #:use-module (gnu packages maths)
98 #:use-module (gnu packages mes)
99 #:use-module (gnu packages multiprecision)
100 #:use-module (gnu packages ncurses)
101 #:use-module (gnu packages networking)
102 #:use-module (gnu packages noweb)
103 #:use-module (gnu packages nss)
104 #:use-module (gnu packages package-management)
105 #:use-module (gnu packages password-utils)
106 #:use-module (gnu packages pcre)
107 #:use-module (gnu packages perl)
108 #:use-module (gnu packages pkg-config)
109 #:use-module (gnu packages python)
110 #:use-module (gnu packages readline)
111 #:use-module (gnu packages sdl)
112 #:use-module (gnu packages search)
113 #:use-module (gnu packages serialization)
114 #:use-module (gnu packages slang)
115 #:use-module (gnu packages sqlite)
116 #:use-module (gnu packages swig)
117 #:use-module (gnu packages tex)
118 #:use-module (gnu packages texinfo)
119 #:use-module (gnu packages tls)
120 #:use-module (gnu packages version-control)
121 #:use-module (gnu packages webkit)
122 #:use-module (gnu packages xdisorg)
123 #:use-module (gnu packages xorg)
124 #:use-module (guix packages)
125 #:use-module (guix download)
126 #:use-module (guix gexp)
127 #:use-module (guix git-download)
128 #:use-module (guix hg-download)
129 #:use-module (guix build-system cmake)
130 #:use-module (guix build-system glib-or-gtk)
131 #:use-module (guix build-system gnu)
132 #:use-module (guix build-system guile)
133 #:use-module (guix utils)
134 #:use-module ((guix build utils) #:select (alist-replace))
135 #:use-module (ice-9 match)
136 #:use-module ((srfi srfi-1) #:select (alist-delete))
137 #:use-module (srfi srfi-26))
138
139 (define-public artanis
140 (package
141 (name "artanis")
142 (version "0.5.1")
143 (source (origin
144 (method url-fetch)
145 (uri (string-append "mirror://gnu/artanis/artanis-"
146 version ".tar.gz"))
147 (sha256
148 (base32
149 "1zfg49s7wp37px7k22qcr06rxfwyn3gv1c3jmma346xw0m8jr63w"))
150 (modules '((guix build utils)))
151 (snippet
152 '(begin
153 ;; Unbundle guile-redis and guile-json
154 (delete-file-recursively "artanis/third-party/json.scm")
155 (delete-file-recursively "artanis/third-party/json")
156 (delete-file-recursively "artanis/third-party/redis.scm")
157 (delete-file-recursively "artanis/third-party/redis")
158 (substitute* '("artanis/artanis.scm"
159 "artanis/lpc.scm"
160 "artanis/oht.scm"
161 "artanis/tpl/parser.scm")
162 (("(#:use-module \\()artanis third-party (json\\))" _
163 use-module json)
164 (string-append use-module json)))
165 (substitute* '("artanis/lpc.scm"
166 "artanis/session.scm")
167 (("(#:use-module \\()artanis third-party (redis\\))" _
168 use-module redis)
169 (string-append use-module redis)))
170 (substitute* "artanis/oht.scm"
171 (("([[:punct:][:space:]]+)(->json-string)([[:punct:][:space:]]+)"
172 _ pre json-string post)
173 (string-append pre
174 "scm" json-string
175 post)))
176 (substitute* "artanis/artanis.scm"
177 (("[[:punct:][:space:]]+->json-string[[:punct:][:space:]]+")
178 ""))
179 #t))))
180 (build-system gnu-build-system)
181 (inputs
182 (list guile-3.0 nspr nss))
183 ;; FIXME the bundled csv contains one more exported procedure
184 ;; (sxml->csv-string) than guile-csv. The author is maintainer of both
185 ;; projects.
186 ;; TODO: Add guile-dbi and guile-dbd optional dependencies.
187 (propagated-inputs
188 (list guile-json-3 guile-readline guile-redis))
189 (native-inputs
190 (list bash-minimal ;for the `source' builtin
191 pkg-config
192 util-linux)) ;for the `script' command
193 (arguments
194 `(#:modules (((guix build guile-build-system)
195 #:select (target-guile-effective-version))
196 ,@%gnu-build-system-modules)
197 #:imported-modules ((guix build guile-build-system)
198 ,@%gnu-build-system-modules)
199 #:make-flags
200 ;; TODO: The documentation must be built with the `docs' target.
201 (let* ((out (assoc-ref %outputs "out"))
202 ;; We pass guile explicitly here since this executes before the
203 ;; set-paths phase and therefore guile is not yet in PATH.
204 (effective-version (target-guile-effective-version
205 (assoc-ref %build-inputs "guile")))
206 (scm (string-append out "/share/guile/site/" effective-version))
207 (go (string-append out "/lib/guile/" effective-version "/site-ccache")))
208 ;; Don't use (%site-dir) for site paths.
209 (list (string-append "MOD_PATH=" scm)
210 (string-append "MOD_COMPILED_PATH=" go)))
211 #:test-target "test"
212 #:phases
213 (modify-phases %standard-phases
214 (add-after 'unpack 'patch-site-dir
215 (lambda* (#:key outputs #:allow-other-keys)
216 (substitute* "artanis/commands/help.scm"
217 (("\\(%site-dir\\)")
218 (string-append "\""
219 (assoc-ref outputs "out")
220 "/share/guile/site/"
221 (target-guile-effective-version)
222 "\"")))))
223 (add-after 'unpack 'patch-reference-to-libnss
224 (lambda* (#:key inputs #:allow-other-keys)
225 (substitute* "artanis/security/nss.scm"
226 (("ffi-binding \"libnss3\"")
227 (string-append
228 "ffi-binding \""
229 (assoc-ref inputs "nss") "/lib/nss/libnss3.so"
230 "\""))
231 (("ffi-binding \"libssl3\"")
232 (string-append
233 "ffi-binding \"" (assoc-ref inputs "nss") "/lib/nss/libssl3.so\"")))))
234 (add-before 'install 'substitute-root-dir
235 (lambda* (#:key outputs #:allow-other-keys)
236 (let ((out (assoc-ref outputs "out")))
237 (substitute* "Makefile" ;ignore the execution of bash.bashrc
238 ((" /etc/bash.bashrc") " /dev/null"))
239 (substitute* "Makefile" ;set the root of config files to OUT
240 ((" /etc") (string-append " " out "/etc")))
241 (mkdir-p (string-append out "/bin")) )))
242 (add-after 'install 'wrap-art
243 (lambda* (#:key inputs outputs #:allow-other-keys)
244 (let* ((out (assoc-ref outputs "out"))
245 (effective-version (target-guile-effective-version))
246 (bin (string-append out "/bin"))
247 (scm (string-append out "/share/guile/site/" effective-version))
248 (go (string-append out "/lib/guile/" effective-version
249 "/site-ccache")))
250 (wrap-program (string-append bin "/art")
251 `("GUILE_LOAD_PATH" ":" prefix
252 (,scm ,(getenv "GUILE_LOAD_PATH")))
253 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
254 (,go ,(getenv "GUILE_LOAD_COMPILED_PATH"))))))))))
255 (synopsis "Web application framework written in Guile")
256 (description "GNU Artanis is a web application framework written in Guile
257 Scheme. A web application framework (WAF) is a software framework that is
258 designed to support the development of dynamic websites, web applications, web
259 services and web resources. The framework aims to alleviate the overhead
260 associated with common activities performed in web development. Artanis
261 provides several tools for web development: database access, templating
262 frameworks, session management, URL-remapping for RESTful, page caching, and
263 more.")
264 (home-page "https://www.gnu.org/software/artanis/")
265 (license (list license:gpl3+ license:lgpl3+)))) ;dual license
266
267 ;; There are no releases yet of this package.
268 (define-public guile-pipe
269 (let ((commit "0746ec38d19d844dff0c6f62f209b2b6c8d8872e")
270 (revision "0"))
271 (package
272 (name "guile-pipe")
273 (version (git-version "0.0.0" revision commit))
274 (source
275 (origin
276 (method git-fetch)
277 (uri (git-reference
278 (url "https://github.com/joshwalters/guile-pipe")
279 (commit commit)))
280 (file-name (git-file-name name version))
281 (sha256
282 (base32 "038gwrhfywgs8372q478wn4623lhcmkknfj4p8yaa93bykfc0fml"))))
283 (build-system guile-build-system)
284 (native-inputs
285 (list guile-3.0))
286 (home-page "https://github.com/joshwalters/guile-pipe")
287 (synopsis "Guile pipe macros for functional chaining")
288 (description
289 "This package provides macros for functional chaining in Guile, similar
290 to UNIX pipes (@code{|}), Clojure's threading macros (@code{->} and
291 @code{->>}).")
292 (license license:gpl3+))))
293
294 (define-public guile-f-scm
295 (package
296 (name "guile-f-scm")
297 (version "0.2.0")
298 (source
299 (origin
300 (method git-fetch)
301 (uri (git-reference
302 (url "https://git.sr.ht/~brown121407/f.scm")
303 (commit version)))
304 (file-name (git-file-name name version))
305 (sha256
306 (base32 "14wyrs3m1649l3km4pl2175dmap1372j5h8nkhykrbxg5xqp6ivd"))))
307 (build-system guile-build-system)
308 (native-inputs
309 (list guile-3.0))
310 (home-page "https://git.sr.ht/~brown121407/f.scm")
311 (synopsis "Library for working with files and directories")
312 (description
313 "f.scm is a library intended to facilitate working with files and
314 directories (the file system in general). It was initially inspired by the
315 f library for Emacs.")
316 (license license:gpl3+)))
317
318 ;; There has not been any release yet.
319 (define-public guildhall
320 (let ((commit "2fe2cc539f4b811bbcd69e58738db03eb5a2b778")
321 (revision "1"))
322 (package
323 (name "guildhall")
324 (version (string-append "0-" revision "." (string-take commit 9)))
325 (source (origin
326 (method git-fetch)
327 (uri (git-reference
328 (url "https://github.com/ijp/guildhall")
329 (commit commit)))
330 (file-name (string-append name "-" version "-checkout"))
331 (sha256
332 (base32
333 "115bym7bg66h3gs399yb2vkzc2ygriaqsn4zbrg8f054mgy8wzn1"))))
334 (build-system gnu-build-system)
335 (arguments
336 `(#:phases
337 (modify-phases %standard-phases
338 ;; Tests fail without this fix because they try to load the bash
339 ;; executable as a Scheme file. See bug report at
340 ;; https://github.com/ijp/guildhall/issues/22
341 (add-after 'unpack 'fix-bug-22
342 (lambda _
343 (substitute* "Makefile.am"
344 (("TESTS_ENVIRONMENT=.*")
345 "AM_TESTS_ENVIRONMENT=srcdir=$(abs_top_srcdir)/tests/
346 TEST_EXTENSIONS = .scm
347 SCM_LOG_COMPILER= $(top_builddir)/env $(GUILE)
348 AM_SCM_LOG_FLAGS = --no-auto-compile -s")
349 ;; FIXME: one of the database tests fails for unknown
350 ;; reasons. It does not fail when run outside of Guix.
351 (("tests/database.scm") ""))
352 #t)))))
353 (inputs
354 (list guile-2.0))
355 (native-inputs
356 (list zip ; for tests
357 autoconf automake texinfo))
358 (synopsis "Package manager for Guile")
359 (description
360 "Guildhall is a package manager written for Guile Scheme. A guild is
361 an association of independent craftspeople. A guildhall is where they meet.
362 This Guildhall aims to make a virtual space for Guile wizards and journeyfolk
363 to share code.
364
365 On a practical level, Guildhall lets you share Scheme modules and programs
366 over the internet, and install code that has been shared by others. Guildhall
367 can handle dependencies, so when a program requires several libraries, and
368 each of those has further dependencies, all of the prerequisites for the
369 program can be installed in one go.")
370 (home-page "https://github.com/ijp/guildhall")
371 (license license:gpl3+))))
372
373 (define-public guile-aspell
374 (package
375 (name "guile-aspell")
376 (version "0.4")
377 (source (origin
378 (method url-fetch)
379 (uri (string-append
380 "http://lonelycactus.com/tarball/guile_aspell-"
381 version ".tar.gz"))
382 (sha256
383 (base32
384 "0vpk5xj9m9qc702z3khmkwhgpb949qbsyz8kw2qycda6qnxk0077"))))
385 (build-system gnu-build-system)
386 (arguments
387 '(#:phases (modify-phases %standard-phases
388 (add-before 'configure 'set-guilesitedir
389 (lambda _
390 (substitute* "Makefile.in"
391 (("^guilesitedir =.*$")
392 "guilesitedir = \
393 $(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
394 #t))
395 (add-before 'build 'set-libaspell-file-name
396 (lambda* (#:key inputs #:allow-other-keys)
397 (let ((aspell (assoc-ref inputs "aspell")))
398 (substitute* "aspell.scm"
399 (("\"libaspell\\.so\"")
400 (string-append "\"" aspell
401 "/lib/libaspell\"")))
402 #t))))))
403 (native-inputs (list pkg-config))
404 (inputs (list guile-2.2 aspell))
405 (home-page "https://github.com/spk121/guile-aspell")
406 (synopsis "Spell-checking from Guile")
407 (description
408 "guile-aspell is a Guile Scheme library for comparing a string against a
409 dictionary and suggesting spelling corrections.")
410 (license license:gpl3+)))
411
412 (define-public guile2.0-bash
413 ;; This project is currently retired. It was initially announced here:
414 ;; <https://lists.gnu.org/archive/html/guile-user/2015-02/msg00003.html>.
415 (let ((commit "1eabc563ca5692b3e08d84f1f0e6fd2283284469")
416 (revision "0"))
417 (package
418 (name "guile2.0-bash")
419 (version (string-append "0.1.6-" revision "." (string-take commit 7)))
420 (source (origin
421 (method git-fetch)
422 (uri (git-reference
423 (commit commit)
424 (url "https://git.sr.ht/~kaction/guile-bash")))
425 (sha256
426 (base32
427 "097vny990wp2qpjij6a5a5gwc6fxzg5wk56inhy18iki5v6pif1p"))
428 (file-name (string-append name "-" version "-checkout"))))
429 (build-system gnu-build-system)
430 (arguments
431 (list
432 #:configure-flags
433 #~(list (string-append "CPPFLAGS=-I" ; match bash.pc
434 (assoc-ref %build-inputs "bash:include")
435 "/include/bash/include")
436 ;; The '.a' file is useless.
437 "--disable-static"
438 ;; Install 'lib/bash' as Bash 4.4 expects.
439 (string-append "--libdir=" #$output "/lib/bash"))))
440 (native-inputs
441 (list autoconf
442 automake
443 bash ; with loadable module support, for tests
444 gettext-minimal ; for AC_LIB_LINKFLAGS_FROM_LIBS
445 libtool
446 pkg-config))
447 (inputs `(("guile" ,guile-2.0)
448 ("bash:include" ,bash "include")))
449 (home-page "https://git.sr.ht/~kaction/guile-bash")
450 (synopsis "Extend Bash using Guile")
451 (description
452 "Guile-Bash provides a shared library and set of Guile modules,
453 allowing you to extend Bash in Scheme. Scheme interfaces allow you to access
454 the following aspects of Bash:
455
456 @itemize
457 @item aliases;
458 @item setting and getting Bash variables;
459 @item creating dynamic variables;
460 @item creating Bash functions with a Scheme implementation;
461 @item reader macro for output capturing;
462 @item reader macro for evaluating raw Bash commands.
463 @end itemize
464
465 To enable it, run:
466
467 @example
468 enable -f ~/.guix-profile/lib/bash/libguile-bash.so scm
469 @end example
470
471 and then run @command{scm example.scm}.")
472 (license license:gpl3+))))
473
474 (define-public guile-bash
475 (package
476 (inherit guile2.0-bash)
477 (name "guile-bash")
478 (inputs
479 (modify-inputs (package-inputs guile2.0-bash)
480 (replace "guile" guile-3.0-latest)))
481 (arguments
482 (substitute-keyword-arguments (package-arguments guile2.0-bash)
483 ;; XXX The tests succeed with Guile 2.0 but fail with 3.0.
484 ((#:tests? _ #f) #f)
485 ((#:phases phases #~%standard-phases)
486 #~(modify-phases #$phases
487 (add-after 'install 'install-guile
488 (lambda* (#:key inputs outputs #:allow-other-keys)
489 (copy-recursively
490 (string-append (assoc-ref outputs "out")
491 (assoc-ref inputs "guile") "/share")
492 (string-append (assoc-ref outputs "out") "/share"))))))))))
493
494 (define-public guile-8sync
495 (let ((commit "183b4f02e68279d4984e79b79e06bfcf1861fcbf") (revision "0"))
496 (package
497 (name "guile-8sync")
498 (version (git-version "0.4.2" revision commit))
499 (source (origin
500 (method git-fetch)
501 (uri (git-reference
502 (commit commit)
503 (url "https://git.savannah.gnu.org/git/8sync.git")))
504 (sha256
505 (base32
506 "0r22kxasv1zqnf1ykzyx6c226qxn1wgjb1gc54526bid24x508ij"))
507 (file-name (git-file-name name version))))
508 (build-system gnu-build-system)
509 (native-inputs (list autoconf automake guile-3.0 pkg-config texinfo))
510 (arguments
511 (list #:make-flags
512 #~(list "GUILE_AUTO_COMPILE=0")))
513 (home-page "https://gnu.org/s/8sync/")
514 (synopsis "Asynchronous actor model library for Guile")
515 (description
516 "GNU 8sync (pronounced \"eight-sync\") is an asynchronous programming
517 library for GNU Guile based on the actor model.")
518 (properties '((upstream-name . "8sync")))
519 (license license:lgpl3+))))
520
521 (define-public guile-daemon
522 (package
523 (name "guile-daemon")
524 (version "0.1.3")
525 (source (origin
526 (method url-fetch)
527 (uri (string-append "https://github.com/alezost/" name
528 "/releases/download/v" version
529 "/" name "-" version ".tar.gz"))
530 (sha256
531 (base32
532 "08gaqrgjlly9k5si72vvpbr4xhq5v52l5ma5y6a7spid5dd057cy"))))
533 (build-system gnu-build-system)
534 (native-inputs
535 (list pkg-config))
536 (inputs
537 (list guile-3.0))
538 (home-page "https://github.com/alezost/guile-daemon")
539 (synopsis "Evaluate code in a running Guile process")
540 (description
541 "Guile-Daemon is a small Guile program that loads your initial
542 configuration file, and then reads and evaluates Guile expressions that
543 you send to a FIFO file.")
544 (license license:gpl3+)))
545
546 (define-public guile-dsv
547 (package
548 (name "guile-dsv")
549 (version "0.5.1")
550 (source (origin
551 (method git-fetch)
552 (uri (git-reference
553 (url "https://github.com/artyom-poptsov/guile-dsv")
554 (commit (string-append "v" version))))
555 (file-name (string-append name "-" version "-checkout"))
556 (sha256
557 (base32
558 "10wssilin4qphdmmqmms20bp3cy007kh22l1g45wfka0minmhkgs"))))
559 (build-system gnu-build-system)
560 (native-inputs
561 (list autoconf automake pkg-config texinfo))
562 (inputs (list guile-3.0))
563 (propagated-inputs (list guile-lib))
564 (arguments
565 `(#:modules (((guix build guile-build-system)
566 #:select (target-guile-effective-version))
567 ,@%gnu-build-system-modules)
568 #:imported-modules ((guix build guile-build-system)
569 ,@%gnu-build-system-modules)
570 #:phases (modify-phases %standard-phases
571 (add-after 'install 'wrap-program
572 (lambda* (#:key inputs outputs #:allow-other-keys)
573 (let* ((out (assoc-ref outputs "out"))
574 (bin (string-append out "/bin"))
575 (guile-lib (assoc-ref inputs "guile-lib"))
576 (version (target-guile-effective-version))
577 (scm (string-append "/share/guile/site/"
578 version))
579 (go (string-append "/lib/guile/"
580 version "/site-ccache")))
581 (wrap-program (string-append bin "/dsv")
582 `("GUILE_LOAD_PATH" prefix
583 (,(string-append out scm)
584 ,(string-append guile-lib scm)))
585 `("GUILE_LOAD_COMPILED_PATH" prefix
586 (,(string-append out go)
587 ,(string-append guile-lib go)))))
588 #t)))))
589 (home-page "https://github.com/artyom-poptsov/guile-dsv")
590 (synopsis "DSV module for Guile")
591 (description
592 "Guile-DSV is a GNU Guile module for working with the
593 delimiter-separated values (DSV) data format. Guile-DSV supports the
594 Unix-style DSV format and RFC 4180 format.")
595 (license license:gpl3+)))
596
597 (define-public guile2.2-dsv
598 (package
599 (inherit guile-dsv)
600 (name "guile2.2-dsv")
601 (inputs (list guile-2.2))
602 (propagated-inputs `(("guile-lib" ,guile2.2-lib)))))
603
604 (define-public guile-fibers-1.1
605 (package
606 (name "guile-fibers")
607 (version "1.1.1")
608 (source (origin
609 (method git-fetch)
610 (uri (git-reference
611 (url "https://github.com/wingo/fibers")
612 (commit (string-append "v" version))))
613 (file-name (git-file-name name version))
614 (sha256
615 (base32
616 "0ll63d7202clapg1k4bilbnlmfa4qvpjnsd7chbkka4kxf5klilc"))
617 (patches
618 (search-patches "guile-fibers-wait-for-io-readiness.patch"
619 "guile-fibers-epoll-instance-is-dead.patch"))))
620 (build-system gnu-build-system)
621 (native-inputs
622 (list texinfo pkg-config autoconf automake libtool
623 guile-3.0 ;for 'guild compile
624 ;; Gettext brings 'AC_LIB_LINKFLAGS_FROM_LIBS'
625 gettext-minimal))
626 (inputs
627 (list guile-3.0)) ;for libguile-3.0.so
628 (supported-systems
629 ;; This version requires 'epoll' and is thus limited to Linux-based
630 ;; systems, but this may change soon:
631 ;; <https://github.com/wingo/fibers/pull/53>.
632 (filter (cut string-suffix? "-linux" <>) %supported-systems))
633 (synopsis "Lightweight concurrency facility for Guile")
634 (description
635 "Fibers is a Guile library that implements a a lightweight concurrency
636 facility, inspired by systems like Concurrent ML, Go, and Erlang. A fiber is
637 like a \"goroutine\" from the Go language: a lightweight thread-like
638 abstraction. Systems built with Fibers can scale up to millions of concurrent
639 fibers, tens of thousands of concurrent socket connections, and many parallel
640 cores. The Fibers library also provides Concurrent ML-like channels for
641 communication between fibers.
642
643 Note that Fibers makes use of some Guile 2.1/2.2-specific features and
644 is not available for Guile 2.0.")
645 (home-page "https://github.com/wingo/fibers")
646 (properties '((upstream-name . "fibers")))
647 (license license:lgpl3+)))
648
649 (define-public guile-fibers
650 (package
651 (inherit guile-fibers-1.1)
652 (version "1.0.0")
653 (source (origin
654 (method url-fetch)
655 (uri (string-append "https://wingolog.org/pub/fibers/fibers-"
656 version ".tar.gz"))
657 (sha256
658 (base32
659 "0vjkg72ghgdgphzbjz9ig8al8271rq8974viknb2r1rg4lz92ld0"))
660 (modules '((guix build utils)))
661 (snippet
662 '(begin
663 ;; Allow builds with Guile 3.0.
664 (substitute* "configure"
665 (("search=\"2\\.2\"")
666 "search=\"3.0 2.2\""))
667
668 ;; Explicitly include system headers rather than relying on
669 ;; <libguile.h> to do it for us.
670 (substitute* "epoll.c"
671 (("#include.*libguile\\.h.*$" all)
672 (string-append "#include <unistd.h>\n"
673 "#include <string.h>\n"
674 all "\n")))
675
676 ;; Import (ice-9 threads) for 'current-processor-count'.
677 (substitute* "tests/channels.scm"
678 (("#:use-module \\(fibers\\)")
679 (string-append "#:use-module (fibers)\n"
680 "#:use-module (ice-9 threads)\n")))
681 #t))
682 (patches
683 ;; fixes a resource leak that causes crashes in the tests
684 (search-patches "guile-fibers-destroy-peer-schedulers.patch"))))
685 (arguments
686 '(;; The code uses 'scm_t_uint64' et al., which are deprecated in 3.0.
687 #:configure-flags '("CFLAGS=-Wno-error=deprecated-declarations")
688 #:phases (modify-phases %standard-phases
689 (add-after 'install 'mode-guile-objects
690 (lambda* (#:key outputs #:allow-other-keys)
691 ;; .go files are installed to "lib/guile/X.Y/cache".
692 ;; This phase moves them to "…/site-ccache".
693 (let* ((out (assoc-ref outputs "out"))
694 (lib (string-append out "/lib/guile"))
695 (old (car (find-files lib "^ccache$"
696 #:directories? #t)))
697 (new (string-append (dirname old)
698 "/site-ccache")))
699 (rename-file old new)
700 #t))))))))
701
702 (define-public guile2.2-fibers
703 (package
704 (inherit guile-fibers-1.1)
705 (name "guile2.2-fibers")
706 (inputs
707 (modify-inputs (package-inputs guile-fibers-1.1)
708 (replace "guile" guile-2.2)))
709 (native-inputs
710 (modify-inputs (package-native-inputs guile-fibers-1.1)
711 (replace "guile" guile-2.2)))))
712
713 (define-public guile-filesystem
714 (package
715 (name "guile-filesystem")
716 (version "0.1.0")
717 (source (origin
718 (method git-fetch)
719 (uri (git-reference
720 (url "https://gitlab.com/leoprikler/guile-filesystem.git")
721 (commit version)))
722 (file-name (git-file-name name version))
723 (sha256
724 (base32
725 "1shmkc0y9r2sj3kw7hrsnamnp7y8xifkhf3m3rnfxczqg63k67vy"))))
726 (build-system gnu-build-system)
727 (native-inputs
728 (list autoconf automake pkg-config texinfo))
729 (inputs
730 (list guile-3.0))
731 (home-page "https://gitlab.com/leoprikler/guile-filesystem")
732 (synopsis "Complementary library to Guile's built-in file system procedures")
733 (description "@code{guile-filesystem} provides a set of utility functions,
734 that augment Guile's support for handling files and their names.")
735 (license license:lgpl3+)))
736
737 (define-public guile2.0-filesystem
738 (package
739 (inherit guile-filesystem)
740 (name "guile2.0-filesystem")
741 (inputs (list guile-2.0))))
742
743 (define-public guile2.2-filesystem
744 (package
745 (inherit guile-filesystem)
746 (name "guile2.2-filesystem")
747 (inputs (list guile-2.2))))
748
749 (define-public guile-syntax-highlight
750 (package
751 (name "guile-syntax-highlight")
752 (version "0.1")
753 (source (origin
754 (method url-fetch)
755 (uri (string-append "https://files.dthompson.us/"
756 "guile-syntax-highlight/"
757 "guile-syntax-highlight-"
758 version ".tar.gz"))
759 (sha256
760 (base32
761 "1p771kq15x83483m23bhah1sz6vkalg3drm7x279f4j1cxligkzi"))
762 (modules '((guix build utils)))
763 (snippet
764 '(begin
765 ;; Allow builds with Guile 3.0.
766 (substitute* "configure"
767 (("2\\.2 2\\.0")
768 "3.0 2.2 2.0"))
769 #t))))
770 (build-system gnu-build-system)
771 (native-inputs
772 (list pkg-config))
773 (inputs
774 (list guile-3.0))
775 (synopsis "General-purpose syntax highlighter for GNU Guile")
776 (description "Guile-syntax-highlight is a general-purpose syntax
777 highlighting library for GNU Guile. It can parse code written in various
778 programming languages into a simple s-expression that can be converted to
779 HTML (via SXML) or any other format for rendering.")
780 (home-page "https://dthompson.us/projects/guile-syntax-highlight.html")
781 (license license:lgpl3+)))
782
783 ;; gitile requires a more recent version than the latest release.
784 (define-public guile-syntax-highlight-for-gitile
785 (let ((commit "897fa5156ff41588e0d281eb00e4e94de63ccd8a")
786 (revision "0"))
787 (package
788 (inherit guile-syntax-highlight)
789 (version (git-version "0.1" revision commit))
790 (source (origin
791 (method git-fetch)
792 (uri (git-reference
793 (url "https://git.dthompson.us/guile-syntax-highlight.git")
794 (commit commit)))
795 (file-name (git-file-name "guile-syntax-highlight" version))
796 (sha256
797 (base32
798 "18zlg4mkgd3swgv2ggfz91ivnnzc0zhvc9ybgrxg1y762va9hyvj"))))
799 (native-inputs
800 (modify-inputs (package-native-inputs guile-syntax-highlight)
801 (prepend autoconf automake texinfo)))
802 (properties '((hidden? . #t))))))
803
804 (define-public guile2.2-syntax-highlight
805 (package
806 (inherit guile-syntax-highlight)
807 (name "guile2.2-syntax-highlight")
808 (inputs (list guile-2.2))))
809
810 (define-public guile-sjson
811 (package
812 (name "guile-sjson")
813 (version "0.2.2")
814 (source (origin
815 (method url-fetch)
816 (uri (string-append "https://dustycloud.org/misc/sjson-" version
817 ".tar.gz"))
818 (sha256
819 (base32
820 "08sr16fg5cqvik3wblav6k4b6djc5ydhgfvxa49bc5bh1irqvrcn"))
821 (modules '((guix build utils)))
822 (snippet
823 '(begin
824 ;; Allow builds with Guile 3.0.
825 (substitute* "configure"
826 (("2\\.2 2\\.0")
827 "3.0 2.2 2.0"))
828 #t))))
829 (build-system gnu-build-system)
830 (native-inputs
831 (list autoconf automake pkg-config))
832 (inputs
833 (list guile-3.0))
834 (home-page "https://gitlab.com/dustyweb/guile-sjson")
835 (synopsis "S-expression based json reader/writer for Guile")
836 (description "guile-sjson is a json reader/writer for Guile.
837 It has a nice, simple s-expression based syntax.")
838 (license license:lgpl3+)))
839
840 (define-public guile2.2-sjson
841 (package
842 (inherit guile-sjson)
843 (name "guile2.2-sjson")
844 (inputs (list guile-2.2))))
845
846 (define-public guile-squee
847 (let ((commit "a151fd006fa819945ca1d4749b173854269b9f70")
848 (revision "3"))
849 (package
850 (name "guile-squee")
851 (version (string-append "0-" revision "." (string-take commit 7)))
852 (source (origin
853 (method git-fetch)
854 (uri (git-reference
855 (url "https://notabug.org/cwebber/guile-squee.git")
856 (commit commit)))
857 (file-name (git-file-name name version))
858 (sha256
859 (base32
860 "1jps14z8653ah2kr367iayzyi3ql2s55l77xrafz7gk3mzcvgrrg"))))
861 (build-system guile-build-system)
862 (arguments
863 '(#:phases
864 (modify-phases %standard-phases
865 (add-after 'unpack 'patch
866 (lambda* (#:key inputs #:allow-other-keys)
867 (substitute* "squee.scm"
868 (("dynamic-link \"libpq\"")
869 (string-append
870 "dynamic-link \""
871 (search-input-file inputs "/lib/libpq.so")
872 "\""))))))))
873 (inputs
874 (list postgresql))
875 (native-inputs
876 (list guile-3.0))
877 (home-page "https://notabug.org/cwebber/guile-squee")
878 (synopsis "Connect to PostgreSQL using Guile")
879 (description
880 "@code{squee} is a Guile library for connecting to PostgreSQL databases
881 using Guile's foreign function interface.")
882 (license license:lgpl3+))))
883
884 (define-public guile2.2-squee
885 (package
886 (inherit guile-squee)
887 (name "guile2.2-squee")
888 (native-inputs (modify-inputs (package-native-inputs guile-squee)
889 (replace "guile" guile-2.2)))))
890
891 (define-public guile-colorized
892 (package
893 (name "guile-colorized")
894 (version "0.1")
895 (source
896 (origin
897 (method git-fetch)
898 (uri (git-reference
899 (url "https://gitlab.com/NalaGinrut/guile-colorized.git")
900 (commit (string-append "v" version))))
901 (file-name (git-file-name name version))
902 (sha256
903 (base32 "10mv8c63159r3qvwwdvsgnsvdg7nc2ghak85zapwqpv4ywrqp9zc"))))
904 (build-system guile-build-system)
905 (native-inputs
906 (list guile-3.0))
907 (home-page "https://gitlab.com/NalaGinrut/guile-colorized")
908 (synopsis "Colorized REPL for Guile")
909 (description
910 "Guile-colorized provides you with a colorized REPL for GNU Guile.")
911 (license license:gpl3+)))
912
913 (define-public guile2.2-colorized
914 (package
915 (inherit guile-colorized)
916 (name "guile2.2-colorized")
917 (native-inputs (list guile-2.2))))
918
919 (define-public guile-pfds
920 (package
921 (name "guile-pfds")
922 (version "0.3")
923 (home-page "https://github.com/ijp/pfds")
924 (source (origin
925 (method git-fetch)
926 (uri (git-reference
927 (url home-page)
928 (commit (string-append "v" version))))
929 (sha256
930 (base32
931 "19y33wg94pf0n98dkfqd1zbw93fgky4sawxsxl6s3vyqwl0yi5vh"))
932 (file-name (string-append name "-" version "-checkout"))))
933 (build-system guile-build-system)
934 (arguments
935 '(#:source-directory "src"
936 #:compile-flags '("--r6rs" "-Wunbound-variable" "-Warity-mismatch")
937 #:phases (modify-phases %standard-phases
938 (add-after 'unpack 'patch-sources
939 ;; Initially reported here:
940 ;; https://github.com/ijp/pfds/pull/6, and merged into
941 ;; other projects such as IronScheme (see:
942 ;; https://github.com/IronScheme/pfds/pull/1).
943 (lambda _
944 (substitute* "hamts.sls"
945 (("subtrie-vector vector")
946 "subtrie-vector trie"))))
947 (add-after 'patch-sources 'move-files-around
948 (lambda _
949 ;; Move files under a pfds/ directory to reflect the
950 ;; module hierarchy.
951 (mkdir-p "src/pfds")
952 (for-each (lambda (file)
953 (rename-file
954 file (string-append "src/pfds/" file)))
955 '("bbtrees.sls"
956 "deques"
957 "deques.sls"
958 "dlists.sls"
959 "fingertrees.sls"
960 "hamts.sls"
961 "heaps.sls"
962 "private"
963 "psqs.sls"
964 "queues"
965 "queues.sls"
966 "sequences.sls"
967 "sets.sls")))))))
968 (native-inputs
969 (list guile-3.0))
970 (synopsis "Purely functional data structures for Guile")
971 (description
972 "This package provides purely functional data structures written in R6RS
973 Scheme and compiled for Guile. It has been tested with Racket, Guile 2,
974 Vicare Scheme and IronScheme. Right now it contains:
975
976 @itemize
977 @item queues
978 @item deques
979 @item bbtrees
980 @item sets
981 @item dlists
982 @item priority search queues (PSQs)
983 @item finger trees
984 @item sequences
985 @item heaps
986 @item hash array mapped tries (HAMTs).
987 @end itemize\n")
988 (license license:bsd-3)))
989
990 (define-public guile2.0-pg
991 (package
992 (name "guile2.0-pg")
993 (version "0.49")
994 (source (origin
995 (method url-fetch)
996 (uri (string-append "mirror://savannah/guile-pg/guile-pg-"
997 version ".tar.xz"))
998 (sha256
999 (base32
1000 "1fizcqga96p9n2jjhi9nprhry20hg9wvcl5b8gya4vhzwz6qhysp"))))
1001 (build-system gnu-build-system)
1002 (arguments
1003 '(#:phases
1004 (modify-phases %standard-phases
1005 (add-before 'install 'patch-src/Makefile
1006 (lambda* (#:key outputs #:allow-other-keys)
1007 (substitute* "src/Makefile"
1008 (("\\/share\\/guile\\/site") "/share/guile/site/2.0"))
1009 #t)))))
1010 (native-inputs
1011 (list procps ; fake-cluster-control uses ps
1012 guile-2.0 postgresql))
1013 (inputs
1014 (list guile-2.0 postgresql))
1015 (home-page "https://www.nongnu.org/guile-pg/")
1016 (synopsis "Guile modules for accessing PostgreSQL")
1017 (description
1018 "Guile-PG is a collection of modules for Guile allowing access to the
1019 PostgreSQL RDBMS from Scheme programs.
1020
1021 This has been tested against PostgreSQL 10 through 13, but currently only
1022 works with Guile 1.4.x to 2.0.x.")
1023 (license license:gpl3+)))
1024
1025 (define-public guile-prometheus
1026 (let ((commit "35dc26c0ea44c3d70f1819f240d84e2cbb4b7b4c")
1027 (revision "5"))
1028 (package
1029 (name "guile-prometheus")
1030 (version (git-version "0" revision commit))
1031 (source (origin
1032 (method git-fetch)
1033 (uri (git-reference
1034 (url "https://git.cbaines.net/git/guile/prometheus")
1035 (commit commit)))
1036 (sha256
1037 (base32
1038 "07822jj4appw37lf444kc4xlgl7nm64mgldag56072l55kwashgb"))
1039 (file-name (string-append name "-" version "-checkout"))))
1040 (build-system gnu-build-system)
1041 (native-inputs
1042 (list pkg-config autoconf automake guile-3.0))
1043 (inputs
1044 (list guile-3.0))
1045 (home-page "https://git.cbaines.net/guile/prometheus")
1046 (synopsis "Prometheus client library for Guile")
1047 (description
1048 "This Guile library provides instrumentation code intended to be used
1049 with the Prometheus time series service. Counter, gauge and histogram metric
1050 types are supported.")
1051 (license license:gpl3+))))
1052
1053 (define-public guile2.2-pfds
1054 (package
1055 (inherit guile-pfds)
1056 (name "guile2.2-pfds")
1057 (native-inputs (list guile-2.2))
1058 (arguments
1059 (substitute-keyword-arguments (package-arguments guile-pfds)
1060 ((#:phases phases)
1061 `(modify-phases ,phases
1062 (delete 'work-around-guile-bug)
1063 (add-after 'move-files-around 'sls->scm
1064 (lambda _
1065 ;; In Guile <= 2.2.4, there's no way to tell 'guild
1066 ;; compile' to accept the ".sls" extension. So...
1067 (for-each (lambda (file)
1068 (rename-file file
1069 (string-append
1070 (string-drop-right file 4)
1071 ".scm")))
1072 (find-files "." "\\.sls$"))
1073 #t))))))))
1074
1075 (define-public guile-aa-tree
1076 (package
1077 (name "guile-aa-tree")
1078 (version "3.1.1")
1079 (source (origin
1080 (method url-fetch)
1081 (uri (string-append "mirror://savannah/guile-aa-tree/guile-aa-tree-"
1082 version ".tar.gz"))
1083 (sha256
1084 (base32
1085 "0044c105r3q9vpl17pv3phl1b79kjm1llhkakqgiasixyav01blh"))))
1086 (build-system guile-build-system)
1087 (native-inputs (list guile-2.2))
1088 ;; https://savannah.nongnu.org/projects/guile-aa-tree
1089 (home-page "https://qlfiles.net/guile-aa-tree/")
1090 (synopsis "AA tree data structure for Guile")
1091 (description
1092 "This package provides an implementation of @dfn{AA trees}, a
1093 self-balancing binary tree data structure, for Guile. It ensure @math{O(log
1094 n)} worst case performance for core operations. The module provides
1095 non-mutating insert, delete, and search operations, with support for
1096 convenient nested tree operations.")
1097 (license license:gpl3+)))
1098
1099 (define-public guile-simple-zmq
1100 (let ((commit "b2ea97e5a0e7417ce718b27b6fd55a3146364b82")
1101 (revision "9"))
1102 (package
1103 (name "guile-simple-zmq")
1104 (version (git-version "0.0.0" revision commit))
1105 (source
1106 (origin
1107 (method git-fetch)
1108 (uri (git-reference
1109 (url "https://github.com/jerry40/guile-simple-zmq")
1110 (commit commit)))
1111 (sha256
1112 (base32
1113 "08qvcxx0njz9545xa0lq3wpf55v9cl9nbb640ry1lig11wpymqxb"))
1114 (file-name (git-file-name name version))))
1115 (build-system gnu-build-system)
1116 (arguments
1117 '(#:make-flags
1118 '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
1119
1120 (native-inputs
1121 (list guile-3.0))
1122 (inputs
1123 (list autoconf automake pkg-config zeromq))
1124 (home-page "https://github.com/jerry40/guile-simple-zmq")
1125 (synopsis "Guile wrapper over ZeroMQ library")
1126 (description
1127 "This package provides a Guile programming interface to the ZeroMQ
1128 messaging library.")
1129 (license license:gpl3+))))
1130
1131 (define-public guile2.2-simple-zmq
1132 (package
1133 (inherit guile-simple-zmq)
1134 (name "guile2.2-simple-zmq")
1135 (native-inputs (list guile-2.2))))
1136
1137 (define-public jupyter-guile-kernel
1138 (let ((commit "f25fb90b95529b17a006a807bd04e6aee12ea304")
1139 (revision "2"))
1140 (package
1141 (name "jupyter-guile-kernel")
1142 (version (git-version "0.0.0" revision commit))
1143 (source
1144 (origin
1145 (method git-fetch)
1146 (uri (git-reference
1147 (url "https://github.com/jerry40/guile-kernel")
1148 (commit commit)))
1149 (file-name (git-file-name name version))
1150 (sha256
1151 (base32
1152 "0zr1fasdb2yv9kn21yll993y9higqss4jnfs030ndhjb93raa9sr"))))
1153 (build-system guile-build-system)
1154 (arguments
1155 '(#:phases (modify-phases %standard-phases
1156 (add-after 'unpack 'set-openssl-file-name
1157 (lambda* (#:key inputs #:allow-other-keys)
1158 ;; Record the absolute file name of the 'openssl'
1159 ;; command.
1160 (substitute* "src/hmac.scm"
1161 (("openssl")
1162 (search-input-file inputs "/bin/openssl")))))
1163
1164 ;; XXX: The code uses 'include' to include its own source
1165 ;; files, and "-L src" isn't enough in this case.
1166 (add-before 'build 'chdir
1167 (lambda _ (chdir "src") #t))
1168 (add-after 'build 'chdir-back
1169 (lambda _ (chdir "..") #t))
1170
1171 (add-after 'install 'install-kernel
1172 (lambda* (#:key inputs outputs #:allow-other-keys)
1173 (let* ((out (assoc-ref outputs "out"))
1174 (json (assoc-ref inputs "guile-json"))
1175 (zmq (assoc-ref inputs "guile-simple-zmq"))
1176 (deps (list json zmq))
1177 (dir (string-append
1178 out "/share/jupyter/kernels/guile"))
1179 (effective (target-guile-effective-version)))
1180 ;; Install kernel.
1181 (install-file "src/kernel.json" dir)
1182
1183 ;; Fix hard-coded file name in the kernel.
1184 (substitute* (string-append dir "/kernel.json")
1185 (("/usr/local/.*/guile-jupyter-kernel.scm")
1186 (string-append out "/share/guile/site/"
1187 (target-guile-effective-version)
1188 "/guile-jupyter-kernel.scm"))
1189 (("\"guile\"")
1190 (string-append "\"" (assoc-ref inputs "guile")
1191 "/bin/guile\""))
1192 (("-s")
1193 ;; Add '-L' and '-C' flags so that the kernel
1194 ;; finds its dependencies.
1195 (let ((-L (map (lambda (item)
1196 (string-append "\"" item
1197 "/share/guile/site/"
1198 effective "\""))
1199 deps))
1200 (-C (map (lambda (item)
1201 (string-append "\"" item
1202 "/lib/guile/"
1203 effective
1204 "/site-ccache\""))
1205 deps)))
1206 (string-append "--no-auto-compile\""
1207 (string-join -L ", \"-L\", "
1208 'prefix)
1209 (string-join -C ", \"-C\", "
1210 'prefix)
1211 ", \"-s"))))
1212 #t))))))
1213 (inputs
1214 (list openssl guile-3.0 guile-json-3 guile-simple-zmq))
1215 (synopsis "Guile kernel for the Jupyter Notebook")
1216 (description
1217 "This package provides a Guile 2.x kernel for the Jupyter Notebook. It
1218 allows users to interact with the Guile REPL through Jupyter.")
1219 (home-page "https://github.com/jerry40/guile-kernel")
1220 (license license:gpl3+))))
1221
1222 (define-public guile-sparql
1223 (package
1224 (name "guile-sparql")
1225 (version "0.0.8")
1226 (source (origin
1227 (method url-fetch)
1228 (uri (string-append
1229 "https://github.com/roelj/guile-sparql/releases/download/"
1230 version "/guile-sparql-" version ".tar.gz"))
1231 (sha256
1232 (base32 "1jf4972f9fpm0rd865xpnc9mzl3xv6vhfnp0iygadydy905z9nln"))))
1233 (build-system gnu-build-system)
1234 (native-inputs
1235 (list pkg-config))
1236 (inputs
1237 (list guile-3.0))
1238 (home-page "https://github.com/roelj/guile-sparql")
1239 (synopsis "SPARQL module for Guile")
1240 (description "This package provides the functionality to query a SPARQL
1241 endpoint. Additionally, it provides an interface to write SPARQL queries
1242 using S-expressions.")
1243 (license license:gpl3+)))
1244
1245 (define-public guile-debbugs
1246 (package
1247 (name "guile-debbugs")
1248 (version "0.0.3")
1249 (source (origin
1250 (method url-fetch)
1251 (uri (string-append "mirror://gnu/guile-debbugs/guile-debbugs-"
1252 version ".tar.gz"))
1253 (sha256
1254 (base32
1255 "1cc63nw3xdfjrfk8c58r6d5lidmfq5cpqcy32yd5xp81yccprvn9"))))
1256 (build-system gnu-build-system)
1257 (propagated-inputs
1258 (list guile-email))
1259 (native-inputs
1260 (list guile-3.0 pkg-config))
1261 (home-page "https://savannah.gnu.org/projects/guile-debbugs/")
1262 (synopsis "Guile interface to the Debbugs bug tracking service")
1263 (description
1264 "This package provides a Guile library to communicate with a Debbugs bug
1265 tracker's SOAP service, such as @url{https://bugs.gnu.org}.")
1266 (license license:gpl3+)))
1267
1268 (define-public guile-email
1269 (package
1270 (name "guile-email")
1271 (version "0.2.2")
1272 (source
1273 (origin
1274 (method url-fetch)
1275 (uri (string-append
1276 "https://guile-email.systemreboot.net/releases/guile-email-"
1277 version ".tar.lz"))
1278 (sha256
1279 (base32
1280 "1rc8r0fgvflnyq5ckl7ii8sghpsgpkzxa8vskjr1ak2kyar6m35k"))
1281 (patches
1282 (search-patches "guile-email-fix-tests.patch"))))
1283 (build-system gnu-build-system)
1284 (native-inputs
1285 (list pkg-config lzip))
1286 (inputs
1287 (list guile-3.0))
1288 (arguments
1289 '(#:make-flags '("GUILE_AUTO_COMPILE=0"))) ; to prevent guild warnings
1290 (home-page "https://guile-email.systemreboot.net")
1291 (synopsis "Guile email parser")
1292 (description "guile-email is a collection of email utilities implemented
1293 in pure guile. It supports parsing MIME (Multipurpose Internet Mail
1294 Extensions) compliant email messages and reading emails from the mbox
1295 format.")
1296 (license license:agpl3+)))
1297
1298 (define-public guile-email-latest
1299 (let ((commit "ea60bb902d3677d5c653851c7aa6afbbf710140e")
1300 (revision "2"))
1301 (package
1302 (inherit guile-email)
1303 (name "guile-email-latest")
1304 (version (git-version "0.2.2" revision commit))
1305 (source
1306 (origin
1307 (method git-fetch)
1308 (uri (git-reference
1309 (url "https://git.systemreboot.net/guile-email")
1310 (commit commit)))
1311 (file-name (git-file-name name version))
1312 (sha256
1313 (base32
1314 "1g4rn7ai3nfxmpppc8qbpv8b18wnsld29y5xa58cv9b8pf3pbwnj"))))
1315 (native-inputs
1316 (list pkg-config autoconf automake texinfo)))))
1317
1318 (define-public guile2.2-email
1319 (package
1320 (inherit guile-email)
1321 (name "guile2.2-email")
1322 (inputs (modify-inputs (package-inputs guile-email)
1323 (replace "guile" guile-2.2)))))
1324
1325 (define-public guile-newt
1326 (package
1327 (name "guile-newt")
1328 (version "0.0.3")
1329 (source (origin
1330 (method git-fetch)
1331 (uri (git-reference
1332 (url "https://gitlab.com/mothacehe/guile-newt")
1333 (commit version)))
1334 (file-name (git-file-name name version))
1335 (sha256
1336 (base32
1337 "0hbznqigdkyh0kdkpnkp7sz2qd0g5dvmibcdi1rki02zg78mzypv"))))
1338 (build-system gnu-build-system)
1339 (arguments
1340 '(#:make-flags
1341 '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
1342 (inputs
1343 (list guile-3.0 newt))
1344 (native-inputs
1345 (list autoconf automake pkg-config guile-3.0))
1346 (synopsis "Guile bindings to Newt")
1347 (description
1348 "This package provides bindings for Newt, a programming library for
1349 color text mode, widget based user interfaces. The bindings are written in pure
1350 Scheme by using Guile’s foreign function interface.")
1351 (home-page "https://gitlab.com/mothacehe/guile-newt")
1352 (license license:gpl3+)))
1353
1354 (define-public guile2.2-newt
1355 (package
1356 (inherit guile-newt)
1357 (name "guile2.2-newt")
1358 (inputs (modify-inputs (package-inputs guile-newt)
1359 (replace "guile" guile-2.2)))))
1360
1361 (define-public guile-mastodon
1362 (let ((commit "74b75bcf547df92acee1e0466ecd7ec07f775392")
1363 (revision "1"))
1364 (package
1365 (name "guile-mastodon")
1366 (version (git-version "0.0.1" revision commit))
1367 (source (origin
1368 (method git-fetch)
1369 (uri (git-reference
1370 (url "https://framagit.org/prouby/guile-mastodon.git")
1371 (commit commit)))
1372 (file-name (string-append name "-" version "-checkout"))
1373 (sha256
1374 (base32
1375 "1wx5h6wa9c0na8mrnr2nv1nzjvq68zyrly8yyp11dsskhaw4y33h"))))
1376 (build-system gnu-build-system)
1377 (native-inputs
1378 (list autoconf automake emacs-minimal pkg-config texinfo))
1379 (inputs
1380 (list guile-3.0 gnutls guile-json-4))
1381 (home-page "https://framagit.org/prouby/guile-mastodon")
1382 (synopsis "Guile Mastodon REST API module")
1383 (description "This package provides Guile modules to access the
1384 @uref{https://docs.joinmastodon.org/api/, REST API of Mastodon}, a federated
1385 microblogging service.")
1386 (license license:gpl3+))))
1387
1388 (define-public guile-parted
1389 (package
1390 (name "guile-parted")
1391 (version "0.0.6")
1392 (source (origin
1393 (method git-fetch)
1394 (uri (git-reference
1395 (url "https://gitlab.com/mothacehe/guile-parted")
1396 (commit version)))
1397 (file-name (git-file-name name version))
1398 (sha256
1399 (base32
1400 "12ygz0dw8zjr8g3z4g3sh4d1yw3fiphh0ssyqd4nllqa3sfwv21f"))
1401 (modules '((guix build utils)))))
1402 (build-system gnu-build-system)
1403 (arguments
1404 '(#:make-flags
1405 '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
1406 (native-inputs
1407 (list autoconf automake guile-3.0 guile-bytestructures pkg-config))
1408 (inputs
1409 (list guile-3.0 parted))
1410 (propagated-inputs
1411 (list guile-bytestructures))
1412 (synopsis "Guile bindings to GNU Parted")
1413 (description
1414 "This package provides bindings for GNU Parted library, a C library
1415 allowing disk partition tables creation and manipulation. The bindings are
1416 written in pure Scheme by using Guile's foreign function interface.")
1417 (home-page "https://gitlab.com/mothacehe/guile-parted")
1418 (license license:gpl3+)))
1419
1420 (define-public guile2.2-parted
1421 (package
1422 (inherit guile-parted)
1423 (name "guile2.2-parted")
1424 (inputs (modify-inputs (package-inputs guile-parted)
1425 (replace "guile" guile-2.2)))
1426 (propagated-inputs
1427 `(("guile-bytestructures" ,guile2.2-bytestructures)))))
1428
1429 (define-public guile-xosd
1430 (package
1431 (name "guile-xosd")
1432 (version "0.2.2")
1433 (source (origin
1434 (method url-fetch)
1435 (uri (string-append "https://github.com/alezost/" name
1436 "/releases/download/v" version
1437 "/" name "-" version ".tar.gz"))
1438 (sha256
1439 (base32
1440 "10r29bpyrsvjalnzkam2falj9k34lvxmch05zs606zp1nk93whp3"))))
1441 (build-system gnu-build-system)
1442 (arguments
1443 `(#:phases
1444 (modify-phases %standard-phases
1445 (add-before 'build 'set-cpath
1446 (lambda* (#:key inputs #:allow-other-keys)
1447 (setenv "CPATH"
1448 (string-append
1449 (assoc-ref inputs "guile") "/include/guile/3.0:"
1450 (or (getenv "CPATH") "")))
1451 #t)))))
1452 (native-inputs
1453 (list pkg-config))
1454 (inputs
1455 (list guile-3.0 libx11 libxext libxinerama xosd))
1456 (home-page "https://github.com/alezost/guile-xosd")
1457 (synopsis "XOSD bindings for Guile")
1458 (description
1459 "Guile-XOSD provides Guile bindings for @code{libxosd},
1460 @uref{http://sourceforge.net/projects/libxosd/, the X On Screen Display
1461 library}.")
1462 (license license:gpl3+)))
1463
1464 (define-public guile-dbi
1465 (package
1466 (name "guile-dbi")
1467 (version "2.1.8")
1468 (source (origin
1469 (method git-fetch)
1470 (uri (git-reference
1471 (url "https://github.com/opencog/guile-dbi")
1472 (commit (string-append "guile-dbi-" version))))
1473 (file-name (git-file-name name version))
1474 (sha256
1475 (base32
1476 "123m4j82bi60s1v95pjh4djb7bh6zdwmljbpyg7zq8ni2gyal7lw"))))
1477 (build-system gnu-build-system)
1478 (arguments
1479 `(#:modules (((guix build guile-build-system)
1480 #:select (target-guile-effective-version))
1481 ,@%gnu-build-system-modules)
1482 #:imported-modules ((guix build guile-build-system)
1483 ,@%gnu-build-system-modules)
1484 #:configure-flags
1485 (list (string-append
1486 "--with-guile-site-dir=" %output "/share/guile/site/"
1487 (target-guile-effective-version (assoc-ref %build-inputs "guile"))))
1488 #:phases
1489 (modify-phases %standard-phases
1490 (add-after 'unpack 'chdir
1491 (lambda _
1492 ;; The upstream Git repository contains all the code, so change
1493 ;; to the directory specific to guile-dbi.
1494 (chdir "guile-dbi")))
1495 (add-after 'install 'patch-extension-path
1496 (lambda* (#:key inputs outputs #:allow-other-keys)
1497 (let* ((out (assoc-ref outputs "out"))
1498 (dbi.scm (string-append out "/share/guile/site/"
1499 (target-guile-effective-version
1500 (assoc-ref inputs "guile"))
1501 "/dbi/dbi.scm"))
1502 (ext (string-append out "/lib/libguile-dbi")))
1503 (substitute* dbi.scm (("libguile-dbi") ext))))))))
1504 (native-inputs
1505 (list autoconf automake libtool perl texinfo))
1506 (propagated-inputs
1507 (list guile-2.2))
1508 (synopsis "Guile database abstraction layer")
1509 (home-page "https://github.com/opencog/guile-dbi")
1510 (description
1511 "guile-dbi is a library for Guile that provides a convenient interface to
1512 SQL databases. Database programming with guile-dbi is generic in that the same
1513 programming interface is presented regardless of which database system is used.
1514 It currently supports MySQL, Postgres and SQLite3.")
1515 (license license:gpl2+)
1516 (native-search-paths
1517 (list (search-path-specification
1518 (variable "GUILE_DBD_PATH")
1519 (files '("lib")))))))
1520
1521 (define-public guile-dbd-sqlite3
1522 (package
1523 (inherit guile-dbi)
1524 (name "guile-dbd-sqlite3")
1525 (arguments
1526 (substitute-keyword-arguments (package-arguments guile-dbi)
1527 ((#:phases phases)
1528 `(modify-phases ,phases
1529 (replace 'chdir
1530 (lambda _
1531 ;; The upstream Git repository contains all the code, so change
1532 ;; to the directory specific to guile-dbd-sqlite3.
1533 (chdir "guile-dbd-sqlite3")))
1534 (delete 'patch-extension-path)))))
1535 (inputs
1536 (list sqlite zlib))
1537 (native-inputs
1538 (modify-inputs (package-native-inputs guile-dbi)
1539 (prepend guile-dbi ; only required for headers
1540 pkg-config)))
1541 (synopsis "Guile DBI driver for SQLite")
1542 (description
1543 "guile-dbi is a library for Guile that provides a convenient interface to
1544 SQL databases. This package implements the interface for SQLite.")))
1545
1546 (define-public guile-dbd-postgresql
1547 (package
1548 (inherit guile-dbi)
1549 (name "guile-dbd-postgresql")
1550 (arguments
1551 (substitute-keyword-arguments (package-arguments guile-dbi)
1552 ((#:phases phases)
1553 `(modify-phases ,phases
1554 (replace 'chdir
1555 (lambda _
1556 ;; The upstream Git repository contains all the code, so change
1557 ;; to the directory specific to guile-dbd-mysql.
1558 (chdir "guile-dbd-postgresql")))
1559 (add-after 'chdir 'patch-src
1560 (lambda _
1561 (substitute* "src/guile-dbd-postgresql.c"
1562 (("postgresql/libpq-fe\\.h") "libpq-fe.h"))))
1563 (delete 'patch-extension-path)))))
1564 (inputs
1565 (list postgresql zlib))
1566 (native-inputs
1567 (modify-inputs (package-native-inputs guile-dbi)
1568 (prepend guile-dbi ; only required for headers
1569 )))
1570 (synopsis "Guile DBI driver for PostgreSQL")
1571 (description
1572 "@code{guile-dbi} is a library for Guile that provides a convenient
1573 interface to SQL databases. This package implements the interface for
1574 PostgreSQL.")))
1575
1576 (define-public guile-dbd-mysql
1577 (package
1578 (inherit guile-dbi)
1579 (name "guile-dbd-mysql")
1580 (arguments
1581 (substitute-keyword-arguments (package-arguments guile-dbi)
1582 ((#:phases phases)
1583 `(modify-phases ,phases
1584 (replace 'chdir
1585 (lambda _
1586 ;; The upstream Git repository contains all the code, so change
1587 ;; to the directory specific to guile-dbd-mysql.
1588 (chdir "guile-dbd-mysql")))
1589 (add-after 'chdir 'patch-src
1590 (lambda _
1591 (substitute* "configure.ac"
1592 (("mariadbclient") "mariadb"))
1593 (substitute* "src/guile-dbd-mysql.c"
1594 (("<mariadb/") "<mysql/"))))
1595 (delete 'patch-extension-path)))))
1596 (inputs
1597 (list `(,mariadb "dev")
1598 `(,mariadb "lib") zlib))
1599 (native-inputs
1600 (modify-inputs (package-native-inputs guile-dbi)
1601 (prepend guile-dbi ; only required for headers
1602 )))
1603 (synopsis "Guile DBI driver for MySQL")
1604 (description "@code{guile-dbi} is a library for Guile that provides a
1605 convenient interface to SQL databases. This package implements the interface
1606 for MySQL.")
1607 (license license:gpl2+)))
1608
1609 (define-public guile-config
1610 (package
1611 (name "guile-config")
1612 (version "0.5.1")
1613 (source
1614 (origin
1615 (method git-fetch)
1616 (uri (git-reference
1617 (url "https://gitlab.com/a-sassmannshausen/guile-config")
1618 (commit version)))
1619 (file-name (git-file-name name version))
1620 (sha256 (base32
1621 "0s708k6qnk9155bjrcy1f1v7lqhlpaj4mjip46sr3iw85hca92wz"))))
1622 (build-system gnu-build-system)
1623 (native-inputs
1624 (list autoconf automake pkg-config texinfo))
1625 (inputs (list guile-3.0))
1626 (synopsis
1627 "Guile application configuration parsing library.")
1628 (description
1629 "Guile Config is a library providing a declarative approach to
1630 application configuration specification. The library provides clean
1631 configuration declaration forms, and processors that take care of:
1632 configuration file creation; configuration file parsing; command-line
1633 parameter parsing using getopt-long; basic GNU command-line parameter
1634 generation (--help, --usage, --version); automatic output generation for the
1635 above command-line parameters.")
1636 (home-page
1637 "https://gitlab.com/a-sassmannshausen/guile-config")
1638 (license license:gpl3+)))
1639
1640 (define-public guile2.2-config
1641 (package
1642 (inherit guile-config)
1643 (name "guile2.2-config")
1644 (inputs (modify-inputs (package-inputs guile-config)
1645 (replace "guile" guile-2.2)))))
1646
1647 (define-public guile-hall
1648 (package
1649 (name "guile-hall")
1650 (version "0.4.1")
1651 (source
1652 (origin
1653 (method git-fetch)
1654 (uri (git-reference
1655 (url "https://gitlab.com/a-sassmannshausen/guile-hall")
1656 (commit version)))
1657 (file-name (git-file-name name version))
1658 (sha256
1659 (base32 "0yrrik1v1xbik5h5q7w2cxrx6gvkmcdm32dl36i7xqdq8pr8sh2d"))))
1660 (build-system gnu-build-system)
1661 (arguments
1662 `(#:modules
1663 ((ice-9 match)
1664 (ice-9 ftw)
1665 ,@%gnu-build-system-modules)
1666 #:phases
1667 (modify-phases
1668 %standard-phases
1669 (add-after 'install 'hall-wrap-binaries
1670 (lambda* (#:key inputs outputs #:allow-other-keys)
1671 (let* ((compiled-dir
1672 (lambda (out version)
1673 (string-append
1674 out "/lib/guile/" version "/site-ccache")))
1675 (uncompiled-dir
1676 (lambda (out version)
1677 (string-append
1678 out "/share/guile/site"
1679 (if (string-null? version) "" "/") version)))
1680 (dep-path
1681 (lambda (env modules path)
1682 (list env ":" 'prefix
1683 (cons modules
1684 (map (lambda (input)
1685 (string-append
1686 (assoc-ref inputs input)
1687 path))
1688 ,''("guile-config"))))))
1689 (out (assoc-ref outputs "out"))
1690 (bin (string-append out "/bin/"))
1691 (site (uncompiled-dir out "")))
1692 (match (scandir site)
1693 (("." ".." version)
1694 (for-each
1695 (lambda (file)
1696 (wrap-program
1697 (string-append bin file)
1698 (dep-path
1699 "GUILE_LOAD_PATH"
1700 (uncompiled-dir out version)
1701 (uncompiled-dir "" version))
1702 (dep-path
1703 "GUILE_LOAD_COMPILED_PATH"
1704 (compiled-dir out version)
1705 (compiled-dir "" version))))
1706 ,''("hall"))
1707 #t))))))))
1708 (native-inputs
1709 (list autoconf automake pkg-config texinfo))
1710 (inputs (list guile-3.0))
1711 (propagated-inputs
1712 (list guile-config))
1713 (synopsis "Guile project tooling")
1714 (description
1715 "Hall is a command-line application and a set of Guile libraries that
1716 allow you to quickly create and publish Guile projects. It allows you to
1717 transparently support the GNU build system, manage a project hierarchy &
1718 provides tight coupling to Guix.")
1719 (home-page "https://gitlab.com/a-sassmannshausen/guile-hall")
1720 (license license:gpl3+)))
1721
1722 (define-public guile2.2-hall
1723 (package
1724 (inherit guile-hall)
1725 (name "guile2.2-hall")
1726 (inputs (modify-inputs (package-inputs guile-hall)
1727 (replace "guile" guile-2.2)))
1728 (propagated-inputs
1729 `(("guile-config" ,guile2.2-config)
1730 ,@(alist-delete "guile-config"
1731 (package-propagated-inputs guile-hall))))))
1732
1733 (define-public guile-ics
1734 (package
1735 (name "guile-ics")
1736 (version "0.3.0")
1737 (source
1738 (origin
1739 (method git-fetch)
1740 (uri (git-reference
1741 (url "https://github.com/artyom-poptsov/guile-ics")
1742 (commit (string-append "v" version))))
1743 (file-name (string-append name "-" version "-checkout"))
1744 (sha256
1745 (base32
1746 "1526kdzcn0qvf5hpb4x5q01vb9mph9gfw24p81inqgjvy7a57lf9"))))
1747 (build-system gnu-build-system)
1748 (arguments
1749 (list #:phases #~(modify-phases %standard-phases
1750 (delete 'strip))))
1751 (native-inputs
1752 (list autoconf
1753 automake
1754 texinfo
1755 gettext-minimal ;Gettext brings 'AC_LIB_LINKFLAGS_FROM_LIBS'.
1756 help2man
1757 pkg-config))
1758 (inputs (list guile-3.0 which))
1759 (propagated-inputs (list guile-lib guile-smc))
1760 (home-page "https://github.com/artyom-poptsov/guile-ics")
1761 (synopsis "Guile parser library for the iCalendar format")
1762 (description
1763 "Guile-ICS is an iCalendar (RFC5545) format parser library written in
1764 pure Scheme. The library can be used to read and write iCalendar data.
1765
1766 The library is shipped with documentation in Info format and usage examples.")
1767 (license license:gpl3+)))
1768
1769 (define-public guile2.2-ics
1770 (package
1771 (inherit guile-ics)
1772 (name "guile2.2-ics")
1773 (inputs (list guile-2.2 which))
1774 (propagated-inputs (list guile2.2-lib guile2.2-smc))))
1775
1776 (define-public guile-imanifest
1777 (let ((commit "ccd5a2111b008d778106f5595a3a585954d95d0")
1778 (revision "0"))
1779 (package
1780 (name "guile-imanifest")
1781 (version (git-version "0.0.0" revision commit))
1782 (source (origin
1783 (method git-fetch)
1784 (uri (git-reference
1785 (url "https://git.sr.ht/~brown121407/guile-imanifest")
1786 (commit commit)))
1787 (file-name (git-file-name name version))
1788 (sha256
1789 (base32
1790 "0i5qllcrhdjhspyj7j9h4dc9y37d3cfbpackmybm3030qgfxqirf"))))
1791 (build-system guile-build-system)
1792 (native-inputs
1793 (list guile-3.0))
1794 (propagated-inputs
1795 (list guile-readline guile-colorized guix))
1796 (home-page "https://sr.ht/~brown121407/guile-imanifest")
1797 (synopsis "Interactive Guix manifests")
1798 (description "This package provides functions to generate Guix manifests
1799 interactively. It works by scanning an alist of package categories, to ask the
1800 user which package sets would they like to install from it.")
1801 (license license:gpl3+))))
1802
1803 (define-public guile-wisp
1804 (package
1805 (name "guile-wisp")
1806 (version "1.0.7")
1807 (source (origin
1808 (method hg-fetch)
1809 (uri (hg-reference
1810 (url "https://hg.sr.ht/~arnebab/wisp")
1811 (changeset (string-append "v" version))))
1812 (file-name (git-file-name name version))
1813 (sha256
1814 (base32
1815 "0fxngiy8dmryh3gx4g1q7nnamc4dpszjh130g6d0pmi12ycxd2y9"))))
1816 (build-system gnu-build-system)
1817 (arguments
1818 `(#:modules ((guix build gnu-build-system)
1819 ((guix build emacs-build-system) #:prefix emacs:)
1820 (guix build utils)
1821 (guix build emacs-utils)
1822 (ice-9 rdelim)
1823 (ice-9 popen))
1824 #:imported-modules (,@%gnu-build-system-modules
1825 (guix build emacs-build-system)
1826 (guix build emacs-utils))
1827 #:phases
1828 (modify-phases %standard-phases
1829 (replace 'bootstrap
1830 (lambda _
1831 (invoke "autoreconf" "-vif")))
1832 (add-before 'configure 'patch-/usr/bin/env
1833 (lambda _
1834 (substitute* "Makefile.in"
1835 (("/usr/bin/env bash") (which "bash")))))
1836 ;; auto compilation breaks, but if we set HOME to /tmp,
1837 ;; that works ok
1838 (add-before 'check 'auto-compile-hacky-workaround
1839 (lambda _ (setenv "HOME" "/tmp") #t))
1840 (add-after 'install 'install-go-files
1841 (lambda* (#:key outputs inputs #:allow-other-keys)
1842 (let* ((out (assoc-ref outputs "out"))
1843 (effective (read-line
1844 (open-pipe* OPEN_READ
1845 "guile" "-c"
1846 "(display (effective-version))")))
1847 (module-dir (string-append out "/share/guile/site/"
1848 effective))
1849 (object-dir (string-append out "/lib/guile/" effective
1850 "/site-ccache"))
1851 (prefix (string-length module-dir)))
1852 ;; compile to the destination
1853 (for-each (lambda (file)
1854 (let* ((base (string-drop (string-drop-right file 4)
1855 prefix))
1856 (go (string-append object-dir base ".go")))
1857 (invoke "guild" "compile" "-L" module-dir
1858 file "-o" go)))
1859 (find-files module-dir "\\.scm$")))))
1860 (add-after 'install 'install-emacs-files
1861 (assoc-ref emacs:%standard-phases 'install))
1862 (add-after 'install-emacs-files 'compile-emacs-files
1863 (assoc-ref emacs:%standard-phases 'build))
1864 (add-after 'compile-emacs-files 'make-autoloads
1865 (assoc-ref emacs:%standard-phases 'make-autoloads)))))
1866 (home-page "https://www.draketo.de/english/wisp")
1867 (inputs
1868 (list guile-3.0))
1869 (native-inputs
1870 `(("autoconf" ,autoconf)
1871 ("automake" ,automake)
1872 ("emacs" ,emacs-minimal)
1873 ("python" ,python)
1874 ("pkg-config" ,pkg-config)))
1875 (synopsis "Whitespace to lisp syntax for Guile")
1876 (description "Wisp is a syntax for Guile which provides a Python-like
1877 whitespace-significant language. It may be easier on the eyes for some
1878 users and in some situations.")
1879 (license (list license:gpl3+ ; the project as a whole
1880 license:expat)))) ; the language spec (see also SRFI 119)
1881
1882 (define-public guile2.2-wisp
1883 (package
1884 (inherit guile-wisp)
1885 (name "guile2.2-wisp")
1886 (inputs (list guile-2.2))))
1887
1888 (define-public guile-udev
1889 (package
1890 (name "guile-udev")
1891 (version "0.2.3")
1892 (source (origin
1893 (method git-fetch)
1894 (uri (git-reference
1895 (url "https://github.com/artyom-poptsov/guile-udev")
1896 (commit (string-append "v" version))))
1897 (file-name (git-file-name name version))
1898 (sha256
1899 (base32
1900 "0xvh4wscxmiqm8lnmfyh5cjzn89kv2wslkfvqvcjhinzpnpbg91x"))))
1901 (build-system gnu-build-system)
1902 (native-inputs
1903 (list autoconf
1904 automake
1905 gettext-minimal
1906 libtool
1907 texinfo
1908 pkg-config
1909 which))
1910 (inputs
1911 (list guile-3.0 eudev))
1912 (home-page "https://github.com/artyom-poptsov/guile-udev")
1913 (synopsis "Guile bindings to libudev")
1914 (description
1915 "Guile-Udev provides GNU Guile bindings to libudev.")
1916 (license license:gpl3+)))
1917
1918 (define-public guile-sly
1919 (package
1920 (name "guile-sly")
1921 (version "0.1")
1922 (source (origin
1923 (method url-fetch)
1924 (uri (string-append "https://files.dthompson.us/sly/sly-"
1925 version ".tar.gz"))
1926 (sha256
1927 (base32
1928 "1svzlbz2vripmyq2kjh0rig16bsrnbkwbsm558pjln9l65mcl4qq"))
1929 (modules '((guix build utils)))
1930 (snippet
1931 '(begin
1932 (substitute* "configure"
1933 (("_guile_required_version=\"2.0.11\"")
1934 "_guile_required_version=\"2\"")
1935 (("ac_subst_vars='")
1936 "ac_subst_vars='GUILE_EFFECTIVE_VERSION\n"))
1937 (substitute* (find-files "." "Makefile.in")
1938 (("moddir = .*$")
1939 (string-append
1940 "moddir = "
1941 "$(prefix)/share/guile/site/@GUILE_EFFECTIVE_VERSION@\n"))
1942 (("godir = .*$")
1943 (string-append
1944 "godir = "
1945 "$(prefix)/lib/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n")))
1946 #t))))
1947 (build-system gnu-build-system)
1948 (arguments
1949 '(#:configure-flags
1950 (list (string-append "--with-libfreeimage-prefix="
1951 (assoc-ref %build-inputs "freeimage"))
1952 (string-append "--with-libgslcblas-prefix="
1953 (assoc-ref %build-inputs "gsl")))))
1954 (native-inputs
1955 (list pkg-config))
1956 (propagated-inputs
1957 (list guile-sdl guile-opengl))
1958 (inputs
1959 (list guile-2.2 gsl freeimage mesa))
1960 (synopsis "2D/3D game engine for GNU Guile")
1961 (description "Sly is a 2D/3D game engine written in Guile Scheme. Sly
1962 features a functional reactive programming interface and live coding
1963 capabilities.")
1964 (home-page "https://dthompson.us/projects/sly.html")
1965 (license license:gpl3+)))
1966
1967 (define-public guile-g-golf
1968 (let ((commit "1824633d37da3794f349d6829e9dac2cf89adaa8")
1969 (revision "1010"))
1970 (package
1971 (name "guile-g-golf")
1972 (version (git-version "0.1.0" revision commit))
1973 (source
1974 (origin
1975 (method git-fetch)
1976 (uri (git-reference
1977 (url "https://git.savannah.gnu.org/git/g-golf.git")
1978 (commit commit)))
1979 (file-name (git-file-name name version))
1980 (sha256
1981 (base32 "0ncpqv6pbsx9fjmdzvzbjljnhqgw9pynqy9vr9aq35nb7rzrhfdf"))))
1982 (build-system gnu-build-system)
1983 (arguments
1984 (list
1985 #:configure-flags
1986 #~(list "--with-guile-site=no")
1987 #:phases
1988 #~(modify-phases %standard-phases
1989 (add-after 'unpack 'fix-guile-site-directory
1990 (lambda _
1991 (substitute* "configure.ac"
1992 (("SITEDIR=.*$")
1993 "SITEDIR=\"$datadir/guile/site/$GUILE_EFFECTIVE_VERSION\";\n")
1994 (("SITECCACHEDIR=\"\\$libdir/g-golf/")
1995 "SITECCACHEDIR=\"$libdir/"))))
1996 (add-before 'configure 'tests-work-arounds
1997 (lambda* (#:key inputs #:allow-other-keys)
1998 ;; In build environment, There is no /dev/tty
1999 (substitute* "test-suite/tests/gobject.scm"
2000 (("/dev/tty") "/dev/null"))))
2001 (add-before 'configure 'substitute-libs
2002 (lambda* (#:key inputs outputs #:allow-other-keys)
2003 (define (get lib)
2004 (search-input-file inputs (string-append "lib/" lib ".so")))
2005
2006 (let* ((libgi (get "libgirepository-1.0"))
2007 (libglib (get "libglib-2.0"))
2008 (libgobject (get "libgobject-2.0"))
2009 (libg-golf (string-append #$output "/lib/libg-golf")))
2010 (substitute* "g-golf/init.scm"
2011 (("libgirepository-1.0") libgi)
2012 (("libglib-2.0") libglib)
2013 (("libgobject-2.0") libgobject)
2014 (("\\(dynamic-link \"libg-golf\"\\)")
2015 (format #f "~s"
2016 `(catch #t
2017 (lambda ()
2018 (dynamic-link "libg-golf"))
2019 (lambda _
2020 (dynamic-link ,libg-golf))))))
2021 (setenv "GUILE_AUTO_COMPILE" "0")
2022 #t)))
2023 (add-before 'check 'start-xorg-server
2024 (lambda* (#:key inputs #:allow-other-keys)
2025 ;; The test suite requires a running X server.
2026 (system "Xvfb :1 &")
2027 (setenv "DISPLAY" ":1")
2028 #t)))))
2029 (inputs
2030 (list guile-3.0 guile-lib glib))
2031 (native-inputs
2032 (list autoconf
2033 automake
2034 texinfo
2035 gettext-minimal
2036 libtool
2037 pkg-config
2038 ;; required for tests
2039 gtk+
2040 clutter
2041 xorg-server-for-tests))
2042 (propagated-inputs
2043 (list gobject-introspection))
2044 (home-page "https://www.gnu.org/software/g-golf/")
2045 (synopsis "Guile bindings for GObject Introspection")
2046 (description
2047 "G-Golf (Gnome: (Guile Object Library for)) is a library for developing
2048 modern applications in Guile Scheme. It comprises a direct binding to the
2049 GObject Introspection API and higher-level functionality for importing Gnome
2050 libraries and making GObject classes (and methods) available in Guile's
2051 object-oriented programming system, GOOPS.")
2052 (license license:lgpl3+))))
2053
2054 (define-public g-golf
2055 (deprecated-package "g-golf" guile-g-golf))
2056
2057 (define-public guile2.2-g-golf
2058 (package
2059 (inherit guile-g-golf)
2060 (name "guile2.2-g-golf")
2061 (inputs
2062 (modify-inputs (package-inputs guile-g-golf)
2063 (replace "guile" guile-2.2)
2064 (replace "guile-lib" guile2.2-lib)))))
2065
2066 (define-public g-wrap
2067 (package
2068 (name "g-wrap")
2069 (version "1.9.15")
2070 (source (origin
2071 (method url-fetch)
2072 (uri (string-append "mirror://savannah/g-wrap/g-wrap-"
2073 version ".tar.gz"))
2074 (sha256
2075 (base32
2076 "0ak0bha37dfpj9kmyw1r8fj8nva639aw5xr66wr5gd3l1rqf5xhg"))))
2077 (build-system gnu-build-system)
2078 (native-inputs
2079 (list pkg-config))
2080 (propagated-inputs
2081 (list guile-2.2 guile-lib))
2082 (inputs
2083 (list libffi))
2084 (arguments
2085 `(#:configure-flags '("--disable-Werror")
2086 #:phases
2087 (modify-phases %standard-phases
2088 (add-before 'configure 'pre-configure
2089 (lambda* (#:key outputs #:allow-other-keys)
2090 (let ((out (assoc-ref outputs "out")))
2091 (substitute* (find-files "." "^Makefile.in$")
2092 (("guilemoduledir =.*guile/site" all)
2093 (string-append all "/@GUILE_EFFECTIVE_VERSION@")))
2094 #t))))))
2095 (synopsis "Generate C bindings for Guile")
2096 (description "G-Wrap is a tool and Guile library for generating function
2097 wrappers for inter-language calls. It currently only supports generating Guile
2098 wrappers for C functions. Given a definition of the types and prototypes for
2099 a given C interface, G-Wrap will automatically generate the C code that
2100 provides access to that interface and its types from the Scheme level.")
2101 (home-page "https://www.nongnu.org/g-wrap/index.html")
2102 (license license:lgpl2.1+)))
2103
2104 (define-public guile-miniadapton
2105 (let ((commit "1b5749422304567c96ac5367f2221dda9eff5880")
2106 (revision "1"))
2107 (package
2108 (name "guile-miniadapton")
2109 (version (string-append "0-" revision "." (string-take commit 9)))
2110 (source (origin
2111 (method git-fetch)
2112 (uri (git-reference
2113 (url "https://github.com/fisherdj/miniAdapton")
2114 (commit commit)))
2115 (file-name (string-append name "-" version "-checkout"))
2116 (sha256
2117 (base32
2118 "09q51zkw2fypad5xixskfzw2cjhjgs5cswdp3i7cpp651rb3zndh"))))
2119 (build-system guile-build-system)
2120 (native-inputs
2121 (list guile-2.2))
2122 (home-page "https://github.com/fisherdj/miniAdapton")
2123 (synopsis "Minimal implementation of incremental computation in Guile
2124 Scheme")
2125 (description "This package provides a complete Scheme implementation of
2126 miniAdapton, which implements the core functionality of the Adapton system for
2127 incremental computation (also known as self-adjusting computation). Like
2128 Adapton, miniAdapton allows programmers to safely combine mutation and
2129 memoization. miniAdapton is built on top of an even simpler system,
2130 microAdapton. Both miniAdapton and microAdapton are designed to be easy to
2131 understand, extend, and port to host languages other than Scheme.")
2132 (license license:expat))))
2133
2134 (define-public guile-raw-strings
2135 (let ((commit "aa1cf783f2542811b473f797e12490920b779baa")
2136 (revision "0"))
2137 (package
2138 (name "guile-raw-strings")
2139 (version (git-version "0.0.0" revision commit))
2140 (source (origin
2141 (method git-fetch)
2142 (uri (git-reference
2143 (url "https://github.com/lloda/guile-raw-strings")
2144 (commit commit)))
2145 (file-name (git-file-name name version))
2146 (sha256
2147 (base32
2148 "1r2gx86zw5hb6byllra3nap3fw9p7q7rvdmg6qn9myrdxyjpns3l"))))
2149 (build-system guile-build-system)
2150 (arguments
2151 `(#:phases
2152 (modify-phases %standard-phases
2153 (add-after 'build 'check
2154 (lambda* (#:key tests? #:allow-other-keys)
2155 (when tests?
2156 (invoke "guile" "-L" "." "-s" "test.scm")))))))
2157 (native-inputs
2158 (list guile-3.0))
2159 (home-page "https://github.com/lloda/guile-raw-strings")
2160 (synopsis "Guile reader extension for `raw strings'")
2161 (description "This package provides A Guile reader extension for `raw
2162 strings', it lets you write verbatim strings without having to escape double
2163 quotes.")
2164 (license license:public-domain))))
2165
2166 (define-public guile-reader
2167 (package
2168 (name "guile-reader")
2169 (version "0.6.3")
2170 (source (origin
2171 (method url-fetch)
2172 (uri (string-append "mirror://savannah/guile-reader/guile-reader-"
2173 version ".tar.gz"))
2174 (sha256
2175 (base32
2176 "1fyjckmygkhq22lq8nqc86yl5zzbqd7a944dnz5c1f6vx92b9hiq"))))
2177 (build-system gnu-build-system)
2178 (native-inputs (list pkg-config gperf))
2179 (inputs (list guile-3.0))
2180 (synopsis "Framework for building readers for GNU Guile")
2181 (description
2182 "Guile-Reader is a simple framework for building readers for GNU Guile.
2183
2184 The idea is to make it easy to build procedures that extend Guile’s read
2185 procedure. Readers supporting various syntax variants can easily be written,
2186 possibly by re-using existing “token readers” of a standard Scheme
2187 readers. For example, it is used to implement Skribilo’s R5RS-derived
2188 document syntax.
2189
2190 Guile-Reader’s approach is similar to Common Lisp’s “read table”, but
2191 hopefully more powerful and flexible (for instance, one may instantiate as
2192 many readers as needed).")
2193 (home-page "https://www.nongnu.org/guile-reader/")
2194 (license license:gpl3+)))
2195
2196 (define-public guile2.2-reader
2197 (package
2198 (inherit guile-reader)
2199 (name "guile2.2-reader")
2200 (inputs (list guile-2.2))))
2201
2202 (define-public guile-ncurses
2203 (package
2204 (name "guile-ncurses")
2205 (version "3.0")
2206 (source (origin
2207 (method url-fetch)
2208 (uri (string-append "mirror://gnu/guile-ncurses/guile-ncurses-"
2209 version ".tar.gz"))
2210 (sha256
2211 (base32
2212 "038xbffalhymg26lvmzgf7ljilxz2f2zmqg5r5nfzbipfbprwjhf"))))
2213 (build-system gnu-build-system)
2214 (inputs (list ncurses guile-3.0))
2215 (native-inputs (list pkg-config))
2216 (arguments
2217 `(#:modules ((guix build gnu-build-system)
2218 ((guix build guile-build-system)
2219 #:select (target-guile-effective-version))
2220 (guix build utils))
2221 #:imported-modules ((guix build guile-build-system)
2222 ,@%gnu-build-system-modules)
2223 #:configure-flags (list "--with-ncursesw" ; Unicode support
2224 "--with-gnu-filesystem-hierarchy")
2225 #:phases
2226 (modify-phases %standard-phases
2227 (add-before 'build 'fix-libguile-ncurses-file-name
2228 (lambda* (#:key outputs #:allow-other-keys)
2229 (invoke "make" "install"
2230 "-C" "src/ncurses"
2231 "-j" (number->string
2232 (parallel-job-count)))
2233 (let* ((out (assoc-ref outputs "out"))
2234 (dir "src/ncurses")
2235 (files (find-files dir ".scm")))
2236 (substitute* files
2237 (("\"libguile-ncurses\"")
2238 (format #f "\"~a/lib/guile/~a/libguile-ncurses\""
2239 out (target-guile-effective-version))))
2240 #t))))))
2241 (home-page "https://www.gnu.org/software/guile-ncurses/")
2242 (synopsis "Guile bindings to ncurses")
2243 (description
2244 "guile-ncurses provides Guile language bindings for the ncurses
2245 library.")
2246 (license license:lgpl3+)))
2247
2248 (define-public guile2.2-ncurses
2249 (package
2250 (inherit guile-ncurses)
2251 (name "guile2.2-ncurses")
2252 (inputs (list ncurses guile-2.2))))
2253
2254 (define-public guile-ncurses/gpm
2255 (package
2256 (inherit guile-ncurses)
2257 (name "guile-ncurses-with-gpm")
2258 (inputs `(("ncurses" ,ncurses/gpm)
2259 ("guile" ,guile-3.0)))))
2260
2261 (define-public guile-lib
2262 (package
2263 (name "guile-lib")
2264 (version "0.2.7")
2265 (source (origin
2266 (method url-fetch)
2267 (uri (string-append "mirror://savannah/guile-lib/guile-lib-"
2268 version ".tar.gz"))
2269 (sha256
2270 (base32
2271 "1ph4z4a64m75in36pdb4dw63dzdq3hdgh16gq33q460jby23pvz4"))))
2272 (build-system gnu-build-system)
2273 (arguments
2274 '(#:make-flags '("GUILE_AUTO_COMPILE=0") ;placate guild warnings
2275 #:phases
2276 (modify-phases %standard-phases
2277 (add-before 'configure 'patch-module-dir
2278 (lambda _
2279 (substitute* "src/Makefile.in"
2280 (("^moddir = ([[:graph:]]+)")
2281 "moddir = $(datadir)/guile/site/@GUILE_EFFECTIVE_VERSION@\n")
2282 (("^godir = ([[:graph:]]+)")
2283 "godir = \
2284 $(libdir)/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n")))))))
2285 (native-inputs
2286 `(("autoconf" ,autoconf)
2287 ("automake" ,automake)
2288 ("gettext" ,gettext-minimal)
2289 ("guile" ,guile-3.0)
2290 ("pkg-config" ,pkg-config)))
2291 (inputs
2292 (list guile-3.0)) ;for cross-compilation
2293 (home-page "https://www.nongnu.org/guile-lib/")
2294 (synopsis "Collection of useful Guile Scheme modules")
2295 (description
2296 "Guile-Lib is intended as an accumulation place for pure-scheme Guile
2297 modules, allowing for people to cooperate integrating their generic Guile
2298 modules into a coherent library. Think \"a down-scaled, limited-scope CPAN
2299 for Guile\". It provides the following modules:
2300 +@itemize
2301 +@item (apicheck) Describe and verify library programming interfaces.
2302 +@item (config load) Loading configuration files.
2303 +@item (container async-queue) A thread-safe message queue.
2304 +@item (container nodal-tree) A tree consisting of nodes with attributes.
2305 +@item (container delay-tree) A nodal tree with lazily evaluated fields.
2306 +@item (debugging assert) Helpful assert macro.
2307 +@item (debugging time) A simple macro to time the execution of an expression.
2308 +@item (graph topological-sort) Routines to perform topological sorts.
2309 +@item (htmlprag) Neil Van Dyke's permissive (\"pragmatic\") HTML parser.
2310 +@item (io string) SLIB's IO routines dealing with strings.
2311 +@item (logging logger) A flexible logging system.
2312 +@item (logging port-log) A logger that outputs to a port.
2313 +@item (logging rotating-log) A logger that rotates its output files.
2314 +@item (match-bind) Nifty and concise regular expression routines.
2315 +@item (math minima) A golden-section minimum finder.
2316 +@item (math primes) Functions related to prime numbers and factorization.
2317 +@item (os process) Spawning processes and capturing their output.
2318 +@item (scheme documentation) Macros to define different kinds of variables
2319 +with documentation.
2320 +@item (scheme kwargs) Defining functions with flexible keyword arguments.
2321 +@item (search basic) Classic search functions.
2322 +@item (string completion) Building blocks for tab completion.
2323 +@item (string soundex) The SOUNDEX string categorization algorithm.
2324 +@item (string transform) Beyond SRFI-13.
2325 +@item (string wrap) A versatile string formatter.
2326 +@item (term ansi-color) Generate ANSI color escape sequences.
2327 +@item (unit-test) A JUnit-style unit testing framework.
2328 +@end itemize")
2329 ;; The whole is under GPLv3+, but some modules are under laxer
2330 ;; distribution terms such as LGPL and public domain. See `COPYING' for
2331 ;; details.
2332 (license license:gpl3+)))
2333
2334 (define-public guile2.0-lib
2335 (package
2336 (inherit guile-lib)
2337 (name "guile2.0-lib")
2338 (native-inputs
2339 (alist-replace "guile" (list guile-2.0)
2340 (package-native-inputs guile-lib)))
2341 (inputs
2342 (alist-replace "guile" (list guile-2.0)
2343 (package-inputs guile-lib)))))
2344
2345 (define-public guile2.2-lib
2346 (package
2347 (inherit guile-lib)
2348 (name "guile2.2-lib")
2349 (native-inputs
2350 (alist-replace "guile" (list guile-2.2)
2351 (package-native-inputs guile-lib)))
2352 (inputs
2353 (alist-replace "guile" (list guile-2.2)
2354 (package-inputs guile-lib)))))
2355
2356 (define-public guile-minikanren
2357 (package
2358 (name "guile-minikanren")
2359 (version "20150424.e844d85")
2360 (source (origin
2361 (method git-fetch)
2362 (uri (git-reference
2363 (url "https://github.com/ijp/minikanren")
2364 (commit "e844d85512f8c055d3f96143ee506007389a25e3")))
2365 (file-name (string-append name "-" version "-checkout"))
2366 (sha256
2367 (base32
2368 "0r50jlpzi940jlmxyy3ddqqwmj5r12gb4bcv0ssini9v8km13xz6"))))
2369 (build-system guile-build-system)
2370 (native-inputs
2371 (list guile-3.0))
2372 (home-page "https://github.com/ijp/minikanren")
2373 (synopsis "MiniKanren declarative logic system, packaged for Guile")
2374 (description
2375 "MiniKanren is a relational programming extension to the Scheme
2376 programming Language, written as a smaller version of Kanren suitable for
2377 pedagogical purposes. It is featured in the book, The Reasoned Schemer,
2378 written by Dan Friedman, William Byrd, and Oleg Kiselyov.
2379
2380 This is Ian Price's r6rs packaged version of miniKanren, which deviates
2381 slightly from miniKanren mainline.
2382
2383 See http://minikanren.org/ for more on miniKanren generally.")
2384 (license license:expat)))
2385
2386 (define-public guile2.0-minikanren
2387 (package
2388 (inherit guile-minikanren)
2389 (name "guile2.0-minikanren")
2390 (native-inputs (list guile-2.0))))
2391
2392 (define-public guile2.2-minikanren
2393 (package
2394 (inherit guile-minikanren)
2395 (name "guile2.2-minikanren")
2396 (native-inputs (list guile-2.2))))
2397
2398 (define-public guile-irregex
2399 (package
2400 (name "guile-irregex")
2401 (version "0.9.6")
2402 (source (origin
2403 (method url-fetch)
2404 (uri (string-append
2405 "http://synthcode.com/scheme/irregex/irregex-"
2406 version ".tar.gz"))
2407 (sha256
2408 (base32
2409 "1ia3m7dp3lcxa048q0gqbiwwsyvn99baw6xkhb4bhhzn4k7bwyqq"))))
2410 (build-system guile-build-system)
2411 (arguments
2412 '(#:phases (modify-phases %standard-phases
2413 (add-after 'unpack 'move-files-around
2414 (lambda _
2415 ;; Move the relevant source files to src/ and create the
2416 ;; rx/ directory to match the expected module hierarchy.
2417 (mkdir-p "src/rx/source")
2418 (rename-file "irregex-guile.scm"
2419 "src/rx/irregex.scm")
2420 (rename-file "irregex.scm"
2421 "src/rx/source/irregex.scm")
2422 ;; Not really reachable via guile's packaging system,
2423 ;; but nice to have around.
2424 (rename-file "irregex-utils.scm"
2425 "src/rx/source/irregex-utils.scm")
2426 #t)))
2427 #:source-directory "src"))
2428 (native-inputs
2429 (list guile-3.0))
2430 (home-page "http://synthcode.com/scheme/irregex")
2431 (synopsis "S-expression based regular expressions")
2432 (description
2433 "Irregex is an s-expression based alternative to your classic
2434 string-based regular expressions. It implements SRFI 115 and is deeply
2435 inspired by the SCSH regular expression system.")
2436 (license license:bsd-3)))
2437
2438 (define-public guile2.0-irregex
2439 (package
2440 (inherit guile-irregex)
2441 (name "guile2.0-irregex")
2442 (native-inputs (list guile-2.0))))
2443
2444 (define-public guile2.2-irregex
2445 (package
2446 (inherit guile-irregex)
2447 (name "guile2.2-irregex")
2448 (native-inputs (list guile-2.2))))
2449
2450 (define-public haunt
2451 (package
2452 (name "haunt")
2453 (version "0.2.6")
2454 (source (origin
2455 (method url-fetch)
2456 (uri (string-append "https://files.dthompson.us/haunt/haunt-"
2457 version ".tar.gz"))
2458 (sha256
2459 (base32
2460 "1nwhwngx0gl2892vrvrzrxy5w6a5l08j1w0522kdh9a3v11qpwmw"))))
2461 (build-system gnu-build-system)
2462 (arguments
2463 `(#:modules ((ice-9 match) (ice-9 ftw)
2464 ,@%gnu-build-system-modules)
2465 #:tests? #f ; test suite is non-deterministic :(
2466 #:phases (modify-phases %standard-phases
2467 (add-after 'install 'wrap-haunt
2468 (lambda* (#:key inputs outputs #:allow-other-keys)
2469 ;; Wrap the 'haunt' command to refer to the right
2470 ;; modules.
2471 (let* ((out (assoc-ref outputs "out"))
2472 (bin (string-append out "/bin"))
2473 (site (string-append
2474 out "/share/guile/site"))
2475 (guile-reader (assoc-ref inputs "guile-reader"))
2476 (deps `(,@(if guile-reader
2477 (list guile-reader)
2478 '())
2479 ,(assoc-ref inputs "guile-commonmark"))))
2480 (match (scandir site)
2481 (("." ".." version)
2482 (let ((modules (string-append site "/" version))
2483 (compiled-modules (string-append
2484 out "/lib/guile/" version
2485 "/site-ccache")))
2486 (wrap-program (string-append bin "/haunt")
2487 `("GUILE_LOAD_PATH" ":" prefix
2488 (,modules
2489 ,@(map (lambda (dep)
2490 (string-append dep
2491 "/share/guile/site/"
2492 version))
2493 deps)))
2494 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
2495 (,compiled-modules
2496 ,@(map (lambda (dep)
2497 (string-append dep "/lib/guile/"
2498 version
2499 "/site-ccache"))
2500 deps))))
2501 #t)))))))))
2502 (native-inputs
2503 (list pkg-config texinfo))
2504 (inputs
2505 ;; Depend on the latest Guile to avoid bytecode compatibility issues when
2506 ;; using modules built against the latest version.
2507 (list guile-3.0-latest))
2508 (propagated-inputs
2509 (list guile-reader guile-commonmark))
2510 (synopsis "Functional static site generator")
2511 (description "Haunt is a static site generator written in Guile
2512 Scheme. Haunt features a functional build system and an extensible
2513 interface for reading articles in any format.")
2514 (home-page "https://dthompson.us/projects/haunt.html")
2515 (license license:gpl3+)))
2516
2517 (define-public guile2.2-haunt
2518 (package
2519 (inherit haunt)
2520 (name "guile2.2-haunt")
2521 (inputs (list guile-2.2))
2522 (propagated-inputs
2523 `(("guile-reader" ,guile2.2-reader)
2524 ("guile-commonmark" ,guile2.2-commonmark)))))
2525
2526 (define-public guile2.0-haunt
2527 (package
2528 (inherit haunt)
2529 (name "guile2.0-haunt")
2530 (inputs (list guile-2.0))))
2531
2532 (define-public guile-redis
2533 (package
2534 (name "guile-redis")
2535 (version "2.2.0")
2536 (home-page "https://github.com/aconchillo/guile-redis")
2537 (source (origin
2538 (method git-fetch)
2539 (uri (git-reference
2540 (url home-page)
2541 (commit version)))
2542 (file-name (git-file-name name version))
2543 (sha256
2544 (base32
2545 "0cb31vj88f3hj93v1lzxcqjyz7ym2gmpk31gv5i2dqv721frnlyj"))))
2546 (build-system gnu-build-system)
2547 (arguments
2548 '(#:make-flags '("GUILE_AUTO_COMPILE=0")))
2549 (native-inputs
2550 (list autoconf automake pkg-config guile-3.0))
2551 (synopsis "Redis client library for Guile")
2552 (description "Guile-redis provides a Scheme interface to the Redis
2553 key-value cache and store.")
2554 (license license:lgpl3+)))
2555
2556 (define-public guile2.2-redis
2557 (package
2558 (inherit guile-redis)
2559 (name "guile2.2-redis")
2560 (native-inputs (modify-inputs (package-native-inputs guile-redis)
2561 (replace "guile" guile-2.2)))))
2562
2563 (define-public guile2.0-redis
2564 (package
2565 (inherit guile-redis)
2566 (name "guile2.0-redis")
2567 (arguments
2568 `(#:phases
2569 (modify-phases %standard-phases
2570 (add-after 'unpack 'patch-source
2571 (lambda _
2572 ;; put-string is in (rnrs io ports) in guile2.0,
2573 ;; not in (ice-9 textual-ports)
2574 (substitute* "redis/utils.scm"
2575 (("\\(ice-9 textual-ports\\)")
2576 "(rnrs io ports)"))
2577 #t)))
2578 ,@(package-arguments guile-redis)))
2579 (native-inputs (modify-inputs (package-native-inputs guile-redis)
2580 (replace "guile" guile-2.0)))))
2581
2582 (define-public guile-commonmark
2583 (package
2584 (name "guile-commonmark")
2585 (version "0.1.2")
2586 (source (origin
2587 (method url-fetch)
2588 (uri (string-append "https://github.com/OrangeShark/" name
2589 "/releases/download/v" version
2590 "/" name "-" version ".tar.gz"))
2591 (sha256
2592 (base32
2593 "17lrsdisa3kckh24q114vfmzdc4wkqa6ccwl4hdlrng5wpn1iman"))
2594 (modules '((guix build utils)))
2595 (snippet
2596 '(begin
2597 ;; Allow builds with Guile 3.0.
2598 (substitute* "configure"
2599 (("2\\.2 2\\.0")
2600 "3.0 2.2 2.0"))
2601 #t))))
2602 (build-system gnu-build-system)
2603 ;; The tests throw exceptions with Guile 3.0.5, because they evaluate
2604 ;; (exit ...).
2605 ;;
2606 ;; This has been fixed upstream, but there has not been a new release
2607 ;; containing this change.
2608 (arguments
2609 '(#:phases
2610 (modify-phases %standard-phases
2611 (add-after 'unpack 'fix-tests-when-building-with-guile-3.0.5
2612 (lambda _
2613 (substitute* (find-files "tests" "\\.scm$")
2614 (("\\(exit.*") ""))
2615 #t)))))
2616 (inputs
2617 (list guile-3.0))
2618 (native-inputs
2619 (list pkg-config))
2620 (synopsis "CommonMark parser for Guile")
2621 (description
2622 "guile-commonmark is a library for parsing CommonMark, a fully specified
2623 variant of Markdown. The library is written in Guile Scheme and is designed
2624 to transform a CommonMark document to SXML. guile-commonmark tries to closely
2625 follow the @uref{http://commonmark.org/, CommonMark spec}, the main difference
2626 is no support for parsing block and inline level HTML.")
2627 (home-page "https://github.com/OrangeShark/guile-commonmark")
2628 (license license:lgpl3+)))
2629
2630 (define-public guile2.2-commonmark
2631 (package
2632 (inherit guile-commonmark)
2633 (name "guile2.2-commonmark")
2634 (inputs (list guile-2.2))))
2635
2636 (define-public guile2.0-commonmark
2637 (package
2638 (inherit guile-commonmark)
2639 (name "guile2.0-commonmark")
2640 (inputs (list guile-2.0))))
2641
2642 (define-public mcron
2643 (package
2644 (name "mcron")
2645 (version "1.2.1")
2646 (source (origin
2647 (method url-fetch)
2648 (uri (string-append "mirror://gnu/mcron/mcron-"
2649 version ".tar.gz"))
2650 (sha256
2651 (base32
2652 "0bkn235g2ia4f7ispr9d55c7bc18282r3qd8ldhh5q2kiin75zi0"))))
2653 (build-system gnu-build-system)
2654 (arguments
2655 '(#:phases (modify-phases %standard-phases
2656 (add-before 'check 'adjust-tests
2657 (lambda _
2658 (substitute* "tests/job-specifier.scm"
2659 ;; (getpw) fails with "entry not found" in the build
2660 ;; environment, so pass an argument.
2661 (("\\(getpw\\)")
2662 "(getpwnam (getuid))")
2663 ;; The build environment lacks an entry for root in
2664 ;; /etc/passwd.
2665 (("\\(getpw 0\\)")
2666 "(getpwnam \"nobody\")")
2667
2668 ;; FIXME: Skip the 4 faulty tests (see above).
2669 (("\\(test-equal \"next-year\"" all)
2670 (string-append "(test-skip 4)\n" all)))
2671 #t)))))
2672 (native-inputs `(("pkg-config" ,pkg-config)
2673 ("tzdata" ,tzdata-for-tests)
2674 ("guile-native" ;for 'guild compile'
2675 ,@(assoc-ref (package-inputs this-package) "guile"))))
2676 (inputs (list guile-3.0))
2677 (home-page "https://www.gnu.org/software/mcron/")
2678 (synopsis "Run jobs at scheduled times")
2679 (description
2680 "GNU Mcron is a complete replacement for Vixie cron. It is used to run
2681 tasks on a schedule, such as every hour or every Monday. Mcron is written in
2682 Guile, so its configuration can be written in Scheme; the original cron
2683 format is also supported.")
2684 (license license:gpl3+)))
2685
2686 (define-public guile2.2-mcron
2687 (package
2688 (inherit mcron)
2689 (name "guile2.2-mcron")
2690 (inputs (list guile-2.2))))
2691
2692 (define-public guile-picture-language
2693 (let ((commit "a1322bf11945465241ca5b742a70893f24156d12")
2694 (revision "5"))
2695 (package
2696 (name "guile-picture-language")
2697 (version (git-version "0.0.1" revision commit))
2698 (source (origin
2699 (method git-fetch)
2700 (uri (git-reference
2701 (url "https://git.elephly.net/software/guile-picture-language.git")
2702 (commit commit)))
2703 (file-name (git-file-name name version))
2704 (sha256
2705 (base32
2706 "03i528z92ainccgm28shg4haxiav5x4cyhyi5dggq1rm027vbm99"))))
2707 (build-system gnu-build-system)
2708 (inputs
2709 (list guile-3.0))
2710 (propagated-inputs
2711 (list guile-cairo guile-rsvg))
2712 (native-inputs
2713 (list autoconf automake librsvg pkg-config texinfo))
2714 (home-page "https://git.elephly.net/software/guile-picture-language.git")
2715 (synopsis "Picture language for Guile")
2716 (description
2717 "This package provides a simple SVG-based picture language for Guile.
2718 The picture values can directly be displayed in Geiser.")
2719 ;; (pict base64) is under GPLv3+, the rest is under LGPLv3+
2720 (license (list license:lgpl3+
2721 license:gpl3+)))))
2722
2723 (define-public guile2.2-picture-language
2724 (package
2725 (inherit guile-picture-language)
2726 (name "guile2.2-picture-language")
2727 (inputs (list guile-2.2))
2728 (propagated-inputs
2729 (list guile2.2-cairo guile2.2-rsvg))))
2730
2731 (define-public guile-studio
2732 (let ((commit "dd0ad42e51feafebda7cc29afe7c8bc7a182a842")
2733 (revision "1"))
2734 (package
2735 (name "guile-studio")
2736 (version (git-version "0.1.1" revision commit))
2737 (source (origin
2738 (method git-fetch)
2739 (uri (git-reference
2740 (url "https://git.elephly.net/software/guile-studio.git")
2741 (commit commit)))
2742 (file-name (git-file-name name version))
2743 (sha256
2744 (base32
2745 "1cpqilly8dqmai1qsgjxy99zs34sfz95zwxhzx979wryqb69vi0q"))))
2746 (build-system gnu-build-system)
2747 (arguments
2748 `(#:modules
2749 ((ice-9 match)
2750 (srfi srfi-1)
2751 ,@%gnu-build-system-modules)
2752 #:tests? #f ; there are none
2753 #:make-flags
2754 (list (string-append "PICT_DIR="
2755 (assoc-ref %build-inputs "guile-picture-language"))
2756 (string-append "EMACS_DIR="
2757 (assoc-ref %build-inputs "emacs"))
2758 (string-append "GUILE_DIR="
2759 (assoc-ref %build-inputs "guile"))
2760 (string-join (cons "INPUTS="
2761 (filter-map
2762 (lambda (input)
2763 (match input
2764 ((label . pkg)
2765 (and (string-prefix? "emacs" label) pkg))))
2766 %build-inputs)))
2767 (string-append "PREFIX=" (assoc-ref %outputs "out")))
2768 #:phases
2769 (modify-phases %standard-phases
2770 (delete 'configure)
2771 (delete 'install))))
2772 (inputs
2773 (list guile-3.0
2774 guile-picture-language
2775 emacs
2776 emacs-f ; needed by doom-modeline
2777 emacs-memoize ; needed by all-the-icons
2778 emacs-all-the-icons ; needed by doom-modeline
2779 emacs-all-the-icons-dired
2780 emacs-dired-sidebar
2781 emacs-doom-modeline
2782 emacs-modus-themes
2783 emacs-geiser
2784 emacs-geiser-guile
2785 emacs-company
2786 emacs-ivy
2787 emacs-flycheck
2788 emacs-flycheck-guile
2789 emacs-paren-face))
2790 (native-inputs
2791 (list texinfo))
2792 (home-page "https://gnu.org/software/guile")
2793 (synopsis "IDE for Guile")
2794 (description
2795 "This is Emacs with a few settings that make working with Guile easier
2796 for people new to Emacs. Features include: CUA mode, Geiser, tool bar icons
2797 to evaluate Guile buffers, support for Guile's very own picture language, code
2798 completion, a simple mode line, etc.")
2799 (license license:gpl3+))))
2800
2801 (define-public guile-stis-parser
2802 (package
2803 (name "guile-stis-parser")
2804 (version "1.2.4.1")
2805 (source (origin
2806 (method git-fetch)
2807 (uri (git-reference
2808 (url "https://gitlab.com/tampe/stis-parser")
2809 (commit (string-append "v" version))))
2810 (file-name (git-file-name name version))
2811 (sha256
2812 (base32
2813 "1fvxdfvc80zqhwzq5x3kxyr6j8p4b51yx85fx1gr3d4gy2ddpx5w"))))
2814 (build-system gnu-build-system)
2815 (arguments
2816 `(#:parallel-build? #f ; not supported
2817 #:phases
2818 (modify-phases %standard-phases
2819 (add-after 'unpack 'chdir
2820 (lambda _ (chdir "modules") #t))
2821 (add-after 'chdir 'delete-broken-symlink
2822 (lambda _
2823 (delete-file "parser/stis-parser/lang/.#calc.scm")
2824 #t)))))
2825 (inputs
2826 (list guile-3.0))
2827 (native-inputs
2828 (list autoconf automake pkg-config))
2829 (home-page "https://gitlab.com/tampe/stis-parser")
2830 (synopsis "Parser combinator framework")
2831 (description
2832 "This package provides a functional parser combinator library that
2833 supports backtracking and a small logical framework. The idea is to build up
2834 chunks that are memoized and there is no clear scanner/parser separation,
2835 chunks can be expressions as well as simple tokens.")
2836 (license license:lgpl2.0+)))
2837
2838 (define-public guile-persist
2839 (package
2840 (name "guile-persist")
2841 (version "1.2.3")
2842 (source (origin
2843 (method git-fetch)
2844 (uri (git-reference
2845 (url "https://gitlab.com/tampe/guile-persist")
2846 (commit (string-append "v" version))))
2847 (file-name (git-file-name name version))
2848 (sha256
2849 (base32
2850 "19f8hqcax4v40858kx2j8fy1cvzc2djj99r0n17dy1xxmwa097qi"))))
2851 (build-system gnu-build-system)
2852 (arguments
2853 `(#:phases
2854 (modify-phases %standard-phases
2855 (add-after 'unpack 'patch-prefix
2856 (lambda* (#:key inputs outputs #:allow-other-keys)
2857 (substitute* "src/Makefile.am"
2858 (("/usr/local/lib/guile")
2859 (string-append (assoc-ref outputs "out") "/lib/guile"))
2860 (("/usr/local/include/guile")
2861 (search-input-directory inputs "/include/guile"))
2862 (("-L/usr/local/lib")
2863 (string-append "-L" (assoc-ref inputs "guile") "/lib")))
2864 #t))
2865 (add-after 'unpack 'patch-library-reference
2866 (lambda* (#:key outputs #:allow-other-keys)
2867 (let ((out (assoc-ref outputs "out")))
2868 (substitute* "persist/persistance.scm"
2869 (("\"libguile-persist\"")
2870 (format #f "\"~a/lib/guile/3.0/extensions/libguile-persist\"" out)))
2871 #t))))))
2872 (inputs
2873 (list guile-3.0))
2874 (native-inputs
2875 (list autoconf automake libtool pkg-config))
2876 (home-page "https://gitlab.com/tampe/guile-persist")
2877 (synopsis "Persistence programming framework for Guile")
2878 (description
2879 "This is a serialization library for serializing objects like classes
2880 and objects, closures and structs. This currently does not support
2881 serializing continuations or delimited continuations.")
2882 (license license:lgpl2.0+)))
2883
2884 (define-public python-on-guile
2885 (package
2886 (name "python-on-guile")
2887 (version "1.2.3.5")
2888 (home-page "https://gitlab.com/python-on-guile/python-on-guile")
2889 (source (origin
2890 (method git-fetch)
2891 (uri (git-reference (url home-page)
2892 (commit (string-append "v" version))))
2893 (file-name (git-file-name name version))
2894 (sha256
2895 (base32
2896 "05xrvcj6a4gzq1ybyin270qz8wamgc7w2skyi9iy6hkpgdhxy8vf"))))
2897 (build-system gnu-build-system)
2898 (arguments
2899 `(#:parallel-build? #f ;not supported
2900 #:make-flags '("GUILE_AUTO_COMPILE=0") ;to prevent guild warnings
2901 #:phases
2902 (modify-phases %standard-phases
2903 (add-after 'unpack 'chdir
2904 (lambda _ (chdir "modules") #t))
2905 (add-after 'chdir 'augment-GUILE_LOAD_PATH
2906 (lambda _
2907 ;; TODO: It would be better to patch the Makefile.
2908 (setenv "GUILE_LOAD_PATH"
2909 (string-append ".:"
2910 (getenv "GUILE_LOAD_PATH")))
2911 #t))
2912 (add-after 'install 'wrap
2913 (lambda* (#:key outputs #:allow-other-keys)
2914 ;; Wrap the 'python' executable so it can find its
2915 ;; dependencies and own modules.
2916 (let* ((out (assoc-ref outputs "out"))
2917 (guile-version ,(version-major+minor
2918 (package-version guile-3.0)))
2919 (scm (string-append out "/share/guile/site/"
2920 guile-version))
2921 (ccache (string-append out "/lib/guile/" guile-version
2922 "/site-ccache"))
2923 (load-path (string-join
2924 (cons scm
2925 ;; XXX: cdr because we augment it above.
2926 (cdr (string-split
2927 (getenv "GUILE_LOAD_PATH") #\:)))
2928 ":"))
2929 (compiled-path (string-append
2930 ccache ":"
2931 (getenv "GUILE_LOAD_COMPILED_PATH"))))
2932 (wrap-program (string-append out "/bin/python")
2933 `("GUILE_LOAD_PATH" ":" prefix
2934 (,load-path))
2935 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
2936 (,compiled-path)))
2937 #t))))))
2938 (inputs
2939 (list guile-3.0 guile-persist guile-readline guile-stis-parser))
2940 (native-inputs
2941 (list autoconf automake libtool pkg-config))
2942 (synopsis "Python implementation in Guile")
2943 (description
2944 "This package allows you to compile a Guile Python file to any target
2945 from @code{tree-il}.")
2946 (license license:lgpl2.0+)))
2947
2948 (define-public guile-file-names
2949 (package
2950 (name "guile-file-names")
2951 (version "0.3")
2952 (source (origin
2953 (method url-fetch)
2954 (uri (string-append "http://brandon.invergo.net/software/download/"
2955 "guile-file-names/guile-file-names-"
2956 version ".tar.gz"))
2957 (sha256
2958 (base32
2959 "01chizdxkhw6aqv629vxka9f5x3534ij7r0jqndawsg2vxm1r9sz"))))
2960 (build-system gnu-build-system)
2961 (arguments
2962 `(#:phases
2963 (modify-phases %standard-phases
2964 (add-after 'unpack 'fix-target-directory
2965 (lambda _
2966 (substitute* "src/Makefile.in"
2967 (("guilemoddir = \\$\\(GUILE_SITE\\)")
2968 "guilemoddir = $(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
2969 #t)))))
2970 (inputs
2971 (list guile-2.2))
2972 (native-inputs
2973 (list pkg-config))
2974 (home-page "https://gitlab.com/brandoninvergo/guile-file-names")
2975 (synopsis "Manipulate file names")
2976 (description
2977 "The @code{(file-names)} module provides tools for manipulating file
2978 names. The module was built on the idea that doing anything more than a
2979 non-trivial modification of a file name string is a pain (making sure all
2980 slashes are present and accounted for, resolving @code{.} and @code{..}, etc).
2981 Inevitably, you have to break the string up into chunks and operate on that
2982 list of components. This module takes care of that for you.")
2983 (license license:lgpl3+)))
2984
2985 (define-public guile-gi
2986 (package
2987 (name "guile-gi")
2988 (version "0.3.2")
2989 (source (origin
2990 (method url-fetch)
2991 (uri (string-append "http://lonelycactus.com/tarball/guile_gi-"
2992 version ".tar.gz"))
2993 (sha256
2994 (base32
2995 "019mbhgyga57k2074kg97mh3qsa8ny9l0kjgqids8cg3c6vbjdby"))))
2996 (build-system glib-or-gtk-build-system)
2997 (arguments
2998 `(#:configure-flags '("--with-gnu-filesystem-hierarchy")
2999 #:modules ((guix build glib-or-gtk-build-system)
3000 (guix build utils)
3001 (ice-9 popen)
3002 (ice-9 rdelim))
3003 #:disallowed-references ,(list gtk+ webkitgtk)
3004 #:phases
3005 (modify-phases %standard-phases
3006 (add-after 'unpack 'remove-dotted-circle-from-combining-character
3007 ;; The test/string.scm files contain ◌̀, which is a dotted circle
3008 ;; (U+25cc) followed by an upper combining character (U+0300). The
3009 ;; old guile 3.0.2 reader incorrectly ignores the dotted circle,
3010 ;; and parses it as the combining character alone, but the new
3011 ;; guile reader does not.
3012 ;; See https://github.com/spk121/guile-gi/issues/112
3013 (lambda* _
3014 (substitute* "test/string.scm"
3015 (("#\\\\◌̀") "#\\x0300"))))
3016 (add-after 'unpack 'patch-references-to-extension
3017 (lambda* (#:key outputs #:allow-other-keys)
3018 (let ((effective (read-line
3019 (open-pipe* OPEN_READ
3020 "guile" "-c"
3021 "(display (effective-version))"))))
3022 (substitute* (find-files "module" ".*\\.scm")
3023 (("\\(load-extension \"libguile-gi\" \"(.*)\"\\)" m arg)
3024 (format #f "~s"
3025 `(load-extension
3026 (format #f "~alibguile-gi"
3027 (if (getenv "GUILE_GI_UNINSTALLED")
3028 ""
3029 ,(format #f "~a/lib/guile/~a/extensions/"
3030 (assoc-ref outputs "out")
3031 effective)))
3032 ,arg)))))
3033 (setenv "GUILE_GI_UNINSTALLED" "1")
3034 #t))
3035 (add-before 'check 'start-xorg-server
3036 (lambda* (#:key inputs #:allow-other-keys)
3037 ;; The init_check test requires a running X server.
3038 (system (format #f "~a/bin/Xvfb :1 &"
3039 (assoc-ref inputs "xorg-server")))
3040 (setenv "DISPLAY" ":1")
3041 #t)))))
3042 (native-inputs
3043 (list gettext-minimal
3044 `(,glib "bin") ; for glib-compile-resources
3045 libtool pkg-config xorg-server))
3046 (propagated-inputs (list gobject-introspection))
3047 (inputs (list guile-3.0 glib
3048 ;; For tests, only relevant when compiling natively
3049 gtk+ webkitgtk))
3050 (home-page "https://github.com/spk121/guile-gi")
3051 (synopsis "GObject bindings for Guile")
3052 (description
3053 "Guile-GI is a library for Guile that allows using GObject-based
3054 libraries, such as GTK+3. Its README comes with the disclaimer: This is
3055 pre-alpha code.")
3056 (license license:gpl3+)))
3057
3058 (define-public guile2.2-gi
3059 (package
3060 (inherit guile-gi)
3061 (name "guile2.2-gi")
3062 (inputs
3063 (modify-inputs (package-inputs guile-gi)
3064 (replace "guile" guile-2.2)))))
3065
3066 (define-public guile-srfi-89
3067 (package
3068 (name "guile-srfi-89")
3069 (version "0.0.1")
3070 (source
3071 (origin
3072 (method git-fetch)
3073 (uri (git-reference
3074 (url "https://gitlab.com/mjbecze/guile-srfi-89.git")
3075 (commit version)))
3076 (sha256
3077 (base32
3078 "1981c0rrzxqx3md9jx8ir7j3m2mzg9m72b33p5jvw36zirbzpl20"))
3079 (file-name (git-file-name name version))))
3080 (build-system guile-build-system)
3081 (native-inputs
3082 (list guile-3.0))
3083 (home-page "https://gitlab.com/mjbecze/guile-srfi-89")
3084 (synopsis "Hygienic implementation of SRFI-89 for Guile")
3085 (description
3086 "This package provides SRFI-89 optional positional and named
3087 parameters, which define* and lambda* special forms")
3088 (license license:gpl3+)))
3089
3090 (define-public guile-srfi-128
3091 (package
3092 (name "guile-srfi-128")
3093 (version "0.1.0")
3094 (source
3095 (origin
3096 (method git-fetch)
3097 (uri (git-reference
3098 (url "https://inqlab.net/git/guile-srfi-128.git")
3099 (commit (string-append "v" version))))
3100 (sha256
3101 (base32
3102 "03d85q5l2gc2c8cmri6zd4pfndvnadlhwh77hsx6ixvvm8vwq4sy"))
3103 (file-name (git-file-name name version))))
3104 (build-system guile-build-system)
3105 (native-inputs
3106 (list guile-3.0))
3107 (home-page "https://inqlab.net/git/guile-srfi-128.git")
3108 (synopsis "SRFI 128 Comparators (reduced) port for Guile")
3109 (description
3110 "This package provides an implementation of SRFI 128 for Guile.
3111 SRFI 128 defines comparators, which bundles a test type predicate, an
3112 equality predicate, an ordering predicate and a hash function into a
3113 single Scheme object. This can be used in the implementation of data
3114 structures. This package re-uses the SRFI sample implementation.")
3115 (license
3116 (list license:lgpl3+
3117 ;; contains ISC code from the SRFI sample implementation
3118 license:isc))))
3119
3120 (define-public guile-srfi-145
3121 (package
3122 (name "guile-srfi-145")
3123 (version "0.0.1")
3124 (source
3125 (origin
3126 (method git-fetch)
3127 (uri (git-reference
3128 (url "https://gitlab.com/mjbecze/guile-srfi-145.git")
3129 (commit version)))
3130 (sha256
3131 (base32
3132 "1gssa8cmcp8640fil9z8dpil8v5l279wlalqjcx3fls5jwv13q1b"))
3133 (file-name (git-file-name name version))))
3134 (build-system guile-build-system)
3135 (native-inputs
3136 (list guile-3.0))
3137 (home-page "https://gitlab.com/mjbecze/guile-srfi-145")
3138 (synopsis "SRFI-145 port for Guile")
3139 (description
3140 "This package provides SRFI-145. This provides the means to
3141 denote the invalidity of certain code paths in a Scheme program.")
3142 (license license:gpl3+)))
3143
3144 (define-public guile-srfi-146
3145 (package
3146 (name "guile-srfi-146")
3147 (version "0.1.0")
3148 (source
3149 (origin
3150 (method git-fetch)
3151 (uri (git-reference
3152 (url "https://inqlab.net/git/guile-srfi-146.git")
3153 (commit (string-append "v" version))))
3154 (sha256
3155 (base32
3156 "13dbzlav4fql8lcfr021z5368lwri6i15x0ykv8llzyghlbbx2w6"))
3157 (file-name (git-file-name name version))))
3158 (build-system gnu-build-system)
3159 (native-inputs
3160 (list guile-3.0
3161 guile-srfi-128 guile-srfi-145 guile-srfi-158
3162 autoconf automake pkg-config))
3163 (inputs (list guile-3.0))
3164 (propagated-inputs
3165 (list guile-srfi-128 guile-srfi-145 guile-srfi-158))
3166 (synopsis "SRFI 146 (Mappings) for Guile")
3167 (description
3168 "This package provides an implementation of SRFI 146 for Guile.
3169 SRFI 146 defines datastructures that implement mappings (finite sets
3170 of associations consiting of a key and a value). Two types of
3171 mappings are defined: One using a comparator to define an order on the
3172 keys and another using a hash function on the keys. The
3173 datastructures and procedures are by default purely-functional. This
3174 package re-uses the SRFI sample implementation that is based on
3175 red-black trees and Hash Array Mapped Trie (HAMT).")
3176 (home-page "https://inqlab.net/git/guile-srfi-146.git")
3177 (license
3178 (list license:lgpl3+
3179 ;; contains ISC code from the SRFI sample implementation
3180 license:isc))))
3181
3182 (define-public guile-srfi-158
3183 (let ((commit "13126d1ed37892c864337a600a43d6876625fb99")
3184 (revision "0"))
3185 (package
3186 (name "guile-srfi-158")
3187 (version (git-version "0.0.1" revision commit))
3188 (source
3189 (origin
3190 (method git-fetch)
3191 (uri (git-reference
3192 (url "https://gitlab.com/mjbecze/guile-srfi-158.git")
3193 (commit commit)))
3194 (sha256
3195 (base32
3196 "0hg57l3w5qamip1clkab0q01np5nqln9y054q39smm4ki0svdl8w"))
3197 (file-name (git-file-name name version))))
3198 (build-system gnu-build-system)
3199 (native-inputs
3200 (list guile-3.0 autoconf automake pkg-config))
3201 (inputs (list guile-3.0))
3202 (home-page "https://gitlab.com/samplet/guile-srfi-158")
3203 (synopsis "SRFI 158 (Generators and Accumulators) for Guile")
3204 (description "This package provides an implementation of SRFI 158
3205 for Guile. SRFI 158 defines utility procedures that create,
3206 transform, and consume generators. It also defines procedures that
3207 return accumulators. It is implemented by wrapping the sample
3208 implementation in a thin Guile compatibility layer.")
3209 (license license:gpl3+))))
3210
3211 (define-public guile-srfi-159
3212 (let ((commit "1bd98abda2ae4ef8f36761a167903e55c6bda7bb")
3213 (revision "0"))
3214 (package
3215 (name "guile-srfi-159")
3216 (version (git-version "0" revision commit))
3217 (home-page "https://bitbucket.org/bjoli/guile-srfi-159")
3218 (source (origin
3219 (method hg-fetch)
3220 (uri (hg-reference (changeset commit)
3221 (url home-page)))
3222 (sha256
3223 (base32
3224 "1zw6cmcy7xdbfiz3nz9arqnn7l2daidaps6ixkcrc9b6k51fdv3p"))
3225 (file-name (git-file-name name version))))
3226 (build-system guile-build-system)
3227 (arguments
3228 ;; The *-impl.scm files are actually included from module files; they
3229 ;; should not be compiled separately, but they must be installed.
3230 '(#:not-compiled-file-regexp "-impl\\.scm$"))
3231 (inputs
3232 (list guile-2.2))
3233 (synopsis "Formatting combinators for Guile")
3234 (description
3235 "The @code{(srfi-159)} module and its sub-modules implement the
3236 formatting combinators specified by
3237 @uref{https://srfi.schemers.org/srfi-159/srfi-159.html, SRFI-159}. These are
3238 more expressive and flexible than the traditional @code{format} procedure.")
3239 (license license:bsd-3))))
3240
3241 (define-public guile-srfi-180
3242 (let ((commit "9188bf9724c6d320ef804579d222e855b007b193")
3243 (revision "0"))
3244 (package
3245 (name "guile-srfi-180")
3246 (version (git-version "0" revision commit))
3247 (source
3248 (origin
3249 (method git-fetch)
3250 (uri (git-reference
3251 (url "https://github.com/scheme-requests-for-implementation/srfi-180")
3252 (commit commit)))
3253 (sha256
3254 (base32
3255 "08lf70rsak8mwfij55xc37pg9zg7c87fizmhz7ln46skzj68sl3y"))
3256 (modules '((guix build utils)))
3257 (snippet
3258 '(begin
3259 (delete-file-recursively "srfi/files")
3260 (delete-file "srfi/run-r7rs-checks.guile.scm")
3261 (delete-file "srfi/run-r7rs-checks.scm")
3262 (delete-file "srfi/check.scm")
3263 #t))
3264 (file-name (git-file-name name version))))
3265 (build-system guile-build-system)
3266 (arguments
3267 '(#:not-compiled-file-regexp "body\\.scm$"))
3268 (native-inputs
3269 (list guile-3.0))
3270 (propagated-inputs
3271 (list guile-srfi-145))
3272 (home-page "https://srfi.schemers.org/srfi-180/")
3273 (synopsis "JSON parser and printer for Guile")
3274 (description
3275 "This library implements a JavaScript Object Notation (JSON) parser and printer.
3276 It also supports parsing JSON objects that may be bigger than memory with a streaming
3277 API.")
3278 (license license:expat))))
3279
3280 (define-public guile-srfi-189
3281 (let ((commit "659e3cd0fc2bfca9085424eda8cad804ead2a9ea")
3282 (revision "1"))
3283 (package
3284 (name "guile-srfi-189")
3285 ;; 'final' is the name of the latest git tag.
3286 (version (git-version "final" revision commit))
3287 (source
3288 (origin
3289 (method git-fetch)
3290 (uri (git-reference
3291 (url "https://github.com/scheme-requests-for-implementation/srfi-189")
3292 (commit commit)))
3293 (sha256
3294 (base32
3295 "0iqv4sjwbp4k87r9l9abzbs5yjcljm69m91kb1ypb03b0rx7napy"))
3296 (modules '((guix build utils)))
3297 (snippet
3298 '(begin
3299 (delete-file "test-syntax.scm")
3300 (delete-file "test.scm")))
3301 (file-name (git-file-name name version))))
3302 (build-system guile-build-system)
3303 (arguments
3304 '(#:not-compiled-file-regexp "srfi/189\\.scm$")) ; it's INCLUDE'd
3305 (native-inputs
3306 (list guile-3.0))
3307 (propagated-inputs
3308 (list guile-srfi-145))
3309 (home-page "https://srfi.schemers.org/srfi-189/")
3310 (synopsis "Scheme SRFI implementation of Maybe and Either")
3311 (description
3312 "This SRFI defines two disjoint immutable container types known as
3313 Maybe and Either, both of which can contain objects collectively known
3314 as their payload. A Maybe object is either a Just object or the unique
3315 object Nothing (which has no payload); an Either object is either a Right
3316 object or a Left object. Maybe represents the concept of optional values;
3317 Either represents the concept of values which are either correct (Right)
3318 or errors (Left).")
3319 (license license:expat))))
3320
3321 (define-public emacsy
3322 (package
3323 (name "emacsy")
3324 (version "0.4.1")
3325 (source (origin
3326 (method url-fetch)
3327 (uri (string-append "mirror://savannah/emacsy/emacsy-"
3328 version ".tar.gz"))
3329 (sha256
3330 (base32
3331 "1cpb85dl1nibd34c2x2h7vfmjpkgh353p5b1w20v6cs6gmvgg4np"))
3332 (modules '((guix build utils)))
3333 (snippet
3334 '(begin
3335 (substitute* "configure"
3336 ;; Allow builds with Guile 3.0.
3337 (("2\\.2 2\\.0")
3338 "3.0 2.2 2.0")
3339
3340 ;; Freeglut 3.2 provides 'glut.pc', not 'freeglut.pc'.
3341 (("freeglut >= ")
3342 "glut >= "))
3343
3344 (substitute* '("emacsy/emacsy.c"
3345 "example/hello-emacsy.c")
3346 (("#include <libguile\\.h>")
3347 (string-append "#include <stdlib.h>\n"
3348 "#include <stdio.h>\n"
3349 "#include <string.h>\n"
3350 "#include <unistd.h>\n"
3351 "#include <libguile.h>\n")))))))
3352 (build-system gnu-build-system)
3353 (native-inputs
3354 `(("bzip2" ,bzip2)
3355 ("guile" ,guile-3.0)
3356 ("gettext" ,gettext-minimal)
3357 ("libtool" ,libtool)
3358 ("perl" ,perl)
3359 ("pkg-config" ,pkg-config)
3360 ("texinfo" ,texinfo)
3361 ("texlive" ,(texlive-updmap.cfg (list texlive-epsf)))))
3362 (inputs
3363 (list dbus-glib
3364 guile-3.0
3365 guile-lib
3366 guile-readline
3367 freeglut
3368 webkitgtk-with-libsoup2))
3369 (propagated-inputs
3370 `(("glib-networking" ,glib-networking)
3371 ("gssettings-desktop-schemas" ,gsettings-desktop-schemas)))
3372 (arguments
3373 `(#:modules ((guix build gnu-build-system)
3374 (guix build utils)
3375 (ice-9 popen)
3376 (ice-9 rdelim)
3377 (ice-9 regex)
3378 (ice-9 ftw)
3379 (srfi srfi-26))
3380 #:phases
3381 (modify-phases %standard-phases
3382 (add-before 'configure 'setenv
3383 (lambda _
3384 (setenv "GUILE_AUTO_COMPILE" "0")))
3385 (add-after 'install 'wrap-binaries
3386 (lambda* (#:key inputs outputs #:allow-other-keys)
3387 (let* ((out (assoc-ref outputs "out"))
3388 (effective (read-line
3389 (open-pipe* OPEN_READ
3390 "guile" "-c"
3391 "(display (effective-version))")))
3392 (deps (map (cut assoc-ref inputs <>)
3393 '("guile-lib" "guile-readline")))
3394 (scm-path (map (cut string-append <> "/share/guile/site/"
3395 effective) `(,out ,@deps)))
3396 (go-path (map (cut string-append <> "/lib/guile/" effective
3397 "/site-ccache/") `(,out ,@deps)))
3398 (examples (filter (cut string-match "emacsy" <>)
3399 (scandir (string-append out "/bin/"))))
3400 (progs (map (cut string-append out "/bin/" <>)
3401 examples)))
3402 (map (cut wrap-program <>
3403 `("GUILE_LOAD_PATH" ":" prefix ,scm-path)
3404 `("GUILE_LOAD_COMPILED_PATH" ":" prefix ,go-path))
3405 progs)))))))
3406 (home-page "https://savannah.nongnu.org/projects/emacsy")
3407 (synopsis "Embeddable GNU Emacs-like library using Guile")
3408 (description
3409 "Emacsy is an embeddable Emacs-like library that uses GNU Guile
3410 as extension language. Emacsy can give a C program an Emacsy feel with
3411 keymaps, minibuffer, recordable macros, history, tab completion, major
3412 and minor modes, etc., and can also be used as a pure Guile library. It
3413 comes with a simple counter example using FreeGLUT and browser examples
3414 in C using Gtk+-3 and WebKitGtk.")
3415 (license license:gpl3+)))
3416
3417 (define-public emacsy-minimal
3418 (let ((commit "v0.4.1-37-g5f91ee6"))
3419 (package
3420 (inherit emacsy)
3421 (name "emacsy-minimal")
3422 (version (string-drop commit 1))
3423 (source
3424 (origin
3425 (method git-fetch)
3426 (uri (git-reference
3427 (url "https://git.savannah.gnu.org/git/emacsy.git")
3428 (commit commit)))
3429 (file-name (git-file-name name version))
3430 (sha256
3431 (base32 "03ym14g9qhjqmryr5z065kynqm8yhmvnbs2djl6vp3i9cmqln8cl"))))
3432 (build-system gnu-build-system)
3433 (native-inputs
3434 `(("autoconf" ,autoconf)
3435 ("automake" ,automake)
3436 ("gettext" ,gettext-minimal)
3437 ("libtool" ,libtool)
3438 ("makeinfo" ,texinfo)
3439 ("pkg-config" ,pkg-config)))
3440 (inputs
3441 `(("guile" ,guile-2.2)
3442 ("guile-lib" ,guile2.2-lib)
3443 ("guile-readline" ,guile2.2-readline)))
3444 (propagated-inputs '())
3445 (arguments
3446 `(#:configure-flags '("--without-examples")
3447 #:phases
3448 (modify-phases %standard-phases
3449 (add-before 'configure 'setenv
3450 (lambda _
3451 (setenv "GUILE_AUTO_COMPILE" "0")
3452 #t))))))))
3453
3454 (define-public guile-jpeg
3455 (let ((commit "6a1673578b297c2c1b28e44a76bd5c49e76a5046")
3456 (revision "0"))
3457 (package
3458 (name "guile-jpeg")
3459 (version (git-version "0.0" revision commit))
3460 (home-page "https://gitlab.com/wingo/guile-jpeg")
3461 (source (origin
3462 (method git-fetch)
3463 (uri (git-reference (url home-page)
3464 (commit commit)))
3465 (sha256
3466 (base32
3467 "05z9m408w3h6aqb5k3r3qa7khir0k10rxwvsrzhkcq1hr5vbmr4m"))
3468 (file-name (git-file-name name version))
3469 (modules '((guix build utils)))
3470 (snippet
3471 '(begin
3472 ;; Install .go files in the right place.
3473 (substitute* "Makefile.am"
3474 (("/ccache") "/site-ccache"))
3475 #t))))
3476 (build-system gnu-build-system)
3477 (native-inputs
3478 (list autoconf automake pkg-config guile-2.2))
3479 (synopsis "JPEG file parsing library for Guile")
3480 (description
3481 "Guile-JPEG is a Scheme library to parse JPEG image files and to
3482 perform geometrical transforms on JPEG images.")
3483 (license license:gpl3+))))
3484
3485 (define-public nomad
3486 (package
3487 (name "nomad")
3488 (version "0.2.0-alpha-199-g3e7a475")
3489 (source (origin
3490 (method git-fetch)
3491 (uri (git-reference
3492 (url "https://git.savannah.gnu.org/git/nomad.git/")
3493 (commit version)))
3494 (file-name (git-file-name name version))
3495 (sha256
3496 (base32
3497 "0p0ha6prp7pyadp61clbhc6b55023vxzfwy14j2qygb2mkq7fhic"))))
3498 (build-system gnu-build-system)
3499 (native-inputs
3500 `(("autoconf" ,autoconf)
3501 ("automake" ,automake)
3502 ("bash" ,bash)
3503 ("pkg-config" ,pkg-config)
3504 ("libtool" ,libtool)
3505 ("guile" ,guile-2.2)
3506 ("glib:bin" ,glib "bin")
3507 ("texinfo" ,texinfo)
3508 ("gettext" ,gettext-minimal)
3509 ("perl" ,perl)))
3510 (inputs
3511 `(;; Guile
3512 ("guile" ,guile-2.2)
3513 ("guile-lib" ,guile2.2-lib)
3514 ("guile-readline" ,guile2.2-readline)
3515 ("guile-gcrypt" ,guile2.2-gcrypt)
3516 ("gnutls" ,gnutls)
3517 ("g-golf" ,guile2.2-g-golf)
3518 ("shroud" ,shroud)
3519 ("emacsy" ,emacsy-minimal)
3520 ;; Gtk
3521 ("glib" ,glib)
3522 ("dbus-glib" ,dbus-glib)
3523 ("glib-networking" ,glib-networking)
3524 ("gtk+" ,gtk+)
3525 ("gtk+:bin" ,gtk+ "bin")
3526 ("webkitgtk" ,webkitgtk)
3527 ("gtksourceview" ,gtksourceview-4)
3528 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
3529 ("vte" ,vte)
3530 ;; Gstreamer
3531 ("gstreamer" ,gstreamer)
3532 ("gst-plugins-base" ,gst-plugins-base)
3533 ("gst-plugins-good" ,gst-plugins-good)
3534 ("gst-plugins-bad" ,gst-plugins-bad)
3535 ("gst-plugins-ugly" ,gst-plugins-ugly)
3536 ;; Util
3537 ("xorg-server" ,xorg-server)))
3538 (arguments
3539 `(#:modules ((guix build gnu-build-system)
3540 (guix build utils)
3541 (ice-9 popen)
3542 (ice-9 rdelim)
3543 (srfi srfi-26))
3544 #:phases
3545 (modify-phases %standard-phases
3546 (add-after 'unpack 'fix-webkitgtk
3547 (lambda _
3548 ;; Adapt to the version we have in Guix.
3549 (substitute* "configure.ac"
3550 (("webkit2gtk-4\\.0") "webkit2gtk-4.1")
3551 (("webkit2gtk-web-extension-4\\.0")
3552 "webkit2gtk-web-extension-4.1"))
3553
3554 (substitute* "typelib/Makefile.am"
3555 (("WebKit2-4\\.0") "WebKit2-4.1"))))
3556 (add-before 'check 'start-xorg-server
3557 (lambda* (#:key inputs #:allow-other-keys)
3558 ;; The test suite requires a running X server.
3559 (system (format #f "~a/bin/Xvfb :1 &"
3560 (assoc-ref inputs "xorg-server")))
3561 (setenv "DISPLAY" ":1")
3562 #t))
3563 (add-after 'install 'wrap-binaries
3564 (lambda* (#:key inputs outputs #:allow-other-keys)
3565 (let* ((out (assoc-ref outputs "out"))
3566 (effective (read-line (open-pipe*
3567 OPEN_READ
3568 "guile" "-c"
3569 "(display (effective-version))")))
3570 (gst-plugins (map (lambda (i)
3571 (string-append (assoc-ref inputs i)
3572 "/lib/gstreamer-1.0"))
3573 `("gstreamer"
3574 "gst-plugins-base"
3575 "gst-plugins-good"
3576 "gst-plugins-bad"
3577 "gst-plugins-ugly")))
3578 (out-append (lambda (. args)
3579 (apply string-append out args)))
3580 (gi-path (out-append "/lib/girepository-1.0"))
3581 (load-path (out-append "/share/guile/site/" effective))
3582 (comp-path (out-append "/lib/guile/"
3583 effective "/site-ccache"))
3584 (ext-path (out-append "/libexec/nomad")))
3585 (wrap-program (string-append out "/bin/nomad")
3586 `("GUILE_LOAD_PATH" ":" prefix
3587 (,load-path
3588 ,(getenv "GUILE_LOAD_PATH")))
3589 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
3590 (,comp-path
3591 ,(getenv "GUILE_LOAD_COMPILED_PATH")))
3592 `("GI_TYPELIB_PATH" ":" prefix
3593 (,gi-path ,(getenv "GI_TYPELIB_PATH")))
3594 `("GIO_EXTRA_MODULES" ":" prefix
3595 (,(getenv "GIO_EXTRA_MODULES")))
3596 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix ,gst-plugins)
3597 `("NOMAD_WEB_EXTENSION_DIR" ":" prefix (,ext-path)))
3598 #t))))))
3599 (home-page "https://savannah.nongnu.org/projects/nomad/")
3600 (synopsis "Extensible Web Browser in Guile Scheme")
3601 (description "Nomad is a Emacs-like web browser that consists of a modular
3602 feature-set, fully programmable in Guile Scheme.")
3603 (license license:gpl3+)))
3604
3605 (define-public guile-cv
3606 (package
3607 (name "guile-cv")
3608 (version "0.2.1")
3609 (source (origin
3610 (method url-fetch)
3611 (uri (string-append "mirror://gnu/guile-cv/guile-cv-"
3612 version ".tar.gz"))
3613 (sha256
3614 (base32
3615 "0qdf0s2h1xj5lbhnc1pfw69i3zg08pqy2y6869b92ydfis8r82j9"))))
3616 (build-system gnu-build-system)
3617 (arguments
3618 `(#:phases
3619 (modify-phases %standard-phases
3620 (add-after 'unpack 'prepare-build
3621 (lambda* (#:key inputs outputs #:allow-other-keys)
3622 (substitute* "configure"
3623 (("SITEDIR=\"\\$datadir/guile-cv\"")
3624 "SITEDIR=\"$datadir/guile/site/$GUILE_EFFECTIVE_VERSION\"")
3625 (("SITECCACHEDIR=\"\\$libdir/guile-cv/")
3626 "SITECCACHEDIR=\"$libdir/"))
3627 (substitute* "cv/init.scm"
3628 (("\\(dynamic-link \"libvigra_c\"\\)")
3629 (string-append "(dynamic-link \""
3630 (assoc-ref inputs "vigra-c")
3631 "/lib/libvigra_c\")"))
3632 (("\\(dynamic-link \"libguile-cv\"\\)")
3633 (format #f "~s"
3634 `(dynamic-link
3635 (format #f "~alibguile-cv"
3636 (if (getenv "GUILE_CV_UNINSTALLED")
3637 ""
3638 ,(format #f "~a/lib/"
3639 (assoc-ref outputs "out"))))))))
3640 (setenv "GUILE_CV_UNINSTALLED" "1")
3641 ;; Only needed to satisfy the configure script.
3642 (setenv "LD_LIBRARY_PATH"
3643 (string-append (assoc-ref inputs "vigra-c") "/lib"))
3644 #t)))))
3645 (inputs
3646 (list vigra vigra-c guile-2.2))
3647 (native-inputs
3648 `(("texlive" ,(texlive-updmap.cfg (list texlive-booktabs
3649 texlive-lm
3650 texlive-siunitx
3651 texlive-standalone
3652 texlive-xcolor
3653 texlive-fonts-iwona)))
3654 ("pkg-config" ,pkg-config)))
3655 (propagated-inputs
3656 `(("guile-lib" ,guile2.2-lib)))
3657 (home-page "https://www.gnu.org/software/guile-cv/")
3658 (synopsis "Computer vision library for Guile")
3659 (description "Guile-CV is a Computer Vision functional programming library
3660 for the Guile Scheme language. It is based on Vigra (Vision with Generic
3661 Algorithms), a C++ image processing and analysis library. Guile-CV contains
3662 bindings to Vigra C (a C wrapper to most of the Vigra functionality) and is
3663 enriched with pure Guile Scheme algorithms, all accessible through a nice,
3664 clean and easy to use high level API.")
3665 (license license:gpl3+)))
3666
3667 (define-public guile-ffi-fftw
3668 (let ((commit "294ad9e7491dcb40026d2fec9be2af05263be1c0")
3669 (revision "2"))
3670 (package
3671 (name "guile-ffi-fftw")
3672 (version (git-version "0" revision commit))
3673 (source (origin
3674 (method git-fetch)
3675 (uri (git-reference
3676 (url "https://github.com/lloda/guile-ffi-fftw")
3677 (commit commit)))
3678 (file-name (git-file-name "guile-ffi-fftw" version))
3679 (sha256
3680 (base32
3681 "08j40a5p6a8pgvhffmzb5rfdnrav2mksy3gfjkdqy93jfj1z5afg"))))
3682 (build-system guile-build-system)
3683 (arguments
3684 `(#:source-directory "mod"
3685 #:phases
3686 (modify-phases %standard-phases
3687 (add-after 'unpack 'prepare-build
3688 (lambda* (#:key inputs #:allow-other-keys)
3689 (substitute* "mod/ffi/fftw.scm"
3690 (("\\(getenv \"GUILE_FFI_FFTW_LIBFFTW3_PATH\"\\)")
3691 (format #f "\"~a/lib\"" (assoc-ref inputs "fftw"))))
3692 #t))
3693 (add-after 'build 'check
3694 (lambda _
3695 (invoke "guile" "-L" "mod"
3696 "-s" "test/test-ffi-fftw.scm"))))))
3697 (inputs
3698 (list fftw guile-2.2))
3699 (home-page "https://github.com/lloda/guile-ffi-fftw/")
3700 (synopsis "Access FFTW through Guile's FFI")
3701 (description "This is a minimal set of Guile FFI bindings for the FFTW
3702 library's ‘guru interface’. It provides two functions: @code{fftw-dft! rank
3703 sign in out} and @code{fftw-dft rank sign in}. These bindings being minimal,
3704 there is no support for computing & reusing plans, or split r/i transforms, or
3705 anything other than straight complex DFTs.")
3706 (license license:lgpl3+))))
3707
3708 (define-public srfi-64-driver
3709 (package
3710 (name "srfi-64-driver")
3711 (version "0.1")
3712 (source (origin
3713 (method url-fetch)
3714 (uri (string-append "https://files.ngyro.com/srfi-64-driver/"
3715 "srfi-64-driver-" version ".tar.gz"))
3716 (sha256
3717 (base32
3718 "188b6mb7sjjg0a8zldikinglf40ky8mg8rwh5768gjmch6gkk3ph"))))
3719 (build-system gnu-build-system)
3720 (arguments
3721 `(#:tests? #f
3722 #:phases
3723 (modify-phases %standard-phases
3724 (delete 'build))))
3725 (native-inputs
3726 (list pkg-config))
3727 (inputs
3728 (list guile-2.2))
3729 (home-page "https://ngyro.com/software/srfi-64-driver.html")
3730 (synopsis "Automake test driver for SRFI 64 test suites")
3731 (description "This package provides an Automake test driver that can
3732 run SRFI 64 test suites. It gives Automake insight into the individual
3733 tests being run, resulting clearer and more specific output.")
3734 (license license:gpl3+)))
3735
3736 (define-public guile-semver
3737 (package
3738 (name "guile-semver")
3739 (version "0.1.1")
3740 (source (origin
3741 (method url-fetch)
3742 (uri (string-append "https://files.ngyro.com/guile-semver/"
3743 "guile-semver-" version ".tar.gz"))
3744 (sha256
3745 (base32
3746 "109p4n39ln44cxvwdccf9kgb96qx54makvd2ir521ssz6wchjyag"))))
3747 (build-system gnu-build-system)
3748 (native-inputs
3749 (list pkg-config))
3750 (inputs
3751 (list guile-3.0))
3752 (home-page "https://ngyro.com/software/guile-semver.html")
3753 (synopsis "Semantic Versioning (SemVer) for Guile")
3754 (description "This Guile library provides tools for reading,
3755 comparing, and writing Semantic Versions. It also includes ranges in
3756 the style of the Node Package Manager (NPM).")
3757 (license license:gpl3+)))
3758
3759 (define-public guile2.2-semver
3760 (package
3761 (inherit guile-semver)
3762 (name "guile2.2-semver")
3763 (inputs
3764 (list guile-2.2))))
3765
3766 (define-public guile-hashing
3767 (package
3768 (name "guile-hashing")
3769 (version "1.2.0")
3770 (home-page "https://gitlab.com/weinholt/hashing")
3771 (source (origin
3772 (method git-fetch)
3773 (uri (git-reference
3774 (url home-page)
3775 (commit "f138deaec38d54ddb621c082764ece276deebe7f")))
3776 (file-name (git-file-name name version))
3777 (sha256
3778 (base32
3779 "1362d3lmpv7slmv1zmr9wy8panq9sjr9787gc2hagd646mpsfpkl"))))
3780 (build-system guile-build-system)
3781 (arguments
3782 `(#:modules ((guix build guile-build-system)
3783 (guix build utils)
3784 (srfi srfi-26)
3785 (ice-9 ftw))
3786 #:implicit-inputs? #f ;needs nothing but Guile
3787 #:phases (modify-phases %standard-phases
3788 (add-before 'build 'move-sls-files
3789 (lambda _
3790 ;; Move the source under hashing/ in order to match
3791 ;; module names, and rename .sls files to .scm.
3792 (define (target file)
3793 (string-append "hashing/" file))
3794
3795 (define (sls->scm sls)
3796 (string-append (string-drop-right sls 4)
3797 ".scm"))
3798
3799 (mkdir "hashing")
3800 (for-each (lambda (file)
3801 (rename-file file (sls->scm file)))
3802 (find-files "." "\\.sls$"))
3803 (for-each (lambda (file)
3804 (rename-file file (target file)))
3805 (scandir "." (cut string-suffix? ".scm" <>)))
3806 (rename-file "private" "hashing/private")
3807 #t)))))
3808 (native-inputs
3809 (list guile-3.0))
3810 (synopsis "Cryprographic hash functions implemented in Scheme")
3811 (description
3812 "The @code{(hashing @dots{})} modules implement cryptographic hash
3813 functions in pure R6RS Scheme: CRC, HMAC, MD5, SHA-1, and SHA-2 (SHA-256,
3814 SHA-512).")
3815 (license license:expat)))
3816
3817 (define-public guile2.2-hashing
3818 (package
3819 (inherit guile-hashing)
3820 (name "guile2.2-hashing")
3821 (native-inputs
3822 (list guile-2.2))))
3823
3824 (define-public guile-packrat
3825 (package
3826 (name "guile-packrat")
3827 (version "0.1.1")
3828 (home-page "https://gitlab.com/weinholt/packrat")
3829 (source (origin
3830 (method git-fetch)
3831 (uri (git-reference
3832 (url home-page)
3833 (commit "4201ebe741b605db58a21d70195cfb7db3c38eae")))
3834 (file-name (git-file-name name version))
3835 (sha256
3836 (base32
3837 "1aga17164fkhbgllqc7ni6fk5zl8mkmgkl5zcsy67x7ngpyalbby"))))
3838 (build-system guile-build-system)
3839 (arguments
3840 `(#:implicit-inputs? #f ;needs nothing but Guile
3841 #:compile-flags '("--r6rs" "-Wunbound-variable" "-Warity-mismatch")
3842 #:not-compiled-file-regexp "/extensible\\.scm$"
3843 #:phases (modify-phases %standard-phases
3844 (add-before 'build 'no-srfi-23
3845 (lambda _
3846 (substitute* "packrat.sls"
3847 (("\\(srfi :23 error\\)")
3848 (object->string '(only (guile) error))))
3849 #t)))))
3850 (native-inputs
3851 (list guile-3.0))
3852 (synopsis "Packrat parser library in R6RS Scheme")
3853 (description
3854 "This is an R6RS Scheme adaptation of the
3855 @uref{https://bford.info/packrat/, packrat parsing}. Packrat parsing is a
3856 memoizing, backtracking, recursive-descent parsing technique that runs in time
3857 and space linear in the size of the input text.")
3858 (license license:expat)))
3859
3860 (define-public guile-ac-d-bus
3861 (package
3862 (name "guile-ac-d-bus")
3863 (version "1.0.0-beta.0")
3864 (home-page "https://gitlab.com/weinholt/ac-d-bus/")
3865 (source (origin
3866 (method git-fetch)
3867 (uri (git-reference
3868 (url home-page)
3869 (commit (string-append "v" version))))
3870 (file-name (git-file-name name version))
3871 (sha256
3872 (base32
3873 "0rl809qimhgz6b0rixakb42r2l4g53jr09a2g0s1hxgab0blz0kb"))
3874 (patches (search-patches "guile-ac-d-bus-fix-tests.patch"))))
3875 (build-system guile-build-system)
3876 (arguments
3877 (list
3878 #:implicit-inputs? #f ;needs nothing but Guile
3879 #:compile-flags #~(list "--r6rs" "-Wunbound-variable" "-Warity-mismatch")
3880 #:phases
3881 #~(modify-phases %standard-phases
3882 (add-before 'build 'adjust-for-guile
3883 (lambda _
3884 ;; Adjust source file names for Guile.
3885 (define (guile-sls->sls file)
3886 (string-append (string-drop-right
3887 file (string-length ".guile.sls"))
3888 ".sls"))
3889
3890 ;; Remove files targeting other implementations: *.mosh.sls,
3891 ;; etc.
3892 (for-each delete-file
3893 (find-files
3894 "compat"
3895 (lambda (file stat)
3896 (not (string-contains file ".guile.")))))
3897
3898 ;; Rename *.guile.sls to *.sls so the ".guile" bit does not
3899 ;; appear in .go file names.
3900 (for-each (lambda (file)
3901 (rename-file file (guile-sls->sls file)))
3902 (find-files "compat" "\\.guile\\.sls"))
3903
3904 ;; Move directories under d-bus/ to match module names.
3905 (mkdir "d-bus")
3906 (for-each (lambda (directory)
3907 (rename-file directory
3908 (string-append "d-bus/"
3909 directory)))
3910 '("compat" "protocol"))))
3911 (add-after 'build 'build-doc
3912 (lambda _
3913 (with-directory-excursion "docs"
3914 (invoke "makeinfo" "ac-d-bus"))))
3915 (add-after 'build-doc 'check
3916 (lambda* (#:key (tests? #t) #:allow-other-keys)
3917 (when tests?
3918 ;; There is no locale for the ö character, which crashes
3919 ;; substitute*; reset the conversion strategy to workaround it.
3920 (with-fluids ((%default-port-conversion-strategy 'substitute))
3921 (substitute* (find-files "tests")
3922 (("#!/usr/bin/env scheme-script")
3923 (string-append "#!" (which "guile")))))
3924 (invoke "./run-tests.sh"))))
3925 (add-after 'install 'install-doc
3926 (lambda _
3927 (install-file "docs/ac-d-bus.info"
3928 (string-append #$output "/share/info")))))))
3929 (native-inputs
3930 (list bash-minimal guile-3.0 texinfo))
3931 (propagated-inputs
3932 (list guile-packrat))
3933 (synopsis "D-Bus protocol implementation in R6RS Scheme")
3934 (description
3935 "AC/D-Bus is an implementation of the D-Bus wire protocol. D-Bus is an
3936 interprocess communication protocol popular on GNU/Linux systems to
3937 communicate with a variety of services. Originally designed for desktop
3938 environments, it is now used by programs like VLC media player, BlueZ,
3939 NetworkManager, Pulseaudio, systemd (including logind and resolved), Polkit,
3940 gnome-keyring, and many more.")
3941 (license license:expat)))
3942
3943 (define-public guile-webutils
3944 (let ((commit "8541904f761066dc9c27b1153e9a838be9a55299")
3945 (revision "0"))
3946 (package
3947 (name "guile-webutils")
3948 (version (git-version "0.1" revision commit))
3949 (source (origin
3950 (method git-fetch)
3951 (uri (git-reference
3952 (url "https://notabug.org/cwebber/guile-webutils.git")
3953 (commit commit)))
3954 (file-name (git-file-name name version))
3955 (sha256
3956 (base32
3957 "1s9n3hbxd7lfpdi0x8wr0cfvlsf6g62ird9gbspxdrp5p05rbi64"))
3958 (modules '((guix build utils)))
3959 (snippet
3960 '(begin
3961 ;; Allow builds with Guile 3.0.
3962 (substitute* "configure.ac"
3963 (("2\\.2 2\\.0")
3964 "3.0 2.2 2.0"))
3965 #t))))
3966 (build-system gnu-build-system)
3967 (native-inputs
3968 (list autoconf automake pkg-config texinfo))
3969 (inputs
3970 (list guile-3.0))
3971 (propagated-inputs
3972 (list guile-irregex guile-gcrypt))
3973 (home-page "https://notabug.org/cwebber/guile-webutils")
3974 (synopsis "Web application authoring utilities for Guile")
3975 (description
3976 "This package provides tooling to write web applications in Guile, such
3977 as signed sessions, multipart message support, etc.")
3978 (license license:gpl3+))))
3979
3980 (define-public guile2.2-webutils
3981 (package
3982 (inherit guile-webutils)
3983 (name "guile2.2-webutils")
3984 (inputs
3985 (list guile-2.2))
3986 (propagated-inputs
3987 (list guile2.2-irregex guile2.2-gcrypt))))
3988
3989 (define-public guile-lens
3990 (let ((commit "14b15d07255f9d3f55d40a3b750d13c9ee3a154f")
3991 (revision "0"))
3992 (package
3993 (name "guile-lens")
3994 (version (git-version "0.1" revision commit))
3995 (source (origin
3996 (method git-fetch)
3997 (uri (git-reference
3998 (url "https://gitlab.com/a-sassmannshausen/guile-lens.git")
3999 (commit commit)))
4000 (file-name (git-file-name name version))
4001 (sha256
4002 (base32
4003 "0w8jzqyla56yrgj7acsgd4nspyir6zgp3vgxid4xmwhg9wmf1ida"))))
4004 (build-system gnu-build-system)
4005 (arguments
4006 '(#:phases
4007 (modify-phases %standard-phases
4008 (add-after 'unpack 'run-hall
4009 (lambda _
4010 (setenv "HOME" "/tmp") ; for ~/.hall
4011 (invoke "hall" "build-system" "-x"))))))
4012 (native-inputs
4013 (list autoconf
4014 automake
4015 guile-3.0
4016 guile-hall
4017 pkg-config
4018 texinfo))
4019 (home-page "https://gitlab.com/a-sassmannshausen/guile-lens.git")
4020 (synopsis "Composable lenses for data structures in Guile")
4021 (description
4022 "Guile-Lens is a library implementing lenses in Guile. The library is
4023 currently a re-implementation of the lentes library for Clojure. Lenses
4024 provide composable procedures, which can be used to focus, apply functions
4025 over, or update a value in arbitrary data structures.")
4026 (license license:gpl3+))))
4027
4028 (define-public guile2.2-lens
4029 (package
4030 (inherit guile-lens)
4031 (name "guile2.2-lens")
4032 (native-inputs
4033 (modify-inputs (package-native-inputs guile-lens)
4034 (replace "guile" guile-2.2)))))
4035
4036 (define-public guile-xapian
4037 (package
4038 (name "guile-xapian")
4039 (version "0.2.0")
4040 (home-page "https://git.systemreboot.net/guile-xapian")
4041 (source
4042 (origin
4043 (method git-fetch)
4044 (uri (git-reference (url home-page)
4045 (commit (string-append "v" version))))
4046 (file-name (git-file-name name version))
4047 (sha256
4048 (base32
4049 "140cwzpzk4y16ajxrg5zd2d7q60f5ivx5jk8w1h0qfjq2mp14sh7"))))
4050 (build-system gnu-build-system)
4051 (arguments
4052 '(#:make-flags '("GUILE_AUTO_COMPILE=0"))) ; to prevent guild warnings
4053 (inputs
4054 (list guile-3.0 xapian zlib))
4055 (native-inputs
4056 (list autoconf
4057 autoconf-archive
4058 automake
4059 libtool
4060 pkg-config
4061 swig))
4062 (synopsis "Guile bindings for Xapian")
4063 (description "@code{guile-xapian} provides Guile bindings for Xapian, a
4064 search engine library. Xapian is a highly adaptable toolkit which allows
4065 developers to easily add advanced indexing and search facilities to their own
4066 applications. It has built-in support for several families of weighting
4067 models and also supports a rich set of boolean query operators.")
4068 (license license:gpl2+)))
4069
4070 (define-public guile2.2-xapian
4071 (package
4072 (inherit guile-xapian)
4073 (name "guile2.2-xapian")
4074 (inputs
4075 (modify-inputs (package-inputs guile-xapian)
4076 (replace "guile" guile-2.2)))))
4077
4078 (define-public guile-torrent
4079 (package
4080 (name "guile-torrent")
4081 (version "0.1.3")
4082 (source (origin (method git-fetch)
4083 (uri (git-reference
4084 (url
4085 "https://github.com/o-nly/torrent")
4086 (commit version)))
4087 (file-name (git-file-name name version))
4088 (sha256
4089 (base32
4090 "1yiagi55ncq1x7s9n7salzywjm4l96y3n7y3s47a9anvz87mrmim"))))
4091 (build-system gnu-build-system)
4092 (native-inputs
4093 (list autoconf
4094 automake
4095 guile-2.2
4096 texinfo
4097 perl
4098 pkg-config))
4099 (propagated-inputs
4100 (list guile-gcrypt))
4101 (home-page "https://github.com/o-nly/torrent")
4102 (synopsis "Torrent library for GNU Guile")
4103 (description "This package provides facilities for working with
4104 @code{.torrent} or metainfo files. Implements a bencode reader and writer
4105 according to Bitorrent BEP003.")
4106 (license license:gpl3+)))
4107
4108 (define-public guile-irc
4109 (let ((commit "7d08ce6fdcb87ac668c5d3bfd5584247805507bb")
4110 (revision "1"))
4111 (package
4112 (name "guile-irc")
4113 (version (git-version "0.3.0" revision commit))
4114 (source (origin
4115 (method git-fetch)
4116 (uri (git-reference
4117 (url "https://github.com/rekado/guile-irc")
4118 (commit commit)))
4119 (file-name (git-file-name name version))
4120 (sha256
4121 (base32
4122 "1jx8704200l29ndg9bfyamgxrzknya0f0vwb2sxhd0k3b8r94avw"))))
4123 (build-system gnu-build-system)
4124 (arguments
4125 `(#:configure-flags '("--enable-gnutls=yes")))
4126 (native-inputs
4127 (list autoconf automake texinfo pkg-config))
4128 (inputs
4129 (list gnutls guile-3.0))
4130 (home-page "https://github.com/rekado/guile-irc")
4131 (synopsis "IRC library for Guile")
4132 (description "This package provides a Guile library for @dfn{Internet
4133 Relay Chat} (IRC).")
4134 ;; Some file headers incorrectly say LGPLv2+.
4135 (license license:lgpl2.1+))))
4136
4137 (define-public guile-websocket
4138 (let ((commit "d17878f6c12c10a49196bb08f737f36b11e61c31")
4139 (revision "1"))
4140 (package
4141 (name "guile-websocket")
4142 (version (git-version "0.1" revision commit))
4143 (source
4144 (origin
4145 (method git-fetch)
4146 (uri (git-reference
4147 (url "https://git.dthompson.us/guile-websocket.git")
4148 (commit commit)))
4149 (file-name (git-file-name name version))
4150 (sha256
4151 (base32
4152 "0kcmhjyb6amm4b9k4ng0r5s38m041mvh5jgmjbz6ichz39k255v7"))))
4153 (build-system gnu-build-system)
4154 (arguments
4155 '(#:make-flags
4156 '("GUILE_AUTO_COMPILE=0")))
4157 (native-inputs
4158 (list autoconf automake pkg-config))
4159 (inputs
4160 (list guile-3.0))
4161 (synopsis "Websocket server/client for Guile")
4162 (description "Guile-websocket provides an implementation of the
4163 WebSocket protocol as defined by RFC 6455.")
4164 (home-page "https://git.dthompson.us/guile-websocket.git")
4165 (license license:lgpl3+))))
4166
4167 (define-public guile-rdf
4168 (package
4169 (name "guile-rdf")
4170 (version "1.0")
4171 (source
4172 (origin
4173 (method git-fetch)
4174 (uri (git-reference
4175 (url "https://framagit.org/tyreunom/guile-rdf")
4176 (commit version)))
4177 (file-name (git-file-name name version))
4178 (sha256
4179 (base32
4180 "0dwn3app1fscbpmpgvjs5jy1y0gwy3j5gdx8br79af6a88zjlnqf"))))
4181 (build-system gnu-build-system)
4182 (arguments
4183 `(#:tests? #f)); tests require network
4184 (inputs
4185 (list guile-3.0))
4186 (native-inputs
4187 (list automake autoconf pkg-config texinfo))
4188 (home-page "https://framagit.org/tyreunom/guile-rdf")
4189 (synopsis "Guile implementation of the RDF abstract and concrete syntaxes")
4190 (description "Guile RDF is an implementation of the RDF (Resource Description
4191 Framework) format defined by the W3C for GNU Guile. RDF structures include
4192 triples (facts with a subject, a predicate and an object), graphs which are
4193 sets of triples, and datasets, which are collections of graphs.
4194
4195 RDF specifications include the specification of concrete syntaxes and of
4196 operations on graphs. This library implements some basic functionalities,
4197 such as parsing and producing turtle and nquads syntax, as well as
4198 manipulating graphs and datasets.")
4199 (license license:gpl3+)))
4200
4201 (define-public guile-jsonld
4202 (package
4203 (name "guile-jsonld")
4204 (version "1.0.2")
4205 (source
4206 (origin
4207 (method git-fetch)
4208 (uri (git-reference
4209 (url "https://framagit.org/tyreunom/guile-jsonld")
4210 (commit version)))
4211 (file-name (git-file-name name version))
4212 (sha256
4213 (base32
4214 "1ryyvh71899z2inivqglb8d78zzp1sd0wv9a56kvcmrxf1966z6r"))))
4215 (build-system gnu-build-system)
4216 (arguments
4217 `(#:tests? #f)); require network
4218 (propagated-inputs
4219 `(("guile-gnutls" ,gnutls)
4220 ("guile-json" ,guile-json-4)
4221 ("guile-rdf" ,guile-rdf)))
4222 (inputs
4223 (list guile-3.0))
4224 (native-inputs
4225 (list automake autoconf pkg-config texinfo))
4226 (home-page "https://framagit.org/tyreunom/guile-jsonld")
4227 (synopsis "Guile implementation of the JsonLD API specification")
4228 (description "Guile JsonLD is an implementation of the JsonLD (Json for
4229 Linked Data) API defined by the W3C for GNU Guile. It allows you to express links
4230 between data, in a way that is very similar to WikiData or RDF for instance.
4231 An object can have relations (in the form of an IRI) that relates it to one or
4232 more objects or strings, represented by a Json object or an IRI.")
4233 (license license:gpl3+)))
4234
4235 (define-public guile-struct-pack
4236 (package
4237 (name "guile-struct-pack")
4238 (version "1.1.1")
4239 (source
4240 (origin
4241 (method git-fetch)
4242 (uri (git-reference
4243 (url "https://gitlab.com/weinholt/struct-pack")
4244 (commit "11b71963793ed4a3bf761efdd83cf2fe123239ee")))
4245 (file-name (git-file-name name version))
4246 (sha256
4247 (base32 "0hd72m821pahjphzyjn26i55542v8makr55xzjll2cycja4wsbc1"))))
4248 (build-system guile-build-system)
4249 (arguments
4250 `(#:compile-flags '("--r6rs" "-Wunbound-variable" "-Warity-mismatch")
4251 #:modules ((guix build guile-build-system)
4252 (guix build utils)
4253 (srfi srfi-26)
4254 (ice-9 ftw))
4255 #:phases (modify-phases %standard-phases
4256 (add-before 'build 'move-sls-files
4257 (lambda _
4258 ;; Move files under a struct/ directory to reflect the
4259 ;; module hierarchy.
4260 (define dst-folder "struct")
4261 (define (target file)
4262 (string-append dst-folder "/" file))
4263 (define files
4264 (scandir "." (negate (cut member <> '("." "..")))))
4265 (mkdir dst-folder)
4266 (for-each (lambda (file)
4267 (rename-file file (target file)))
4268 files)
4269 #t)))))
4270 (native-inputs
4271 (list guile-3.0))
4272 (home-page "https://gitlab.com/weinholt/struct-pack")
4273 (synopsis "R6RS library for working with packed byte structures")
4274 (description
4275 "This is an R6RS library for working with packed byte structures. It is
4276 similar to struct in Python or pack and unpack in Perl.")
4277 (license license:expat)))
4278
4279 (define-public guile-machine-code
4280 (package
4281 (name "guile-machine-code")
4282 (version "2.2.0")
4283 (source
4284 (origin
4285 (method git-fetch)
4286 (uri (git-reference
4287 (url "https://gitlab.com/weinholt/machine-code")
4288 (commit (string-append "v" version))))
4289 (file-name (git-file-name name version))
4290 (sha256
4291 (base32 "1yjzpg5p082kg4vaqlwbwddrrhxyxar6gsx9ql72hpwah4ka82h5"))))
4292 (build-system guile-build-system)
4293 (arguments
4294 `(#:compile-flags '("--r6rs" "-Wunbound-variable" "-Warity-mismatch")
4295 #:modules ((guix build guile-build-system)
4296 (guix build utils)
4297 (srfi srfi-26)
4298 (ice-9 ftw))
4299 #:phases (modify-phases %standard-phases
4300 (add-before 'build 'move-sls-files
4301 (lambda _
4302 ;; Move files under a struct/ directory to reflect the
4303 ;; module hierarchy.
4304 (define dst-folder "machine-code")
4305 (define (target file)
4306 (string-append dst-folder "/" file))
4307 (define files
4308 (scandir "." (negate (cut member <> '("." "..")))))
4309 (mkdir dst-folder)
4310 (for-each (lambda (file)
4311 (rename-file file (target file)))
4312 files)
4313 #t)))))
4314 (native-inputs
4315 (list guile-3.0))
4316 (propagated-inputs
4317 (list guile-struct-pack))
4318 (home-page "https://gitlab.com/weinholt/machine-code")
4319 (synopsis "Tools that relate to machine code and object formats")
4320 (description
4321 "This project is about the development of tools that relate to machine
4322 code and object formats; for all architectures. Here you'll find libraries
4323 for working with binary code: assembly, disassembly, instruction tables,
4324 object formats and related areas.")
4325 (license license:expat)))
4326
4327 (define-public guile-laesare
4328 (package
4329 (name "guile-laesare")
4330 (version "1.0.0")
4331 (source
4332 (origin
4333 (method git-fetch)
4334 (uri (git-reference
4335 (url "https://gitlab.com/weinholt/laesare")
4336 (commit (string-append "v" version))))
4337 (file-name (git-file-name name version))
4338 (sha256
4339 (base32 "15q619gzw717r8r1ql23zfdaibpnp9qqs96032vdc3rj74msxc92"))))
4340 (build-system guile-build-system)
4341 (arguments
4342 `(#:compile-flags '("--r6rs" "-Wunbound-variable" "-Warity-mismatch")
4343 #:modules ((guix build guile-build-system)
4344 (guix build utils)
4345 (srfi srfi-26)
4346 (ice-9 ftw))
4347 #:phases (modify-phases %standard-phases
4348 (add-before 'build 'move-sls-files
4349 (lambda _
4350 ;; Move files under a laesare directory to reflect
4351 ;; the module hierarchy.
4352 (define dst-folder "laesare")
4353 (define (target file)
4354 (string-append dst-folder "/" file))
4355 (define files
4356 (scandir "." (negate (cut member <> '("." "..")))))
4357 (mkdir dst-folder)
4358 (for-each (lambda (file)
4359 (rename-file file (target file)))
4360 files)
4361 #t)))))
4362 (native-inputs
4363 (list guile-3.0))
4364 (home-page "https://gitlab.com/weinholt/laesare")
4365 (synopsis "R6RS Scheme library that provides a reader")
4366 (description
4367 "This is an R6RS Scheme library that provides a reader with some extra
4368 features not found in the standard read procedure such as a compatible mode
4369 with support for other RnRS standards and a tolerant mode that continues on
4370 errors.")
4371 (license license:expat)))
4372
4373 (define-public guile-avahi
4374 (let ((commit "6d43caf64f672a9694bf6c98bbf7a734f17a51e8")
4375 (revision "1"))
4376 (package
4377 (name "guile-avahi")
4378 (version (git-version "0.4.0" revision commit))
4379 (source (origin
4380 (method git-fetch)
4381 (uri (git-reference
4382 (url "git://git.sv.gnu.org/guile-avahi.git")
4383 (commit commit)))
4384 (file-name (git-file-name name version))
4385 (sha256
4386 (base32
4387 "0fvrf8x22yvc71180hd3xkhspg9yvadi0pbv8shzlsaxqncwy1m9"))
4388 (modules '((guix build utils)))))
4389 (build-system gnu-build-system)
4390 (arguments
4391 `(#:modules (((guix build guile-build-system)
4392 #:select (target-guile-effective-version))
4393 ,@%gnu-build-system-modules)
4394 #:imported-modules ((guix build guile-build-system)
4395 ,@%gnu-build-system-modules)
4396 #:make-flags
4397 '("GUILE_AUTO_COMPILE=0") ;to prevent guild warnings
4398 ;; Parallel builds fail on powerpc64le-linux.
4399 ;; See https://lists.nongnu.org/archive/html/guile-avahi-bugs/2021-01/msg00000.html
4400 #:parallel-build? #f
4401 #:phases
4402 (modify-phases %standard-phases
4403 (add-before 'check 'fix-guile-avahi-file-name
4404 (lambda* (#:key outputs #:allow-other-keys)
4405 (with-directory-excursion "src"
4406 (invoke "make" "install"
4407 "-j" (number->string
4408 (parallel-job-count))))
4409 (let* ((out (assoc-ref outputs "out"))
4410 (files (find-files "modules" ".scm")))
4411 (substitute* files
4412 (("\"guile-avahi-v-0\"")
4413 (format #f "\"~a/lib/guile/~a/extensions/guile-avahi-v-0\""
4414 out (target-guile-effective-version))))
4415 #t))))))
4416 (inputs
4417 (list guile-3.0 avahi))
4418 (native-inputs
4419 (list autoconf automake libtool pkg-config texinfo))
4420 (synopsis "Guile bindings to Avahi")
4421 (description
4422 "This package provides bindings for Avahi. It allows programmers to
4423 use functionalities of the Avahi client library from Guile Scheme programs.
4424 Avahi itself is an implementation of multicast DNS (mDNS) and DNS Service
4425 Discovery (DNS-SD).")
4426 (home-page "https://www.nongnu.org/guile-avahi/")
4427 (license license:lgpl3+))))
4428
4429 (define-public guile-jwt
4430 (package
4431 (name "guile-jwt")
4432 (version "0.2.0")
4433 (source
4434 (origin
4435 (method git-fetch)
4436 (uri (git-reference
4437 (url "https://github.com/aconchillo/guile-jwt")
4438 (commit version)))
4439 (file-name (git-file-name name version))
4440 (sha256
4441 (base32
4442 "1p8sapiv5im18rjnzc8xnw6y7dr661rycf9g10z5ww0dl4rfz3z1"))))
4443 (build-system gnu-build-system)
4444 (native-inputs
4445 (list autoconf automake pkg-config))
4446 (propagated-inputs
4447 (list guile-json-4))
4448 (inputs
4449 (list guile-3.0))
4450 (home-page "https://github.com/aconchillo/guile-jwt")
4451 (synopsis "JSON Web Token library for Guile")
4452 (description
4453 "guile-jwt is a JSON Web Token module for Guile. JSON Web Tokens are an
4454 open, industry standard (RFC 7519) method for representing claims securely
4455 between two parties. guile-jwt allows you to decode, verify and generate
4456 JWT. Supported algorithms: HS256, HS384, HS512.")
4457 (license license:gpl3+)))
4458
4459 (define-public guile-sodium
4460 (package
4461 (name "guile-sodium")
4462 (version "0.1.0")
4463 (source
4464 (origin
4465 (method git-fetch)
4466 (uri (git-reference
4467 (url "https://inqlab.net/git/guile-sodium.git")
4468 (commit (string-append "v" version))))
4469 (file-name (git-file-name name version))
4470 (sha256 (base32 "189jsj87hycs57a54x0b9lifwvhr63nypb9vfxdrq7rwrpcvi5f8"))))
4471 (build-system gnu-build-system)
4472 (arguments `())
4473 (native-inputs
4474 (list autoconf automake pkg-config texinfo))
4475 (inputs (list guile-3.0))
4476 (propagated-inputs (list libsodium))
4477 (synopsis "Guile bindings to the libsodium cryptographic library")
4478 (description
4479 "This package provides Guile bindings to the libsodium cryptographic library
4480 which provides core cryptographic primitives needed to build higher-level
4481 tools.")
4482 (home-page "https://inqlab.net/git/guile-sodium.git")
4483 (license license:gpl3+)))
4484
4485 (define-public guile-eris
4486 (package
4487 (name "guile-eris")
4488 (version "0.2.0")
4489 (source
4490 (origin
4491 (method git-fetch)
4492 (uri (git-reference
4493 (url "https://inqlab.net/git/eris.git")
4494 (commit (string-append "v" version))))
4495 (file-name (git-file-name name version))
4496 (sha256 (base32 "1ijglmwkdy1l87gj429qfjis0v8b1zlxhbyfhx5za8664h68nqka"))))
4497 (build-system gnu-build-system)
4498 (arguments '())
4499 (native-inputs
4500 (list autoconf
4501 automake
4502 pkg-config
4503 texinfo
4504 ;; test dependency
4505 guile-srfi-180))
4506 (inputs (list guile-3.0))
4507 (propagated-inputs
4508 (list guile-sodium))
4509 (synopsis "Guile implementation of the Encoding for Robust Immutable Storage (ERIS)")
4510 (description
4511 "Guile-ERIS is the reference implementation of the Encoding for Robust
4512 Immutable Storage (ERIS). ERIS allows arbitrary content to be encoded into
4513 uniformly sized, encrypted blocks that can be reassembled using a short
4514 read-capability.")
4515 (home-page "https://inqlab.net/git/eris.git")
4516 (license license:gpl3+)))
4517
4518 (define-public guile-r6rs-protobuf
4519 (package
4520 (name "guile-r6rs-protobuf")
4521 (version "0.9")
4522 (source
4523 (origin
4524 (method git-fetch)
4525 (uri (git-reference
4526 (url "https://gitlab.com/joolean/r6rs-protobuf")
4527 (commit (string-append "v" version))))
4528 (file-name (git-file-name name version))
4529 (sha256
4530 (base32
4531 "1xmn7jlr1xiqgd35klq910p1bnil1iwdvqxkjr3zzml3spy8p2aa"))))
4532 (build-system guile-build-system)
4533 (arguments
4534 `(#:compile-flags '("--r6rs")))
4535 (inputs
4536 (list guile-3.0))
4537 (home-page "https://gitlab.com/joolean/r6rs-protobuf/")
4538 (synopsis "Scheme implementation of Protocol Buffers")
4539 (description
4540 "This project provides a pure Scheme implementation of Protocol Buffers,
4541 including parsing and code generation.")
4542 (license license:gpl3+)))
4543
4544 (define-public guile-shapefile
4545 (package
4546 (name "guile-shapefile")
4547 (version "0.1.2")
4548 (source
4549 (origin
4550 (method git-fetch)
4551 (uri (git-reference
4552 (url "https://github.com/HugoNikanor/guile-shapefile")
4553 (commit (string-append "v" version))))
4554 (file-name (git-file-name name version))
4555 (sha256
4556 (base32
4557 "1zvrpc8bshw9w0vhdpmhv00j07mzsdyg2f9hfabr83v08zhfi8ml"))))
4558 (build-system guile-build-system)
4559 (arguments
4560 `(#:phases
4561 (modify-phases %standard-phases
4562 (add-after 'unpack 'delete-pre-generated-docs
4563 (lambda _
4564 (delete-file-recursively "docs")
4565 #t))
4566 (add-after 'install 'install-info-documentation
4567 (lambda* (#:key inputs outputs #:allow-other-keys)
4568 (let* ((share (string-append (assoc-ref outputs "out") "/share"))
4569 (doc (string-append share "/doc/" ,name "-" ,version))
4570 (info (string-append share "/info/"))
4571 (makeinfo (search-input-file inputs
4572 "/bin/makeinfo")))
4573 (invoke makeinfo "guile-shapefile.texi" "-o" info)
4574 #t))))))
4575 (inputs
4576 (list guile-3.0))
4577 (native-inputs
4578 (list texinfo))
4579 (home-page "https://github.com/HugoNikanor/guile-shapefile")
4580 (synopsis "Parse shapefiles in Guile")
4581 (description
4582 "Guile Shapefile is a Guile library for reading shapefiles.")
4583 (license license:expat)))
4584
4585 (define-public guile-drmaa
4586 (package
4587 (name "guile-drmaa")
4588 (version "0.1.1")
4589 (source
4590 (origin
4591 (method git-fetch)
4592 (uri (git-reference
4593 (url "https://git.elephly.net/software/guile-drmaa.git")
4594 (commit version)))
4595 (file-name (git-file-name name version))
4596 (sha256
4597 (base32
4598 "1pail39f3iwllcdma4pk4sxsaypplgb5zjyvjwqf5hdv8s3y211x"))))
4599 (build-system gnu-build-system)
4600 (native-inputs
4601 (list autoconf automake pkg-config texinfo sed))
4602 (inputs
4603 (list guile-3.0))
4604 (propagated-inputs
4605 (list guile-bytestructures nyacc))
4606 (home-page "https://git.elephly.net/software/guile-drmaa.git")
4607 (synopsis "Guile bindings to DRMAA")
4608 (description "This project provides Guile bindings to the DRMAA library
4609 version 1. DRMAA is a resource management library implemented by HPC cluster
4610 schedulers.")
4611 (license license:gpl3+)))
4612
4613 (define-public guile-libyaml
4614 (let ((commit "2bdacb72a65ab63264b2edc9dac9692df7ec9b3e")
4615 (revision "2"))
4616 (package
4617 (name "guile-libyaml")
4618 (version (git-version "0" revision commit))
4619 (source
4620 (origin
4621 (method git-fetch)
4622 (uri (git-reference
4623 (url "https://github.com/mwette/guile-libyaml")
4624 (commit commit)))
4625 (file-name (git-file-name name version))
4626 (sha256
4627 (base32
4628 "1bssby1ri1vjll2rvi8b33xr2ghwjyxsd4yc15najj3h8n2ss87i"))))
4629 (build-system gnu-build-system)
4630 (arguments
4631 `(#:modules (((guix build guile-build-system)
4632 #:prefix guile:)
4633 ,@%gnu-build-system-modules)
4634 #:imported-modules ((guix build guile-build-system)
4635 ,@%gnu-build-system-modules)
4636 #:tests? #false ; there are none
4637 #:phases
4638 (modify-phases %standard-phases
4639 (delete 'configure)
4640 (add-after 'unpack 'remove-unused-files
4641 (lambda* (#:key inputs #:allow-other-keys)
4642 (for-each delete-file '("guix.scm" "demo1.yml" "demo1.scm"))))
4643 (add-before 'build 'build-ffi
4644 (lambda* (#:key inputs #:allow-other-keys)
4645 (invoke "guild" "compile-ffi"
4646 "--no-exec" ; allow us to patch the generated file
4647 "yaml/libyaml.ffi")
4648 (substitute* "yaml/libyaml.scm"
4649 (("dynamic-link \"libyaml\"")
4650 (format #false "dynamic-link \"~a/lib/libyaml\""
4651 (assoc-ref inputs "libyaml"))))))
4652 (replace 'build
4653 (assoc-ref guile:%standard-phases 'build))
4654 (delete 'install))))
4655 (inputs
4656 (list guile-3.0 libyaml))
4657 (propagated-inputs
4658 (list guile-bytestructures nyacc))
4659 (home-page "https://github.com/mwette/guile-libyaml")
4660 (synopsis "Guile wrapper for libyaml")
4661 (description
4662 "This package provides a simple yaml module for Guile using the
4663 ffi-helper from nyacc.")
4664 (license license:lgpl3+))))
4665
4666 (define-public schmutz
4667 (let ((commit "add24588c59552537b8f1316df99a0cdd62c221e")
4668 (revision "1"))
4669 (package
4670 (name "schmutz")
4671 (version (git-version "0" revision commit))
4672 (source (origin
4673 (method git-fetch)
4674 (uri (git-reference
4675 (url "https://github.com/arximboldi/schmutz")
4676 (commit commit)))
4677 (file-name (git-file-name name version))
4678 (sha256
4679 (base32
4680 "1z3n61sj62lnn15mandvyrpjzli07rp9r62ypvgg3a8bvh37yc89"))))
4681 (build-system cmake-build-system)
4682 (arguments `(#:tests? #f))
4683 (native-inputs
4684 (list pkg-config))
4685 (inputs
4686 (list guile-2.2))
4687 (home-page "https://github.com/arximboldi/schmutz")
4688 (synopsis "Bind C++ code to Scheme")
4689 (description "Schmutz is a header-only library to declare Scheme bindings
4690 for C++ code using a simple embedded DSL. Think of it as @code{Boost.Python}
4691 or @code{LuaBind} but for Scheme.")
4692 (license license:boost1.0))))
4693
4694 (define-public guile-cbor
4695 (package
4696 (name "guile-cbor")
4697 (version "0.1.0")
4698 (source
4699 (origin
4700 (method git-fetch)
4701 (uri (git-reference
4702 (url "https://inqlab.net/git/guile-cbor.git")
4703 (commit (string-append "v" version))))
4704 (file-name (git-file-name name version))
4705 (sha256 (base32 "0bdqg3ifayf7m2j09lqrgdfprbdaa67azf09bcq9b4k71inxfnxl"))))
4706 (build-system gnu-build-system)
4707 (arguments `())
4708 (native-inputs
4709 (list autoconf automake pkg-config texinfo))
4710 (inputs (list guile-3.0))
4711 (synopsis "Guile implementation of CBOR")
4712 (description
4713 "The Concise Binary Object Representation (CBOR), as specified by RFC 8949, is
4714 a binary data serialization format. CBOR is similar to JSON but serializes to
4715 binary which is smaller and faster to generate and parse. This package provides
4716 a Guile implementation of CBOR.")
4717 (home-page "https://inqlab.net/git/guile-cbor.git")
4718 (license license:gpl3+)))
4719
4720 (define-public guile-quickcheck
4721 (package
4722 (name "guile-quickcheck")
4723 (version "0.1.0")
4724 (source (origin
4725 (method url-fetch)
4726 (uri (string-append "https://files.ngyro.com/"
4727 "guile-quickcheck/guile-quickcheck-"
4728 version ".tar.gz"))
4729 (sha256
4730 (base32
4731 "03mwi1l3354x52nar0zwhcm0x29yai9xjln4p4gbchwvx5dsr6fb"))))
4732 (build-system gnu-build-system)
4733 (native-inputs
4734 (list pkg-config))
4735 (inputs
4736 (list guile-3.0))
4737 (home-page "https://ngyro.com/software/guile-quickcheck.html")
4738 (synopsis "Randomized property-based testing for Guile")
4739 (description "Guile-Quickcheck is a library for random testing of program
4740 properties inspired by ghc-quickcheck. You can use it to express properties,
4741 which functions should satisfy, as Scheme code and then check whether they hold
4742 in a large number of randomly generated test cases.")
4743 (license license:gpl3+)))
4744
4745 (define-public guile-fslib
4746 (package
4747 (name "guile-fslib")
4748 (version "0.2.0")
4749 (source
4750 (origin
4751 (method git-fetch)
4752 (uri (git-reference
4753 (url "https://notabug.org/ZelphirKaltstahl/guile-fslib/")
4754 (commit version)))
4755 (file-name (git-file-name name version))
4756 (sha256
4757 (base32
4758 "118d84p443w7hrslv8hjyhgws631ia08mggiyklkmk0b9plfdsvz"))))
4759 (build-system guile-build-system)
4760 (inputs
4761 (list guile-3.0))
4762 (home-page "https://notabug.org/ZelphirKaltstahl/guile-fslib")
4763 (synopsis "Helper functions for working with locations in file systems")
4764 (description
4765 "This package contains helper functions for working with file system
4766 locations.")
4767 (license license:agpl3+)))
4768
4769 (define-public guile-netlink
4770 (package
4771 (name "guile-netlink")
4772 (version "1.1.1")
4773 (source
4774 (origin
4775 (method git-fetch)
4776 (uri (git-reference
4777 (url "https://git.lepiller.eu/git/guile-netlink")
4778 (commit version)))
4779 (file-name (git-file-name name version))
4780 (sha256
4781 (base32
4782 "0jcl6mzqy04if5drflmygmggbgzsxa42mlmskqb3cfqmksq0zj0y"))))
4783 (build-system gnu-build-system)
4784 (inputs
4785 (list guile-3.0))
4786 (native-inputs
4787 (list automake
4788 autoconf
4789 pkg-config
4790 guile-3.0 ;for 'guild compile' + guile.m4
4791 texinfo))
4792 (home-page "https://git.lepiller.eu/guile-netlink")
4793 (synopsis "Netlink protocol implementation for Guile")
4794 (description "Guile Netlink is a GNU Guile library providing an implementation
4795 of the netlink protocol.
4796
4797 It provides a generic library for writing implementations of a netlink
4798 protocol, a low-level rtnetlink implementation that uses that library and a
4799 high-level API for network management that uses rtnetlink.")
4800 (license license:gpl3+)))
4801
4802 (define-public guile-gitlab
4803 (package
4804 (name "guile-gitlab")
4805 (version "0.2.1")
4806 (source
4807 (origin
4808 (method git-fetch)
4809 (uri (git-reference
4810 (url "https://github.com/artyom-poptsov/guile-gitlab")
4811 (commit (string-append "v" version))))
4812 (file-name (string-append name "-" version))
4813 (sha256
4814 (base32
4815 "0srkmchd4kmfa7q65r6fdzwklhgdlck1ll0s7smzs8ddjdgz2lwm"))))
4816 (build-system gnu-build-system)
4817 (arguments
4818 `(#:make-flags '("GUILE_AUTO_COMPILE=0") ;to prevent guild warnings
4819 #:modules (((guix build guile-build-system)
4820 #:select (target-guile-effective-version))
4821 ,@%gnu-build-system-modules)
4822 #:imported-modules ((guix build guile-build-system)
4823 ,@%gnu-build-system-modules)
4824 #:phases
4825 (modify-phases %standard-phases
4826 (add-after 'install 'wrap-program
4827 (lambda* (#:key inputs outputs #:allow-other-keys)
4828 (let* ((out (assoc-ref outputs "out"))
4829 (bin (string-append out "/bin"))
4830 (guile-lib (assoc-ref inputs "guile-lib"))
4831 (json (assoc-ref inputs "guile-json"))
4832 (tls (assoc-ref inputs "guile-gnutls"))
4833 (version (target-guile-effective-version))
4834 (scm (string-append "/share/guile/site/"
4835 version))
4836 (go (string-append "/lib/guile/"
4837 version "/site-ccache")))
4838 (wrap-program (string-append bin "/gitlab-cli")
4839 `("GUILE_LOAD_PATH" prefix
4840 (,(string-append out scm)
4841 ,(string-append guile-lib scm)
4842 ,(string-append json scm)
4843 ,(string-append tls scm)))
4844 `("GUILE_LOAD_COMPILED_PATH" prefix
4845 (,(string-append out go)
4846 ,(string-append guile-lib go)
4847 ,(string-append json go)
4848 ,(string-append tls go))))))))))
4849 (native-inputs
4850 (list autoconf automake pkg-config texinfo))
4851 (inputs
4852 `(("bash" ,bash-minimal)
4853 ("guile" ,guile-2.2)
4854 ("guile-json" ,guile2.2-json)
4855 ("guile-lib" ,guile2.2-lib)
4856 ("guile-gnutls" ,guile2.2-gnutls)))
4857 (home-page "https://github.com/artyom-poptsov/guile-gitlab")
4858 (synopsis "Guile interface to GitLab")
4859 (description
4860 "This package provides bindings to the GitLab Community Edition REST API
4861 as well as the @samp{gitlab-cli} command line tool for interacting with a
4862 GitLab instance.")
4863 (license license:gpl3)))
4864
4865 (define-public guile-smc
4866 (package
4867 (name "guile-smc")
4868 (version "0.5.2")
4869 (source
4870 (origin
4871 (method git-fetch)
4872 (uri (git-reference
4873 (url "https://github.com/artyom-poptsov/guile-smc")
4874 (commit (string-append "v" version))))
4875 (file-name (string-append name "-" version))
4876 (sha256
4877 (base32
4878 "05q20vi59whjs7jb8bgcxnnfy6c3wx26m5ps2fwlsz52nggarxzb"))))
4879 (build-system gnu-build-system)
4880 (arguments
4881 `(#:make-flags '("GUILE_AUTO_COMPILE=0") ;to prevent guild warnings
4882 #:modules (((guix build guile-build-system)
4883 #:select (target-guile-effective-version))
4884 ,@%gnu-build-system-modules)
4885 #:imported-modules ((guix build guile-build-system)
4886 ,@%gnu-build-system-modules)
4887 #:phases
4888 (modify-phases %standard-phases
4889 (delete 'strip)
4890 (add-after 'install 'wrap-program
4891 (lambda* (#:key inputs outputs #:allow-other-keys)
4892 (let* ((out (assoc-ref outputs "out"))
4893 (bin (string-append out "/bin"))
4894 (guile-lib (assoc-ref inputs "guile-lib"))
4895 (version (target-guile-effective-version))
4896 (scm (string-append "/share/guile/site/"
4897 version))
4898 (go (string-append "/lib/guile/"
4899 version "/site-ccache")))
4900 (wrap-program (string-append bin "/smc")
4901 `("GUILE_LOAD_PATH" prefix
4902 (,(string-append out scm)
4903 ,(string-append guile-lib scm)))
4904 `("GUILE_LOAD_COMPILED_PATH" prefix
4905 (,(string-append out go)
4906 ,(string-append guile-lib go))))))))))
4907 (native-inputs
4908 (list autoconf automake pkg-config texinfo help2man which))
4909 (inputs
4910 (list bash-minimal guile-3.0 guile-lib inetutils))
4911 (home-page "https://github.com/artyom-poptsov/guile-smc")
4912 (synopsis "GNU Guile state machine compiler")
4913 (description
4914 "Guile-SMC is a state machine compiler that allows users to describe
4915 finite state machines (FSMs) in Scheme in terms of transition tables. It is
4916 capable to generate such transition tables from a @url{https://plantuml.com/,
4917 PlantUML} state diagrams.
4918
4919 A transition table can be verified and checked for dead-ends and infinite
4920 loops. Also Guile-SMC FSMs gather statistics when they run.
4921
4922 Guile-SMC comes with a Scheme program called @command{smc} -- a state machine
4923 compiler itself. It produces a Scheme code for an FSM from the PlantUML
4924 format. This tool is meant to be called on a PlantUML file when a program
4925 with a FSM is being built (for example, from a Makefile.)")
4926 (license license:gpl3)))
4927
4928 (define-public guile2.2-smc
4929 (package
4930 (inherit guile-smc)
4931 (name "guile2.2-smc")
4932 (inputs (modify-inputs (package-inputs guile-smc)
4933 (replace "guile" guile-2.2)
4934 (replace "guile-lib" guile2.2-lib)))))
4935
4936 (define-public guile-ini
4937 (package
4938 (name "guile-ini")
4939 (version "0.5.2")
4940 (source (origin
4941 (method git-fetch)
4942 (uri (git-reference
4943 (url "https://github.com/artyom-poptsov/guile-ini")
4944 (commit (string-append "v" version))))
4945 (file-name (string-append name "-" version))
4946 (sha256
4947 (base32
4948 "17fbys3gsfyx4f77a2fswirx76dlr57il2z27z77wljaz777jk36"))))
4949 (build-system gnu-build-system)
4950 (arguments
4951 `(#:make-flags '("GUILE_AUTO_COMPILE=0") ;to prevent guild warnings
4952 #:phases (modify-phases %standard-phases
4953 (delete 'strip))))
4954 (native-inputs (list autoconf automake pkg-config texinfo))
4955 (inputs (list bash-minimal guile-3.0 guile-lib))
4956 (propagated-inputs (list guile-smc))
4957 (home-page "https://github.com/artyom-poptsov/guile-ini")
4958 (synopsis "Guile library for INI format support")
4959 (description
4960 "@code{guile-ini} is a GNU Guile library for working with the
4961 @url{https://en.wikipedia.org/wiki/INI_file, INI format}. This library
4962 provides API for reading and writing INI data.")
4963 (license license:gpl3)))
4964
4965 (define-public guile-schemetran
4966 (let ((commit "3f5e15273ee88ba60ad8caf2de6302ad2bab582b")
4967 (revision "1"))
4968 (package
4969 (name "guile-schemetran")
4970 (version (git-version "0" revision commit))
4971 (source
4972 (origin
4973 (method git-fetch)
4974 (uri (git-reference
4975 (url "https://gitlab.com/codetk/schemetran")
4976 (commit commit)))
4977 (file-name (git-file-name name version))
4978 (sha256
4979 (base32
4980 "1r4nq7wmy854hvbkcc23sidn4kq3p7r4p15y5czwvd52p9djff3m"))))
4981 (build-system guile-build-system)
4982 (arguments
4983 (list #:not-compiled-file-regexp "/doc/.*\\.scm$"
4984 #:source-directory "src"))
4985 (inputs
4986 (list guile-3.0))
4987 (home-page "https://gitlab.com/codetk/schemetran")
4988 (synopsis "Write Fortran in Scheme")
4989 (description
4990 "Fortran is great in expressing operations on multi-dimensional arrays
4991 of numbers. Scheme is great at expressing your coding thoughts. This project
4992 is an attempt to combine both into something useful.")
4993 (license license:asl2.0))))
4994
4995 (define-public guile-kolam
4996 (package
4997 (name "guile-kolam")
4998 (version "0.1.0")
4999 (source
5000 (origin
5001 (method url-fetch)
5002 (uri (string-append "https://kolam.systemreboot.net/releases/kolam-"
5003 version ".tar.lz"))
5004 (sha256
5005 (base32
5006 "083r3n3wvzysa9jhlwjj1xppdm6ja56rkizr6hvj4q1806v8n6mn"))))
5007 (build-system gnu-build-system)
5008 (arguments
5009 '(#:make-flags '("GUILE_AUTO_COMPILE=0"))) ; to prevent guild warnings
5010 (native-inputs
5011 (list guile-3.0 lzip))
5012 (propagated-inputs
5013 (list guile-json-4))
5014 (home-page "https://kolam.systemreboot.net")
5015 (synopsis "GraphQL implementation for Scheme")
5016 (description "@code{guile-kolam} is a GraphQL implementation for Scheme. kolam
5017 features a parser to parse and serialize GraphQL documents, a type system to
5018 create GraphQL schemas, an execution engine to execute GraphQL queries, and a
5019 HTTP handler to implement a HTTP GraphQL endpoint.")
5020 (license license:agpl3+)))
5021
5022 (define-public lokke
5023 (let ((commit "92d36370dc6d218ff3bf315e56ebef93808c1b79")
5024 (revision "1"))
5025 (package
5026 (name "lokke")
5027 (version (git-version "0.0.0" revision commit))
5028 (home-page "https://github.com/lokke-org/lokke")
5029 (source (origin
5030 (method git-fetch)
5031 (uri (git-reference (url home-page) (commit commit)))
5032 (file-name (git-file-name name version))
5033 (sha256
5034 (base32
5035 "1c913md4dcfb0x4n26wbx9wdw453wxg3c5rn49k3f6j8zjqv63yv"))))
5036 (build-system gnu-build-system)
5037 (arguments
5038 '(#:phases
5039 (modify-phases %standard-phases
5040 (add-before 'bootstrap 'pre-bootstrap
5041 (lambda _
5042 (for-each patch-shebang
5043 '("setup" "gen-makefile"
5044 "dev/gen-module-paths"
5045 "dev/refresh"))
5046 (invoke "./setup")))
5047 (add-before 'build 'set-home
5048 (lambda _
5049 (setenv "HOME" (getcwd)))))))
5050 (native-inputs
5051 (list autoconf
5052 automake
5053 libtool
5054 gnu-gettext
5055 pkg-config
5056
5057 ;; Use Guile >= 3.0.8 to work around
5058 ;; <https://bugs.gnu.org/49305>.
5059 guile-3.0-latest))
5060 (inputs
5061 (list pcre2))
5062 (synopsis "Clojure implementation in Guile")
5063 (description
5064 "Lokke intends to provide a full dialect of Clojure for Guile. It also
5065 consists of a set of Guile modules providing some of Clojure's functionality
5066 in two different guises.")
5067 ;; Dual license: LGPLv2.1+ or EPLv1.0+ at the user's option.
5068 (license (list license:lgpl2.1+ license:epl1.0)))))
5069
5070 (define-public guile-tap
5071 (package
5072 (name "guile-tap")
5073 (version "0.4.6")
5074 (source (origin
5075 (method git-fetch)
5076 (uri (git-reference
5077 (url "https://github.com/ft/guile-tap")
5078 (commit (string-append "v" version))))
5079 (file-name (git-file-name name version))
5080 (sha256
5081 (base32
5082 "04ip5cbvsjjcicsri813f4711yh7db6fvc2px4788rl8p1iqvi6x"))))
5083 (build-system gnu-build-system)
5084 (arguments
5085 (list #:phases
5086 #~(modify-phases %standard-phases
5087 (replace 'configure
5088 (lambda _
5089 (substitute* "Makefile"
5090 (("PREFIX = /usr/local") (string-append "PREFIX="
5091 #$output)))))
5092 (replace 'build
5093 (lambda _
5094 (invoke "make")
5095 (invoke "make" "-C" "doc" "man")
5096 (invoke "make" "install")))
5097 (replace 'check
5098 (lambda* (#:key tests? #:allow-other-keys)
5099 (when tests?
5100 (invoke "make" "test")))))))
5101 (native-inputs (list guile-3.0 pandoc))
5102 (home-page "https://github.com/ft/guile-tap")
5103 (synopsis "Guile test framework that emits TAP output")
5104 (description
5105 "guile-tap is a library for GNU Guile that implements a framework for
5106 specifying test cases that emit output that adheres to the Test Anything
5107 Protocol (TAP). It comes with an experimental harness (tap-harness).")
5108 (license license:bsd-2)))
5109
5110 (define-public guile-termios
5111 (package
5112 (name "guile-termios")
5113 (version "0.6.4")
5114 (source (origin
5115 (method git-fetch)
5116 (uri (git-reference
5117 (url "https://github.com/ft/guile-termios")
5118 (commit (string-append "v" version))))
5119 (file-name (git-file-name name version))
5120 (sha256
5121 (base32
5122 "020p3c84z09wyyb6gfzj2x6q2rfmvas7c92fcm2hhg8z1q60sqkg"))))
5123 (build-system gnu-build-system)
5124 (arguments
5125 (list #:phases
5126 #~(modify-phases %standard-phases
5127 (replace 'configure
5128 (lambda _
5129 (substitute* "Makefile"
5130 (("CC = cc") (string-append "CC="
5131 #$(cc-for-target)))
5132 (("PREFIX = /usr/local") (string-append "PREFIX="
5133 #$output)))))
5134 (replace 'build
5135 (lambda _
5136 (invoke "make")
5137 (invoke "make" "-C" "doc" "man")
5138 (invoke "make" "install")))
5139 (replace 'check
5140 (lambda* (#:key tests? #:allow-other-keys)
5141 (when tests?
5142 (invoke "make" "test")))))))
5143 (native-inputs (list guile-3.0 guile-tap pandoc perl perl-io-tty))
5144 (home-page "https://github.com/ft/guile-termios")
5145 (synopsis "POSIX termios interface for GNU Guile")
5146 (description
5147 "To query and change settings of serial devices on POSIX systems, the
5148 termios API is used. GNU Guile doesn't have an interface for that built in.
5149 This module implements this interface by use of Guile's dynamic FFI.")
5150 (license license:bsd-2)))
5151
5152 (define-public guile-goblins
5153 (package
5154 (name "guile-goblins")
5155 (version "0.8")
5156 (source
5157 (origin
5158 (method git-fetch)
5159 (uri (git-reference
5160 (url "https://gitlab.com/spritely/guile-goblins/")
5161 (commit (string-append "v" version))))
5162 (file-name (string-append name "-" version))
5163 (sha256
5164 (base32
5165 "1mmyykh79jwhrfgnhhw94aw7a8m6qw249kj7k60ynj16mcfm5iyy"))))
5166 (build-system gnu-build-system)
5167 (arguments
5168 (list #:make-flags
5169 #~(list "GUILE_AUTO_COMPILE=0")))
5170 (native-inputs
5171 (list autoconf automake pkg-config texinfo))
5172 (inputs (list guile-3.0))
5173 (propagated-inputs
5174 (list guile-fibers guile-gcrypt))
5175 (home-page "https://spritely.institute/goblins")
5176 (synopsis "Distributed programming environment for Guile")
5177 ;; In guile-goblins 0.9, OCapN support will be added (it already
5178 ;; exists in racket-goblins). At that point we should add the
5179 ;; following to this description:
5180 ;;
5181 ;; Goblins allows for cooperation between networked programs
5182 ;; in a mutually suspicious network through OCapN, the Object
5183 ;; Capability Network. This includes collaboration across
5184 ;; runtimes; for instance, programs written in the Guile and Racket
5185 ;; versions of Goblins are able to speak to each other.
5186 (description
5187 "@code{guile-goblins} is the Guile version of
5188 @url{https://spritely.institute/goblins, Spritely Goblins},
5189 a transactional, distributed programming environment following object
5190 capability security designs. Goblins is a general toolkit, and also
5191 the core layer of Spritely's work to support healthy distributed
5192 networked communities.")
5193 (license license:asl2.0)))
5194
5195 ;;;
5196 ;;; Avoid adding new packages to the end of this file. To reduce the chances
5197 ;;; of a merge conflict, place them above by existing packages with similar
5198 ;;; functionality or similar names.
5199 ;;;