projects/guix·blob python-team · refs

1005 lines · 37.2 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2014 John Darrington <[email protected]>
3;;; Copyright © 2014, 2019 Mark H Weaver <[email protected]>
4;;; Copyright © 2015, 2016, 2019, 2021-2023, 2025 Efraim Flashner <[email protected]>
5;;; Copyright © 2016 Kei Kebreau <[email protected]>
6;;; Copyright © 2017, 2024, 2025 Eric Bavier <[email protected]>
7;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <[email protected]>
8;;; Copyright © 2018 Rutger Helling <[email protected]>
9;;; Copyright © 2018 Timo Eisenmann <[email protected]>
10;;; Copyright © 2018 Pierre Neidhardt <[email protected]>
11;;; Copyright © 2019 Clément Lassieur <[email protected]>
12;;; Copyright © 2019 Brett Gilio <[email protected]>
13;;; Copyright © 2020 Raghav Gururajan <[email protected]>
14;;; Copyright © 2020 B. Wilson <[email protected]>
15;;; Copyright © 2020 Michael Rohleder <[email protected]>
16;;; Copyright © 2020 Nicolò Balzarotti <[email protected]>
17;;; Copyright © 2020 Alexandru-Sergiu Marton <[email protected]>
18;;; Copyright © 2020 Hartmut Goebel <[email protected]>
19;;; Copyright © 2021, 2022 Cage <[email protected]>
20;;; Copyright © 2021 Benoit Joly <[email protected]>
21;;; Copyright © 2021 Alexander Krotov <[email protected]>
22;;; Copyright © 2020 Hartmut Goebel <[email protected]>
23;;; Copyright © 2021 Christopher Howard <[email protected]>
24;;; Copyright © 2023 Herman Rimm <[email protected]>
25;;; Copyright © 2024 Zheng Junjie <[email protected]>
26;;; Copyright © 2025 Sergey Trofimov <[email protected]>
27;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
28;;; Copyright © 2025 jgart <[email protected]>
29;;;
30;;; This file is part of GNU Guix.
31;;;
32;;; GNU Guix is free software; you can redistribute it and/or modify it
33;;; under the terms of the GNU General Public License as published by
34;;; the Free Software Foundation; either version 3 of the License, or (at
35;;; your option) any later version.
36;;;
37;;; GNU Guix is distributed in the hope that it will be useful, but
38;;; WITHOUT ANY WARRANTY; without even the implied warranty of
39;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
40;;; GNU General Public License for more details.
41;;;
42;;; You should have received a copy of the GNU General Public License
43;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
44
45(define-module (gnu packages web-browsers)
46 #:use-module (guix build-system cmake)
47 #:use-module (guix build-system glib-or-gtk)
48 #:use-module (guix build-system gnu)
49 #:use-module (guix build-system go)
50 #:use-module (guix build-system meson)
51 #:use-module (guix build-system pyproject)
52 #:use-module (guix download)
53 #:use-module (guix gexp)
54 #:use-module (guix git-download)
55 #:use-module ((guix licenses) #:prefix license:)
56 #:use-module (guix packages)
57 #:use-module (guix utils)
58 #:use-module (gnu packages)
59 #:use-module (gnu packages autotools)
60 #:use-module (gnu packages backup)
61 #:use-module (gnu packages base)
62 #:use-module (gnu packages bash)
63 #:use-module (gnu packages bison)
64 #:use-module (gnu packages compression)
65 #:use-module (gnu packages curl)
66 #:use-module (gnu packages databases)
67 #:use-module (gnu packages documentation)
68 #:use-module (gnu packages toolkits)
69 #:use-module (gnu packages fontutils)
70 #:use-module (gnu packages fonts)
71 #:use-module (gnu packages freedesktop)
72 #:use-module (gnu packages fribidi)
73 #:use-module (gnu packages gcc)
74 #:use-module (gnu packages gettext)
75 #:use-module (gnu packages glib)
76 #:use-module (gnu packages gnome)
77 #:use-module (gnu packages gnome-xyz)
78 #:use-module (gnu packages gnupg)
79 #:use-module (gnu packages golang)
80 #:use-module (gnu packages gstreamer)
81 #:use-module (gnu packages gtk)
82 #:use-module (gnu packages image)
83 #:use-module (gnu packages imagemagick)
84 #:use-module (gnu packages javascript)
85 #:use-module (gnu packages libevent)
86 #:use-module (gnu packages libidn)
87 #:use-module (gnu packages libunistring)
88 #:use-module (gnu packages linux)
89 #:use-module (gnu packages lisp)
90 #:use-module (gnu packages lisp-check)
91 #:use-module (gnu packages lisp-xyz)
92 #:use-module (gnu packages lua)
93 #:use-module (gnu packages man)
94 #:use-module (gnu packages markup)
95 #:use-module (gnu packages mp3)
96 #:use-module (gnu packages ncurses)
97 #:use-module (gnu packages nim)
98 #:use-module (gnu packages pcre)
99 #:use-module (gnu packages perl)
100 #:use-module (gnu packages pkg-config)
101 #:use-module (gnu packages python)
102 #:use-module (gnu packages python-crypto)
103 #:use-module (gnu packages python-build)
104 #:use-module (gnu packages python-web)
105 #:use-module (gnu packages python-xyz)
106 #:use-module (gnu packages qt)
107 #:use-module (gnu packages readline)
108 #:use-module (gnu packages regex)
109 #:use-module (gnu packages sdl)
110 #:use-module (gnu packages sqlite)
111 #:use-module (gnu packages ssh)
112 #:use-module (gnu packages suckless)
113 #:use-module (gnu packages tcl)
114 #:use-module (gnu packages text-editors)
115 #:use-module (gnu packages tls)
116 #:use-module (gnu packages web)
117 #:use-module (gnu packages webkit)
118 #:use-module (gnu packages xdisorg)
119 #:use-module (gnu packages xml)
120 #:use-module (gnu packages xorg)
121 #:use-module ((guix search-paths) #:select ($SSL_CERT_DIR $SSL_CERT_FILE)))
122
123(define-public midori
124 (package
125 (name "midori")
126 (version "9.0")
127 (source
128 (origin
129 (method url-fetch)
130 (uri
131 (string-append "https://github.com/midori-browser/core/releases/"
132 "download/v" version "/" name "-v" version ".tar.gz"))
133 (sha256
134 (base32
135 "05i04qa83dnarmgkx4xsk6fga5lw1lmslh4rb3vhyyy4ala562jy"))))
136 (build-system cmake-build-system)
137 (arguments
138 `(#:imported-modules
139 (,@%cmake-build-system-modules
140 (guix build glib-or-gtk-build-system))
141 #:modules
142 ((guix build cmake-build-system)
143 ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
144 (guix build utils))
145 #:configure-flags
146 ;; Relax gcc-14's strictness.
147 '("-DCMAKE_C_FLAGS=-Wno-error=int-conversion")
148 #:phases
149 (modify-phases %standard-phases
150 (add-after 'install 'glib-or-gtk-compile-schemas
151 (assoc-ref glib-or-gtk:%standard-phases
152 'glib-or-gtk-compile-schemas))
153 (add-after 'install 'glib-or-gtk-wrap
154 (assoc-ref glib-or-gtk:%standard-phases
155 'glib-or-gtk-wrap)))))
156 (native-inputs
157 `(("desktop-file-utils" ,desktop-file-utils) ;for tests
158 ("glib:bin" ,glib "bin")
159 ("gtk+:bin" ,gtk+ "bin")
160 ("intltool" ,intltool)
161 ("pkg-config" ,pkg-config)
162 ("which" ,which))) ;for tests
163 (inputs
164 `(("adwaita-icon-theme" ,adwaita-icon-theme)
165 ("gcr" ,gcr-3)
166 ("glib" ,glib)
167 ("glib-networking" ,glib-networking)
168 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
169 ("gtk+" ,gtk+)
170 ("json-glib" ,json-glib)
171 ("libarchive" ,libarchive)
172 ("libpeas" ,libpeas)
173 ("sqlite" ,sqlite)
174 ("vala" ,vala)
175 ("webkitgtk" ,webkitgtk-with-libsoup2)))
176 (synopsis "Lightweight graphical web browser")
177 (description "@code{Midori} is a lightweight, Webkit-based web browser.
178It features integration with GTK+3, configurable web search engine, bookmark
179management, extensions such as advertisement blocker and colorful tabs.")
180 (home-page "https://www.midori-browser.org")
181 (license license:lgpl2.1+)))
182
183(define-public links
184 (package
185 (name "links")
186 (version "2.30")
187 (source (origin
188 (method url-fetch)
189 (uri (string-append "http://links.twibright.com/download/"
190 "links-" version ".tar.bz2"))
191 (sha256
192 (base32
193 "0rpi2l1v9b8d86z9dm91n312aavz7g12z1xp7kf7qlhib9miqqy4"))))
194 (build-system gnu-build-system)
195 (arguments
196 (list
197 #:configure-flags #~(list "--enable-graphics")
198 #:phases
199 #~(modify-phases %standard-phases
200 (replace 'configure
201 (lambda* (#:key outputs (configure-flags '()) #:allow-other-keys)
202 ;; The tarball uses a very old version of autoconf. It doesn't
203 ;; understand extra flags like `--enable-fast-install', so
204 ;; we need to invoke it with just what it understands.
205 (let ((out (assoc-ref outputs "out")))
206 ;; 'configure' doesn't understand '--host'.
207 #$@(if (%current-target-system)
208 #~((setenv "CHOST" #$(%current-target-system)))
209 #~())
210 (setenv "CONFIG_SHELL" (which "bash"))
211 (apply invoke "./configure"
212 (string-append "--prefix=" out)
213 configure-flags)))))))
214 (native-inputs (list pkg-config))
215 (inputs
216 (list gpm
217 libevent
218 libjpeg-turbo
219 libpng
220 libtiff
221 libxt
222 openssl
223 zlib))
224 (synopsis "Text and graphics mode web browser")
225 (description "Links is a graphics and text mode web browser, with many
226features including, tables, builtin image display, bookmarks, SSL and more.")
227 (home-page "http://links.twibright.com")
228 ;; The distribution contains a copy of GPLv2
229 ;; However, the copyright notices simply say:
230 ;; "This file is a part of the Links program, released under GPL."
231 ;; Therefore, under the provisions of Section 9, we can choose
232 ;; any version ever published by the FSF.
233 ;; One file (https.c) contains an exception permitting
234 ;; linking of the program with openssl.
235 (license license:gpl1+)))
236
237(define-public elinks
238 (package
239 (name "elinks")
240 (version "0.19.1")
241 (source
242 (origin
243 (method git-fetch)
244 (uri (git-reference
245 (url "https://github.com/rkd77/elinks")
246 (commit (string-append "v" version))))
247 (file-name (git-file-name name version))
248 (sha256
249 (base32
250 "1802lh9zsmwmsd4b4kzxzgv3y8f6fmi6i0cjjbwmnkdfivcal3v9"))))
251 (build-system meson-build-system)
252 (arguments
253 (list
254 #:configure-flags
255 #~(list "-D256-colors=true"
256 "-Dbrotli=true"
257 "-Dcgi=true"
258 "-Dfinger=true"
259 "-Dgemini=true"
260 "-Dgopher=true"
261 ;; FIXME: gpm is disabled because Meson cannot find its shared
262 ;; library even though "gpm" is given as an input.
263 "-Dgpm=false"
264 "-Dhtml-highlight=true"
265 "-Dlibev=true"
266 "-Dlzma=true"
267 "-Dnntp=true"
268 "-Dreproducible=true"
269 "-Dsource-date-epoch=1"
270 "-Dtest=true"
271 "-Dtrue-color=true"
272 ;; Fix GCC 14 build
273 "-Dc_args=-Wno-implicit-function-declaration")))
274 (native-inputs
275 (list autoconf
276 automake
277 gettext-minimal
278 perl
279 pkg-config
280 python-minimal))
281 (inputs
282 (list brotli
283 bzip2
284 curl
285 expat
286 gnutls
287 gpm
288 libcss
289 libdom
290 libev
291 libgcrypt
292 libidn
293 lua
294 openssl
295 tre
296 xz
297 zlib))
298 (home-page "http://elinks.cz/")
299 (synopsis "Advanced text mode web browser")
300 (description
301 "ELinks is a feature-rich program for browsing the web in text mode.
302It can render both frames and tables, is highly customisable and can be
303extended via Lua scripts. It is like an enhanced Lynx and Links.")
304 (license license:gpl2+)))
305
306(define-public luakit
307 (package
308 (name "luakit")
309 (version "2.4.0")
310 (source (origin
311 (method git-fetch)
312 (uri (git-reference
313 (url "https://github.com/luakit/luakit")
314 (commit version)))
315 (file-name (git-file-name name version))
316 (sha256
317 (base32
318 "15l0xb8ddv9j8hlrd4d11brngpss77ih9f8m08jfc18ir4rb32y5"))))
319 (build-system glib-or-gtk-build-system)
320 (arguments
321 (list
322 #:tests? #false ;require un-packaged "luassert"
323 #:test-target "run-tests"
324 #:make-flags
325 #~(list (string-append "CC=" #$(cc-for-target))
326 "LUA_BIN_NAME=lua"
327 "DEVELOPMENT_PATHS=0"
328 (string-append "PREFIX=" #$output)
329 (string-append "XDGPREFIX=" #$output "/etc/xdg"))
330 #:phases
331 #~(modify-phases %standard-phases
332 (add-before 'build 'lfs-workaround
333 (lambda _
334 (setenv "LUA_CPATH"
335 (string-append #$(this-package-input "lua5.1-filesystem")
336 "/lib/lua/5.1/?.so;;"))))
337 (add-before 'build 'set-version
338 (lambda _
339 (setenv "VERSION_FROM_GIT" #$version)))
340 (delete 'configure)
341 (add-after 'install 'wrap
342 (lambda _
343 (wrap-program (string-append #$output "/bin/luakit")
344 `("LUA_CPATH" prefix
345 (,(string-append #$(this-package-input "lua5.1-filesystem")
346 "/lib/lua/5.1/?.so;;")))
347 `("XDG_CONFIG_DIRS" prefix
348 (,(string-append #$output "/etc/xdg/")))))))))
349 (native-inputs
350 (list pkg-config))
351 (inputs
352 (list bash-minimal
353 glib-networking
354 gsettings-desktop-schemas
355 gtk+
356 lua-5.1
357 lua5.1-filesystem
358 luajit
359 sqlite
360 webkitgtk-for-gtk3))
361 (synopsis "Fast, lightweight, and simple browser based on WebKit")
362 (description "Luakit is a fast, lightweight, and simple to use
363micro-browser framework extensible by Lua using the WebKit web content engine
364and the GTK+ toolkit.")
365 (home-page "https://luakit.github.io/")
366 (license license:gpl3+)))
367
368(define-public lynx
369 (package
370 (name "lynx")
371 (version "2.9.2")
372 (source (origin
373 (method url-fetch)
374 (uri (string-append
375 "http://invisible-mirror.net/archives/lynx/tarballs"
376 "/lynx" version ".tar.bz2"))
377 (sha256
378 (base32
379 "1kh7zfv7m9srqapppandx3hkc82rr7r9fkhz22g6d4fr6scvhx3k"))))
380 (build-system gnu-build-system)
381 (native-inputs (list pkg-config perl))
382 (inputs (list ncurses
383 libidn
384 openssl
385 libgcrypt
386 unzip
387 zlib
388 gzip
389 bzip2))
390 (native-search-paths (list $SSL_CERT_DIR $SSL_CERT_FILE))
391 (arguments
392 (list #:configure-flags
393 #~(let ((openssl #$(this-package-input "openssl")))
394 (list "--with-pkg-config"
395 "--with-screen=ncurses"
396 "--with-zlib"
397 "--with-bzlib"
398 (string-append "--with-ssl=" openssl)
399 ;; "--with-socks5" ; XXX TODO
400 "--enable-widec"
401 "--enable-ascii-ctypes"
402 "--enable-local-docs"
403 "--enable-htmlized-cfg"
404 "--enable-gzip-help"
405 "--enable-nls"
406 "--enable-ipv6"))
407 #:tests? #f ; no check target
408 #:phases
409 #~(modify-phases %standard-phases
410 (add-before 'configure 'set-makefile-shell
411 (lambda _ (substitute* "po/makefile.inn"
412 (("/bin/sh") (which "sh")))))
413 (replace 'install
414 (lambda* (#:key (make-flags '()) #:allow-other-keys)
415 (apply invoke "make" "install-full" make-flags))))))
416 (synopsis "Text Web Browser")
417 (description
418 "Lynx is a fully-featured @acronym{WWW, World Wide Web} client for users
419of cursor-addressable, character-cell display devices. It will display
420@acronym{HTML, Hypertext Markup Language} documents containing links to files
421on the local system, as well as files on remote systems running http, gopher,
422ftp, wais, nntp, finger, or cso/ph/qi servers.
423
424Lynx can be used to access information on the WWW, or to build information
425systems intended primarily for local access.")
426 (home-page "https://lynx.invisible-island.net/")
427 (license license:gpl2)))
428
429(define-public qutebrowser
430 (package
431 (name "qutebrowser")
432 (version "3.7.0")
433 (source
434 (origin
435 (method git-fetch)
436 (uri (git-reference
437 (url "https://github.com/qutebrowser/qutebrowser")
438 (commit (string-append "v" version))))
439 (file-name (git-file-name name version))
440 (sha256
441 (base32 "1mg4nghf9zw6z1qrw7c6zpbcdzsqr5al5s2svms0wa4dp45rzp69"))))
442 (build-system pyproject-build-system)
443 (native-inputs
444 (list python-setuptools
445 python-wheel
446 python-attrs ; for tests
447 asciidoc))
448 (inputs
449 (list bash-minimal
450 python-colorama
451 python-jinja2
452 python-markupsafe
453 python-pygments
454 python-pynacl
455 python-pypeg2
456 python-pyyaml
457 python-pyqt-6
458 python-pyqtwebengine-6
459 python-tldextract
460 ;; While qtwebengine is provided by python-pyqtwebengine-6, it's
461 ;; included here so we can wrap QTWEBENGINE_RESOURCES_PATH.
462 qtwebengine))
463 (arguments
464 `(;; FIXME: With the existence of qtwebengine, tests can now run. But
465 ;; they are still disabled because test phase hangs. It's not readily
466 ;; apparent as to why.
467 #:tests? #f
468 #:phases
469 (modify-phases %standard-phases
470 (add-after 'unpack 'patch-systemdir
471 (lambda* (#:key outputs #:allow-other-keys)
472 (let ((out (assoc-ref outputs "out")))
473 (substitute* "qutebrowser/utils/standarddir.py"
474 (("/usr/share") (string-append out "/share"))))))
475 (add-after 'unpack 'find-userscripts
476 (lambda* (#:key outputs #:allow-other-keys)
477 (substitute* "qutebrowser/commands/userscripts.py"
478 (("os.path.join.*system=True)")
479 (string-append "os.path.join(\""
480 (assoc-ref outputs "out")
481 "\", \"share\", \"qutebrowser\"")))))
482 (add-before 'build 'build-docs
483 (lambda _
484 (substitute* "scripts/asciidoc2html.py"
485 (("sys.executable, \"-m\", \"asciidoc\"")
486 "\"asciidoc\""))
487 (invoke "python" "scripts/asciidoc2html.py")))
488 (add-before 'check 'set-env-offscreen
489 (lambda _
490 (setenv "QT_QPA_PLATFORM" "offscreen")))
491 (add-after 'install 'install-more
492 (lambda* (#:key outputs #:allow-other-keys)
493 (let ((out (assoc-ref outputs "out")))
494 (rename-file "misc/Makefile" "Makefile")
495 (substitute* "Makefile"
496 ((".*setup\\.py.*") ""))
497 (invoke "make" "install" (string-append "PREFIX=" out))
498 (delete-file-recursively (string-append out "/share/metainfo")))))
499 (add-after 'install-more 'wrap-scripts
500 (lambda* (#:key inputs outputs #:allow-other-keys)
501 (let* ((out (assoc-ref outputs "out"))
502 (python (assoc-ref inputs "python"))
503 (path (string-append out "/lib/python"
504 ,(version-major+minor (package-version
505 python))
506 "/site-packages:"
507 (getenv "GUIX_PYTHONPATH"))))
508 (for-each
509 (lambda (file)
510 (wrap-program file
511 `("GUIX_PYTHONPATH" ":" prefix (,path))))
512 (append
513 (find-files
514 (string-append out "/share/qutebrowser/scripts") "\\.py$")
515 (find-files
516 (string-append out "/share/qutebrowser/userscripts")))))))
517 (add-after 'wrap 'wrap-qt-process-path
518 (lambda* (#:key inputs outputs #:allow-other-keys)
519 (wrap-program (search-input-file outputs "bin/qutebrowser")
520 `("QTWEBENGINE_RESOURCES_PATH" =
521 (,(search-input-directory
522 inputs "/share/qt6/resources")))))))))
523 (home-page "https://qutebrowser.org/")
524 (synopsis "Minimal, keyboard-focused, vim-like web browser")
525 (description "qutebrowser is a keyboard-focused browser with a minimal
526GUI. It is based on PyQt6 and QtWebEngine.")
527 (license license:gpl3+)))
528
529(define-public vimb
530 (package
531 (name "vimb")
532 (version "3.7.1")
533 (source
534 (origin
535 (method git-fetch)
536 (uri (git-reference
537 (url "https://github.com/fanglingsu/vimb/")
538 (commit version)))
539 (sha256
540 (base32 "13gq6grhkscb0ms35k527fc49yrnkd4p3d1i0hv3pl4h6571s7ny"))
541 (file-name (git-file-name name version))))
542 (build-system glib-or-gtk-build-system)
543 (arguments
544 (list #:tests? #f ; no tests
545 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
546 "DESTDIR="
547 (string-append "PREFIX=" #$output))
548 #:phases
549 #~(modify-phases %standard-phases
550 (delete 'configure))))
551 (inputs (list glib-networking gsettings-desktop-schemas webkitgtk-for-gtk3))
552 (native-inputs (list pkg-config))
553 (home-page "https://fanglingsu.github.io/vimb/")
554 (synopsis "Fast and lightweight Vim-like web browser")
555 (description "Vimb is a fast and lightweight vim like web browser based on
556the webkit web browser engine and the GTK toolkit. Vimb is modal like the great
557vim editor and also easily configurable during runtime. Vimb is mostly keyboard
558driven and does not detract you from your daily work.")
559 (license license:gpl3+)))
560
561(define-public lagrange
562 (package
563 (name "lagrange")
564 (version "1.20.5")
565 (source
566 (origin
567 (method url-fetch)
568 (uri
569 (string-append "https://git.skyjake.fi/skyjake/lagrange/releases/"
570 "download/v" version "/lagrange-" version ".tar.gz"))
571 (sha256
572 (base32 "1kha8p9bfhfr7bs3ihpzji3jz9qgwizz1f580nylnlrz418x9wkr"))
573 (modules '((guix build utils)))
574 (snippet
575 '(begin
576 ;; TODO: unbundle fonts.
577 (delete-file-recursively "lib/fribidi")
578 (delete-file-recursively "lib/harfbuzz")
579 (delete-file-recursively "lib/sealcurses")))))
580 (build-system cmake-build-system)
581 (arguments
582 (list
583 #:tests? #false ;no tests
584 #:configure-flags
585 #~(list "-DTFDN_ENABLE_SSE41=OFF"
586 (string-append "-DUNISTRING_DIR="
587 #$(this-package-input "libunistring")))))
588 (native-inputs
589 (list pkg-config zip))
590 (inputs
591 (list freetype
592 fribidi
593 harfbuzz
594 libmpg123
595 libunistring
596 libwebp
597 openssl
598 pcre
599 sdl2
600 zlib))
601 (native-search-paths
602 (list (search-path-specification
603 (variable "XDG_DATA_DIRS")
604 (files '("share")))))
605 (home-page "https://gmi.skyjake.fi/lagrange/")
606 (synopsis "Graphical Gemini client")
607 (description
608 "Lagrange is a desktop GUI client for browsing Geminispace. It offers
609modern conveniences familiar from web browsers, such as smooth scrolling,
610inline image viewing, multiple tabs, visual themes, Unicode fonts, bookmarks,
611history, and page outlines.")
612 (properties
613 '((release-monitoring-url . "https://git.skyjake.fi/gemini/lagrange/releases")))
614 (license license:bsd-2)))
615
616(define-public gmni
617 (package
618 (name "gmni")
619 (version "1.0")
620 (source (origin
621 (method git-fetch)
622 (uri (git-reference
623 (url "https://git.sr.ht/~sircmpwn/gmni")
624 (commit version)))
625 (sha256
626 (base32
627 "0bky9fd8iyr13r6gj4aynb7j9nd36xdprbgq6nh5hz6jiw04vhfw"))
628 (file-name (git-file-name name version))))
629 (build-system gnu-build-system)
630 (arguments
631 (list
632 #:tests? #f ;no check target
633 #:make-flags #~(list #$(string-append "CC=" (cc-for-target)))))
634 (inputs
635 (list bearssl))
636 (native-inputs
637 (list pkg-config scdoc))
638 (home-page "https://sr.ht/~sircmpwn/gmni")
639 (synopsis "Minimalist command line Gemini client")
640 (description "The gmni package includes:
641
642@itemize
643@item A CLI utility (like curl): gmni
644@item A line-mode browser: gmnlm
645@end itemize")
646 (license (list license:gpl3+
647 (license:non-copyleft
648 "https://curl.se/docs/copyright.html"
649 "Used only for files taken from curl.")))))
650
651(define-public bombadillo
652 (package
653 (name "bombadillo")
654 (version "2.4.0")
655 (source (origin
656 (method git-fetch)
657 (uri (git-reference
658 (url "https://tildegit.org/sloum/bombadillo")
659 (commit version)))
660 (sha256
661 (base32
662 "03gcd813bmiy7ad179zg4p61nfa9z5l94sdmsmmn2x204h1ksd8n"))
663 (file-name (git-file-name name version))))
664 (build-system go-build-system)
665 (arguments
666 (list
667 #:import-path "tildegit.org/sloum/bombadillo"
668 #:install-source? #f
669 #:phases
670 #~(modify-phases %standard-phases
671 (add-after 'install 'install-data
672 (lambda _
673 (let* ((builddir "src/tildegit.org/sloum/bombadillo")
674 (pkg (strip-store-file-name #$output))
675 (sharedir (string-append #$output "/share"))
676 (appdir (string-append sharedir "/applications"))
677 (docdir (string-append sharedir "/doc/" pkg))
678 (mandir (string-append sharedir "/man/man1"))
679 (pixdir (string-append sharedir "/pixmaps")))
680 (with-directory-excursion builddir
681 (install-file "bombadillo.desktop" appdir)
682 (install-file "bombadillo.1" mandir)
683 (install-file "bombadillo-icon.png" pixdir))))))
684 #:test-flags #~(list "-vet=off")))
685 (home-page "https://bombadillo.colorfield.space")
686 (synopsis "Terminal browser for the gopher, gemini, and finger protocols")
687 (description "Bombadillo is a non-web browser for the terminal with
688vim-like key bindings, a document pager, configurable settings, and robust
689command selection. The following protocols are supported as first-class
690citizens: gopher, gemini, finger, and local. There is also support for telnet,
691http, and https via third-party applications.")
692 (license license:gpl3+)))
693
694(define-public tinmop
695 (package
696 (name "tinmop")
697 (version "0.9.9.14142135623730951")
698 (source
699 (origin
700 (method git-fetch)
701 (uri (git-reference
702 (url "https://codeberg.org/cage/tinmop")
703 (commit (string-append "v" version))))
704 (file-name (git-file-name name version))
705 (sha256
706 (base32 "0dgx0p1g9xq2kq71ycq5mfjj5h5sw8xs26nk648w3lc8a6764mji"))))
707 (build-system gnu-build-system)
708 (native-inputs
709 (list autoconf
710 automake
711 bash-completion
712 gettext-minimal
713 libjpeg-turbo
714 imagemagick
715 mandoc
716 nano
717 openssl
718 pkg-config
719 sbcl
720 tk
721 unzip
722 which
723 xdg-utils))
724 (inputs
725 (list xsel
726 ncurses
727 sbcl-access
728 sbcl-alexandria
729 sbcl-babel
730 sbcl-bordeaux-threads
731 sbcl-cl+ssl
732 sbcl-cl-base64
733 sbcl-cl-colors2
734 sbcl-cl-html5-parser
735 sbcl-cl-i18n
736 sbcl-cl-ppcre
737 sbcl-cl-spark
738 sbcl-cl-sqlite
739 sbcl-clunit2
740 sbcl-croatoan
741 sbcl-chronicity
742 sbcl-crypto-shortcuts
743 sbcl-drakma
744 sbcl-esrap
745 sbcl-flexi-streams
746 sbcl-ieee-floats
747 sbcl-local-time
748 sbcl-log4cl
749 sbcl-marshal
750 sbcl-nodgui
751 sbcl-parse-number
752 sbcl-percent-encoding
753 sbcl-purgatory
754 sbcl-sxql
755 sbcl-sxql-composer
756 sbcl-tooter
757 sbcl-trivial-clipboard
758 sbcl-unix-opts
759 sbcl-usocket
760 sbcl-yason
761 sdl2-ttf
762 sqlite))
763 (arguments
764 `(#:tests? #f
765 #:strip-binaries? #f
766 #:phases
767 (modify-phases %standard-phases
768 (add-after 'unpack 'set-home
769 (lambda _
770 (setenv "HOME" "/tmp")
771 #t))
772 (add-after 'unpack 'fix-configure.ac
773 (lambda _
774 (delete-file "configure")
775 (substitute* "configure.ac"
776 (("AC_PATH_PROG.+CURL")
777 "dnl")
778 (("AC_PATH_PROGS.+GIT")
779 "dnl")
780 (("AC_PATH_PROG.+GPG")
781 "dnl")
782 (("AC_PATH_PROG.+SDL2")
783 "dnl ")
784 (("AC_CHECK_HEADER.+ttf")
785 "dnl "))
786 (substitute* "Makefile.am"
787 (("dist_completion_DATA")
788 "#")
789 (("completiondir")
790 "#"))
791 #t)))))
792 (synopsis
793 "Gemini, gopher, kami and mastodon/pleroma client with a terminal interface")
794 (description
795 "This package provides a Gemini, gopher, kami and mastodon/pleroma client
796with a terminal interface, for Gemini also a GUI is available.")
797 (home-page "https://www.autistici.org/interzona/tinmop.html")
798 (license license:gpl3+)))
799
800(define-public telescope
801 (package
802 (name "telescope")
803 (version "0.9")
804 (source
805 (origin
806 (method url-fetch)
807 (uri (string-append "https://github.com/omar-polo/telescope/releases/download/"
808 version "/telescope-" version ".tar.gz"))
809 (sha256
810 (base32 "1xbwdm3xcahwl6sjqx6f8hhx7nyzyygkjsnxglwxazp8zlmchqy9"))))
811 (build-system gnu-build-system)
812 (arguments
813 `(#:tests? #f)) ;no tests
814 (native-inputs
815 (list gettext-minimal pkg-config))
816 (inputs
817 (list libgrapheme libressl ncurses))
818 (home-page "https://telescope.omarpolo.com/")
819 (synopsis "Gemini client with a terminal interface")
820 (description "Telescope is a w3m-like browser for Gemini.")
821 (license license:x11)))
822
823(define-public leo
824 ;; PyPi only provides a wheel.
825 (let ((commit "88cc10a87afe2ec86be06e6ea2bcd099f5360b74")
826 (version "1.0.4")
827 (revision "1"))
828 (package
829 (name "leo")
830 (version (git-version version revision commit))
831 (source
832 (origin
833 (method git-fetch)
834 (uri (git-reference
835 (url "https://github.com/xyzshantaram/leo")
836 (commit commit)))
837 (file-name (git-file-name name version))
838 (sha256
839 (base32 "0jp4v4jw82qqynqqs7x35g5yvm1sd48cvbqh7j2r1ixw1z6ldhc4"))))
840 (build-system pyproject-build-system)
841 (arguments (list #:tests? #f)) ; No tests.
842 (native-inputs (list python-setuptools))
843 (home-page "https://github.com/xyzshantaram/leo")
844 (synopsis "Gemini client written in Python")
845 (description
846 "@command{leo} is a gemini client written in Python with no external
847dependencies that fully implements the Gemini spec. A list of URLs can be
848saved to a file for further viewing in another window.")
849 (license license:expat))))
850
851(define-public av-98
852 (package
853 (name "av-98")
854 (version "1.4")
855 (properties '((upstream-name . "AV-98")))
856 (source
857 (origin
858 (method git-fetch)
859 (uri (git-reference
860 (url "https://git.sr.ht/~solderpunk/AV-98")
861 (commit (string-append "v" version))))
862 (file-name (git-file-name name version))
863 (sha256
864 (base32 "04dzkzsan1cnrslsvfgn1whpwald8xy34wqzvq81hd2mvw9a2n69"))))
865 (build-system pyproject-build-system)
866 (arguments
867 (list
868 #:tests? #f ; No tests.
869 #:phases
870 #~(modify-phases %standard-phases
871 (add-before 'sanity-check 'configure-sanity-check
872 (lambda _
873 (setenv "HOME" (getcwd)))))))
874 (native-inputs (list python-setuptools))
875 (home-page "https://git.sr.ht/~solderpunk/AV-98")
876 (synopsis "Command line Gemini client")
877 (description
878 "AV-98 is an experimental client for the Gemini protocol. Features include
879@itemize
880@item TOFU or CA server certificate validation;
881@item Extensive client certificate support if an openssl binary is available;
882@item Ability to specify external handler programs for different MIME types;
883@item Gopher proxy support;
884@item Advanced navigation tools like tour and mark (as per VF-1);
885@item Bookmarks;
886@item IPv6 support;
887@item Support for any character encoding recognised by Python.
888@end itemize")
889 (license license:bsd-2)))
890
891(define-public chawan
892 (package
893 (name "chawan")
894 (version "0.4.4")
895 (source
896 (origin
897 (method git-fetch)
898 (uri (git-reference
899 (url "https://git.sr.ht/~bptato/chawan")
900 (commit (string-append "v" version))))
901 (sha256
902 (base32 "1il1z8hw9hyv8jq892mw9d8pkv2fbpr9ghkgsgqjdqah2fhckjp0"))
903 (patches (search-patches "chawan-0.4.4-tmp-nimcache.patch"))
904 (file-name (git-file-name name version))))
905 (build-system gnu-build-system)
906 (arguments
907 (list
908 #:test-target "test"
909 #:make-flags
910 #~(list (string-append "PREFIX=" #$output)
911 (string-append "CC=" #$(cc-for-target)))
912 #:phases
913 #~(modify-phases %standard-phases
914 ;; must override absolute shell path set by test configurations.
915 (add-after 'unpack 'patch-shell-path
916 (lambda* (#:key inputs #:allow-other-keys)
917 (substitute* '("src/local/pager.nim" "adapter/protocol/man.nim")
918 (("\"/bin/sh\"")
919 (format #f "~s" (search-input-file inputs "bin/sh"))))))
920 (delete 'configure))))
921 (native-inputs (list nim pkg-config))
922 (inputs (list bash-minimal brotli libssh2 openssl))
923 (home-page "https://chawan.net/")
924 (synopsis "Text-mode web browser and pager")
925 (description
926 "Chawan is a text-mode web browser and pager for Unix-like
927systems, with a focus on implementing modern web standards while remaining
928self-contained, easy to understand and extensible. It includes functionality
929such as CSS, inline images inside the terminal, and JavaScript through a small,
930independent browser engine. Most of Chawan has been developed from scratch in
931the memory-safe Nim programming language.")
932 (license license:unlicense)))
933
934(define-public dillo
935 (package
936 (name "dillo")
937 (version "3.3.0")
938 (source
939 (origin
940 (method git-fetch)
941 (uri (git-reference
942 (url "https://git.dillo-browser.org/dillo")
943 (commit (string-append "v" version))))
944 (file-name (git-file-name name version))
945 (sha256
946 (base32 "14mrm84br4p6iq3ihzlyq07p8v8cdvrh8zhs9yhv1dxbdkjxhdrk"))))
947 (build-system gnu-build-system)
948 (native-inputs (list autoconf automake))
949 (inputs (list fltk-1.3
950 fontconfig
951 openssl
952 libjpeg-turbo
953 libpng
954 libwebp
955 libxext
956 libx11
957 libxfixes
958 libxft
959 libxrender
960 zlib))
961 (home-page "https://dillo-browser.org/")
962 (synopsis "Very small and fast graphical web browser")
963 (description
964 "Dillo is a minimalistic web browser particularly intended for
965-older or slower computers and embedded systems.")
966 (license license:gpl3+)))
967
968(define-public edbrowse
969 (package
970 (name "edbrowse")
971 (version "3.8.18")
972 (source
973 (origin
974 (method git-fetch)
975 (uri (git-reference
976 (url "https://github.com/edbrowse/edbrowse")
977 (commit (string-append "v" version))))
978 (file-name (git-file-name name version))
979 (sha256
980 (base32 "04fly77d20h1g6i36rv3pca44vpi0adin8k3hfan57bxy9nx8iww"))))
981 (build-system gnu-build-system)
982 (inputs (list curl-ssh pcre2 quickjs-ng openssl readline unixodbc))
983 (native-inputs (list perl pkg-config))
984 (arguments
985 (list
986 #:make-flags
987 #~(list (string-append "CC=" #$(cc-for-target))
988 (string-append "PREFIX=" #$output)
989 "CPPFLAGS=-DQ_NG=1"
990 "QUICKJS_LIB_NAME=qjs")
991 #:tests? #f ; Edbrowse doesn't have tests
992 #:phases
993 #~(modify-phases %standard-phases
994 (delete 'configure))))
995 (home-page "https://edbrowse.org/")
996 (synopsis "Command-line editor and web browser")
997 (description "Edbrowse is a combination editor, browser, and mail client that is
998100% text based. The interface is similar to /bin/ed, though there are many more
999features, such as editing multiple files simultaneously, and rendering html. This
1000program was originally written for blind users, but many sighted users have taken
1001advantage of the unique scripting capabilities of this program, which can be found
1002nowhere else. A batch job, or cron job, can access web pages on the internet, submit
1003forms, and send email, with no human intervention whatsoever. edbrowse can also tap
1004into databases through odbc. It was primarily written by Karl Dahlke.")
1005 (license license:gpl2+)))