projects/guix·blob python-team · refs

1161 lines · 43.3 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2019-2025 Maxim Cournoyer <[email protected]>
3;;; Copyright © 2019 David Wilson <[email protected]>
4;;; Copyright © 2019-2022 Liliana Marie Prikler <[email protected]>
5;;; Copyright © 2019, 2020, 2022 Marius Bakke <[email protected]>
6;;; Copyright © 2019, 2024, 2025 Giacomo Leidi <[email protected]>
7;;; Copyright © 2020 raingloom <[email protected]>
8;;; Copyright © 2020, 2021, 2022, 2023 Vinicius Monego <[email protected]>
9;;; Copyright © 2020, 2021 Brice Waegeneire <[email protected]>
10;;; Copyright © 2023 Dominik Delgado Steuter <[email protected]>
11;;; Copyright © 2025 Noé Lopez <[email protected]>
12;;;
13;;; This file is part of GNU Guix.
14;;;
15;;; GNU Guix is free software; you can redistribute it and/or modify it
16;;; under the terms of the GNU General Public License as published by
17;;; the Free Software Foundation; either version 3 of the License, or (at
18;;; your option) any later version.
19;;;
20;;; GNU Guix is distributed in the hope that it will be useful, but
21;;; WITHOUT ANY WARRANTY; without even the implied warranty of
22;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23;;; GNU General Public License for more details.
24;;;
25;;; You should have received a copy of the GNU General Public License
26;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
27
28;;; Commentary:
29
30;;; This module is for packages that are part of GNOME Circle
31;;; <https://circle.gnome.org/>.
32
33;;; Code:
34
35(define-module (gnu packages gnome-circle)
36 #:use-module (gnu packages admin)
37 #:use-module (gnu packages aidc)
38 #:use-module (gnu packages backup)
39 #:use-module (gnu packages bash)
40 #:use-module (gnu packages check)
41 #:use-module (gnu packages cmake)
42 #:use-module (gnu packages ebook)
43 #:use-module (gnu packages enchant)
44 #:use-module (gnu packages fonts)
45 #:use-module (gnu packages freedesktop)
46 #:use-module (gnu packages gettext)
47 #:use-module (gnu packages glib)
48 #:use-module (gnu packages gnome)
49 #:use-module (gnu packages gnupg)
50 #:use-module (gnu packages gstreamer)
51 #:use-module (gnu packages gtk)
52 #:use-module (gnu packages haskell-xyz)
53 #:use-module (gnu packages linux)
54 #:use-module (gnu packages password-utils)
55 #:use-module (gnu packages pdf)
56 #:use-module (gnu packages pkg-config)
57 #:use-module (gnu packages protobuf)
58 #:use-module (gnu packages python)
59 #:use-module (gnu packages python-compression)
60 #:use-module (gnu packages python-crypto)
61 #:use-module (gnu packages python-web)
62 #:use-module (gnu packages python-xyz)
63 #:use-module (gnu packages rust)
64 #:use-module (gnu packages security-token)
65 #:use-module (gnu packages sqlite)
66 #:use-module (gnu packages tls)
67 #:use-module (gnu packages web)
68 #:use-module (gnu packages webkit)
69 #:use-module (gnu packages xml)
70 #:use-module (gnu packages)
71 #:use-module (guix build-system cargo)
72 #:use-module (guix build-system copy)
73 #:use-module (guix build-system meson)
74 #:use-module (guix build-system pyproject)
75 #:use-module (guix download)
76 #:use-module (guix gexp)
77 #:use-module (guix git-download)
78 #:use-module (guix utils)
79 #:use-module ((guix licenses) #:prefix license:)
80 #:use-module (guix packages))
81
82(define-public apostrophe
83 (package
84 (name "apostrophe")
85 (version "3.4")
86 (source (origin
87 (method git-fetch)
88 (uri (git-reference
89 (url "https://gitlab.gnome.org/World/apostrophe")
90 (commit (string-append "v" version))))
91 (file-name (git-file-name name version))
92 (sha256
93 (base32
94 "1qndv40vvlzgyybhg30130v8b8zazddqjgmmbpfsnqfc0ghmhgja"))))
95 (build-system meson-build-system)
96 (arguments
97 (list
98 #:glib-or-gtk? #t
99 #:imported-modules (append %meson-build-system-modules
100 %pyproject-build-system-modules)
101 #:modules '((guix build meson-build-system)
102 ((guix build pyproject-build-system) #:prefix py:)
103 (guix build utils))
104 #:phases
105 #~(modify-phases %standard-phases
106 (add-after 'unpack 'patch-meson
107 (lambda _
108 (substitute* "build-aux/meson_post_install.py"
109 (("gtk-update-icon-cache") "true"))))
110 (replace 'check
111 (lambda* (#:key tests? #:allow-other-keys)
112 (when tests?
113 (with-directory-excursion "../source"
114 (setenv "PYTHONPATH" (getcwd))
115 (invoke "pytest" "tests/")))))
116 (add-after 'glib-or-gtk-wrap 'python-and-gi-wrap
117 (lambda* (#:key inputs outputs #:allow-other-keys)
118 (wrap-program (search-input-file outputs "bin/apostrophe")
119 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")
120 ,(py:site-packages inputs outputs)))
121 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))
122 `("PATH" prefix (,(dirname
123 (search-input-file inputs
124 "/bin/pandoc"))))))))))
125 (inputs
126 (list adwaita-icon-theme
127 bash-minimal
128 gtk
129 gtksourceview
130 libadwaita
131 libspelling
132 pandoc
133 python
134 python-chardet
135 python-pycairo
136 python-pyenchant
137 python-pygobject
138 python-pypandoc
139 python-regex
140 webkitgtk))
141 (native-inputs
142 (list gettext-minimal
143 `(,glib "bin")
144 gobject-introspection
145 pkg-config
146 python
147 python-pytest
148 python-pylint))
149 (home-page "https://gitlab.gnome.org/World/apostrophe")
150 (synopsis "Markdown editor written in Python with GTK+")
151 (description "Apostrophe is a GTK+ based distraction-free Markdown editor.
152It uses pandoc as back-end for parsing Markdown.")
153 (license license:gpl3)))
154
155(define-public amberol
156 (package
157 (name "amberol")
158 (version "2026.1")
159 (source (origin
160 (method git-fetch)
161 (uri (git-reference
162 (url "https://gitlab.gnome.org/World/amberol.git")
163 (commit version)))
164 (file-name (git-file-name name version))
165 (sha256
166 (base32
167 "14isynfil7d5111vmxfwinlap1gfj9qr1xb2big4ds50d9yn32bp"))
168 (patches
169 (search-patches "amberol-port-to-gtk-rs-0.11.patch"))))
170 (build-system meson-build-system)
171 (arguments
172 (list
173 #:glib-or-gtk? #t
174 #:tests? #f ;no tests
175 #:imported-modules `(,@%meson-build-system-modules
176 ,@%cargo-build-system-modules)
177 #:modules `(((guix build cargo-build-system) #:prefix cargo:)
178 (guix build meson-build-system)
179 (guix build utils))
180 #:phases
181 #~(modify-phases %standard-phases
182 (add-after 'unpack 'prepare-for-build
183 (lambda _
184 (substitute* "meson.build"
185 (("gtk_update_icon_cache: true")
186 "gtk_update_icon_cache: false")
187 (("update_desktop_database: true")
188 "update_desktop_database: false"))
189 (substitute* "meson.build"
190 (("'Cargo.lock',")
191 ""))
192 (delete-file "Cargo.lock")))
193 (add-after 'configure 'prepare-cargo-build-system
194 (lambda args
195 (for-each
196 (lambda (phase)
197 (format #t "Running cargo phase: ~a~%" phase)
198 (apply (assoc-ref cargo:%standard-phases phase)
199 #:vendor-dir "vendor"
200 #:cargo-target #$(cargo-triplet)
201 args))
202 '(unpack-rust-crates
203 configure
204 check-for-pregenerated-files
205 patch-cargo-checksums))))
206 (add-after 'install 'wrap-program
207 (lambda _
208 (wrap-program (string-append #$output "/bin/amberol")
209 `("GST_PLUGIN_SYSTEM_PATH" ":" suffix
210 (,(getenv "GST_PLUGIN_SYSTEM_PATH")))))))))
211 (native-inputs
212 (cons* bash-minimal
213 blueprint-compiler
214 gettext-minimal
215 `(,glib "bin")
216 pkg-config
217 rust
218 `(,rust "cargo")
219 (or (and=> (%current-target-system)
220 (compose list make-rust-sysroot))
221 '())))
222 (inputs
223 (cons* bash-minimal
224 gstreamer
225 gst-plugins-bad
226 gtk
227 libadwaita
228 (cargo-inputs 'amberol)))
229 (home-page "https://apps.gnome.org/Amberol/")
230 (synopsis "Music player for GNOME")
231 (description "Amberol is a minimalistic music player for GNOME. It works
232with one playlist in which you can add local audio files and directories.")
233 (license license:gpl3+)))
234
235(define-public blanket
236 (package
237 (name "blanket")
238 (version "0.8.0")
239 (source
240 (origin
241 (method git-fetch)
242 (uri (git-reference
243 (url "https://github.com/rafaelmardojai/blanket/")
244 (commit version)))
245 (file-name (git-file-name name version))
246 (sha256
247 (base32 "1inqb8z2vbmfybcrqbla76sny7cg2qz932agynqj4pn9a3zwnw9f"))))
248 (build-system meson-build-system)
249 (arguments
250 (list
251 #:glib-or-gtk? #t
252 #:phases
253 #~(modify-phases %standard-phases
254 (add-after 'glib-or-gtk-wrap 'wrap-libs
255 (lambda* (#:key outputs #:allow-other-keys)
256 (let ((gi-typelib-path (getenv "GI_TYPELIB_PATH"))
257 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH"))
258 (python-path (getenv "GUIX_PYTHONPATH")))
259 (wrap-program (search-input-file outputs "/bin/blanket")
260 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
261 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
262 `("GUIX_PYTHONPATH" ":" prefix (,python-path)))))))))
263 (native-inputs
264 (list blueprint-compiler
265 desktop-file-utils
266 gettext-minimal
267 `(,glib "bin")
268 gobject-introspection
269 `(,gtk+ "bin")
270 pkg-config))
271 (inputs
272 (list appstream-glib
273 bash-minimal
274 gsettings-desktop-schemas
275 gst-plugins-bad
276 gst-plugins-good ;for ScaleTempo plugin
277 gtk
278 libhandy
279 libadwaita
280 python
281 python-gst
282 python-pygobject))
283 (home-page "https://github.com/rafaelmardojai/blanket")
284 (synopsis "Ambient sound and noise player")
285 (description
286 "Blanket provides different ambient sounds and types of noise to listen
287to with the goal of improving your focus and enhancing your productivity.
288You can also use it to fall asleep in a noisy environment.")
289 (license license:gpl3+)))
290
291(define-public cartridges
292 (package
293 (name "cartridges")
294 (version "2.13.1")
295 (source (origin
296 (method git-fetch)
297 (uri (git-reference
298 (url "https://codeberg.org/kramo/cartridges.git")
299 (commit (string-append "v" version))))
300 (file-name (git-file-name name version))
301 (sha256
302 (base32
303 "1vykylz4wm8zvccqsfvfy02hrnm2lygv8yrwmkhdj0l44fqqlqsm"))
304 (patches
305 ;; See <https://codeberg.org/kramo/cartridges/pulls/433>.
306 (search-patches "cartridges-fix-non-parallel-build.patch"))))
307 (build-system meson-build-system)
308 (arguments
309 (list
310 #:configure-flags
311 #~(list "-Dtiff_compression=jpeg") ;webp compression leads to error
312 #:glib-or-gtk? #t
313 #:phases
314 #~(modify-phases %standard-phases
315 (add-after 'unpack 'skip-gnome-post-install
316 (lambda _
317 (substitute* "meson.build"
318 (("gtk_update_icon_cache: true")
319 "gtk_update_icon_cache: false")
320 (("update_desktop_database: true")
321 "update_desktop_database: false"))))
322 (add-after 'install 'wrap-program
323 (lambda* (#:key inputs #:allow-other-keys)
324 (wrap-program (string-append #$output "/bin/cartridges")
325 `("GUIX_PYTHONPATH" =
326 (,(string-append #$output
327 "/lib/python"
328 #$(version-major+minor
329 (package-version python))
330 "/site-packages:"
331 (getenv "GUIX_PYTHONPATH"))))
332 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))
333 `("GDK_PIXBUF_MODULE_FILE" =
334 (,(getenv "GDK_PIXBUF_MODULE_FILE")))
335 `("PATH" ":" prefix
336 (,(dirname (search-input-file inputs "/bin/gtk4-launch"))
337 ,(dirname (search-input-file inputs "/bin/xdg-open"))))))))))
338 (native-inputs
339 (list blueprint-compiler
340 gettext-minimal
341 gobject-introspection
342 `(,glib "bin")
343 pkg-config))
344 (inputs
345 (list adwaita-icon-theme
346 bash-minimal
347 gtk
348 `(,gtk "bin") ;for gtk-launch
349 libadwaita
350 python
351 python-pillow
352 python-pygobject
353 python-pyyaml
354 python-requests
355 xdg-utils)) ;for xdg-open
356 (home-page "https://apps.gnome.org/Cartridges/")
357 (synopsis "Game launcher for GNOME")
358 (description "Cartridges is a game launcher for multiple game libraries.
359It can import and launch games from Steam, Lutris, Heroic, Bottles, itch,
360Legendary, RetroArch, Flatpak and desktop files.")
361 (license license:gpl3+)))
362
363(define-public deja-dup
364 (package
365 (name "deja-dup")
366 (version "50.1")
367 (source (origin
368 (method url-fetch)
369 (uri (string-append "https://gitlab.gnome.org/World/deja-dup/-/archive/"
370 version "/deja-dup-" version ".tar.bz2"))
371 (sha256
372 (base32
373 "1jm20ccpcg3zagv0806cw888y8ygfdxzn411cijd13jfpbdr5cff"))))
374 (build-system meson-build-system)
375 (arguments
376 (list
377 #:glib-or-gtk? #t
378 #:configure-flags
379 #~(list
380 ;; Otherwise, the RUNPATH will lack the final path component.
381 (string-append "-Dc_link_args=-Wl,-rpath="
382 (assoc-ref %outputs "out") "/lib/deja-dup")
383 (string-append "-Dduplicity_command="
384 (search-input-file %build-inputs "/bin/duplicity"))
385 (string-append "-Drestic_command="
386 (search-input-file %build-inputs "/bin/restic")))
387 #:phases
388 #~(modify-phases %standard-phases
389 (add-after 'unpack 'patch-paths
390 (lambda* (#:key inputs #:allow-other-keys)
391 (let ((python (assoc-ref inputs "python")))
392 (substitute* '("libdeja/duplicity/DuplicityInstance.vala"
393 "libdeja/tests/scripts/instance-error.test")
394 (("/bin/rm")
395 (which "rm")))
396 (substitute* "libdeja/tests/runner.vala"
397 (("/bin/sh")
398 (which "sh")))
399 (substitute* "libdeja/tests/scripts/instance-error.test"
400 (("`which python3`")
401 (string-append python "/bin/python3"))))))
402 (add-after 'unpack 'patch-libgpg-error
403 (lambda* (#:key inputs #:allow-other-keys)
404 (let ((libgpg-error (assoc-ref inputs "libgpg-error")))
405 (substitute* "meson.build"
406 (("(gpgerror_libs = ).*" _ var)
407 (format #f "~a '-L~a/lib -lgpg-error'\n" var libgpg-error)))))))))
408 (inputs
409 (list bash-minimal
410 duplicity
411 gsettings-desktop-schemas
412 gtk
413 json-glib
414 libadwaita
415 libgpg-error
416 libnotify
417 libsecret
418 libsoup
419 libhandy
420 packagekit
421 python
422 python-pygobject
423 restic))
424 (native-inputs
425 (list appstream-glib
426 blueprint-compiler
427 desktop-file-utils
428 gettext-minimal
429 `(,glib "bin") ;for glib-compile-schemas
430 gobject-introspection
431 `(,gtk "bin") ;for gtk-update-icon-cache
432 itstool
433 pkg-config
434 vala))
435 (home-page "https://apps.gnome.org/DejaDup")
436 (synopsis "Simple backup tool, for regular encrypted backups")
437 (description
438 "Déjà Dup is a simple backup tool, for regular encrypted backups. It
439uses duplicity as the backend, which supports incremental backups and storage
440either on a local, or remote machine via a number of methods.")
441 (license license:gpl3+)))
442
443(define-public dialect
444 (package
445 (name "dialect")
446 (version "2.1.1")
447 (source (origin
448 (method git-fetch)
449 (uri (git-reference
450 (url "https://github.com/dialect-app/dialect")
451 (commit version)
452 (recursive? #t))) ;po module
453 (file-name (git-file-name name version))
454 (sha256
455 (base32
456 "0wac9r33zslyhvadyj7iaapskk7f9pfvia7zlqfksfhkaji6gmna"))))
457 (build-system meson-build-system)
458 (arguments
459 `(#:glib-or-gtk? #t))
460 (native-inputs (list blueprint-compiler
461 desktop-file-utils
462 `(,glib "bin")
463 gettext-minimal
464 gobject-introspection
465 `(,gtk "bin")
466 pkg-config))
467 (propagated-inputs (list gstreamer
468 libadwaita
469 libsoup
470 python
471 python-gtts
472 python-pygobject
473 python-requests))
474 (home-page "https://apps.gnome.org/app/app.drey.Dialect")
475 (synopsis "Translation application for GNOME")
476 (description
477 "Dialect is a simple translation application that uses Google Translate
478(default), LibreTranslate or Lingva Translate. It includes features
479like automatic language detection, text-to-speech and clipboard buttons.")
480 (license license:gpl3+)))
481
482(define-public fragments
483 ;; Last release on May 30th, 2024.
484 (let ((commit "8e35eb799bda65e691691a5c7732aa8e93650b8f")
485 (revision "0"))
486 (package
487 (name "fragments")
488 (version (git-version "3.0.1" revision commit))
489 (source
490 (origin
491 (method git-fetch)
492 (uri (git-reference
493 (url "https://gitlab.gnome.org/World/Fragments")
494 (commit commit)))
495 (file-name (git-file-name name version))
496 (sha256
497 (base32 "02m6r12znvjb31yfb477747ydwz267mzb2m0zny27z18b22a3z0v"))))
498 (build-system meson-build-system)
499 (arguments
500 (list
501 #:imported-modules `(,@%meson-build-system-modules
502 ,@%cargo-build-system-modules)
503 #:modules `(((guix build cargo-build-system) #:prefix cargo:)
504 (guix build meson-build-system)
505 (guix build utils))
506 #:phases
507 (with-extensions (list (cargo-guile-json))
508 #~(modify-phases %standard-phases
509 (add-after 'unpack 'prepare-for-build
510 (lambda _
511 (substitute* "meson.build"
512 (("(vcs_tag *)=[^\n]*" all prefix)
513 (string-append prefix "= '" #$commit "'")))
514 (substitute* "Cargo.toml"
515 (("ashpd = \\{ git = \"[^\"]*\"")
516 "ashpd = { version = \"0.12\""))
517 (substitute* "data/meson.build"
518 (("gtk_update_icon_cache: true")
519 "gtk_update_icon_cache: false")
520 (("update_desktop_database: true")
521 "update_desktop_database: false"))
522 (delete-file "Cargo.lock")))
523 ;; The meson 'configure phase changes to a different directory and
524 ;; we need it created before unpacking the crates.
525 (add-after 'configure 'prepare-cargo-build-system
526 (lambda args
527 (for-each
528 (lambda (phase)
529 (format #t "Running cargo phase: ~a~%" phase)
530 (apply (assoc-ref cargo:%standard-phases phase)
531 #:vendor-dir "vendor"
532 #:cargo-target #$(cargo-triplet)
533 args))
534 '(prepare-rust-crates
535 unpack-rust-crates
536 configure
537 check-for-pregenerated-files
538 patch-cargo-checksums))))))))
539 (native-inputs
540 (append
541 (list gettext-minimal
542 `(,glib "bin") ; for glib-compile-schemas
543 pkg-config
544 rust
545 `(,rust "cargo"))
546 (or (and=> (%current-target-system)
547 (compose list make-rust-sysroot))
548 '())))
549 (inputs (cons* dbus
550 glib
551 gtk
552 libadwaita
553 openssl
554 (cargo-inputs 'fragments)))
555 (home-page "https://apps.gnome.org/de/Fragments/")
556 (synopsis "Manage torrents")
557 (description "Fragments is a graphical bittorrent client built on top of
558Transmission, and can be used to control remote Transmission instances.")
559 (license license:gpl3+))))
560
561(define-public gnome-authenticator
562 (package
563 (name "gnome-authenticator")
564 (version "4.4.0")
565 (source
566 (origin
567 (method git-fetch)
568 (uri (git-reference
569 (url "https://gitlab.gnome.org/World/Authenticator.git/")
570 (commit version)))
571 (file-name (git-file-name name version))
572 (sha256
573 (base32 "0zavax35n048spx097ymiq31s8b879qwbg8xmcxcx73r6m823mic"))))
574 (build-system meson-build-system)
575 (arguments
576 (list
577 #:imported-modules `(,@%meson-build-system-modules
578 ,@%cargo-build-system-modules)
579 #:modules `(((guix build cargo-build-system) #:prefix cargo:)
580 (guix build meson-build-system)
581 (guix build utils))
582 #:phases
583 #~(modify-phases %standard-phases
584 (add-after 'unpack 'prepare-for-build
585 (lambda _
586 (substitute* "meson.build"
587 (("gtk_update_icon_cache: true")
588 "gtk_update_icon_cache: false")
589 (("update_desktop_database: true")
590 "update_desktop_database: false"))
591 ;; Help the tests find the Cargo.toml in the sources.
592 (substitute* "src/meson.build"
593 (("'test'") "'test', cargo_options"))
594 (delete-file "Cargo.lock")))
595 ;; The meson 'configure phase changes to a different directory and
596 ;; we need it created before unpacking the crates.
597 (add-after 'configure 'prepare-cargo-build-system
598 (lambda args
599 (for-each
600 (lambda (phase)
601 (format #t "Running cargo phase: ~a~%" phase)
602 (apply (assoc-ref cargo:%standard-phases phase)
603 #:vendor-dir "vendor"
604 #:cargo-target #$(cargo-triplet)
605 args))
606 '(prepare-rust-crates
607 unpack-rust-crates
608 configure
609 check-for-pregenerated-files
610 patch-cargo-checksums)))))))
611 (native-inputs
612 (append
613 (list gettext-minimal
614 `(,glib "bin") ; for glib-compile-schemas
615 pkg-config
616 rust
617 `(,rust "cargo"))
618 (or (and=> (%current-target-system)
619 (compose list make-rust-sysroot))
620 '())))
621 (inputs (cons* bash-minimal
622 glib
623 gstreamer
624 gst-plugins-base
625 gst-plugins-bad
626 gtk
627 libadwaita
628 openssl
629 pipewire ; Needed but not listed
630 sqlite
631 zbar
632 (cargo-inputs 'gnome-authenticator)))
633 (home-page "https://apps.gnome.org/Authenticator")
634 (synopsis "Generate two-factor codes")
635 (description "Simple application for generating Two-Factor Authentication
636Codes:
637
638It features:
639
640@itemize
641@item Time-based/Counter-based/Steam methods support
642@item SHA-1/SHA-256/SHA-512 algorithms support
643@item QR code scanner using a camera or from a screenshot
644@item Lock the application with a password
645@item Beautiful UI
646@item GNOME Shell search provider
647@item Backup/Restore from/into known applications like FreeOTP+,
648Aegis (encrypted / plain-text), andOTP, Google Authenticator
649@end itemize")
650 (license license:gpl3+)))
651
652(define-public gnome-mahjongg
653 (package
654 (name "gnome-mahjongg")
655 (version "3.40.1")
656 (source (origin
657 (method git-fetch)
658 (uri (git-reference
659 (url "https://gitlab.gnome.org/GNOME/gnome-mahjongg")
660 (commit version)))
661 (file-name (git-file-name name version))
662 (sha256
663 (base32
664 "0mc9379lmkcn08gr1wdny8gdwgdadkv11vxmgsiazcdy8bsj5860"))))
665 (build-system meson-build-system)
666 (arguments (list #:glib-or-gtk? #t))
667 (native-inputs
668 (list appstream-glib
669 gettext-minimal
670 `(,glib "bin") ;for glib-compile-resources
671 `(,gtk "bin") ;for gtk-update-icon-cache
672 itstool
673 pkg-config
674 vala))
675 (propagated-inputs
676 (list dconf))
677 (inputs
678 (list glib
679 gtk
680 libadwaita
681 librsvg))
682 (synopsis "Mahjongg tile-matching game")
683 (description "GNOME Mahjongg is a game based on the classic Chinese
684tile-matching game Mahjongg. It features multiple board layouts, tile themes,
685and a high score table.")
686 (home-page "https://wiki.gnome.org/Apps/Mahjongg")
687 (license license:gpl2+)))
688
689(define-public komikku
690 (package
691 (name "komikku")
692 (version "51.0.1")
693 (source
694 (origin
695 (method git-fetch)
696 (uri (git-reference
697 (url "https://codeberg.org/valos/Komikku/")
698 (commit (string-append "v" version))))
699 (file-name (git-file-name name version))
700 (sha256
701 (base32
702 "0l1zfqrzrldn8c5flsm9240d1d22li07vznb8bz32p4h9i68x24r"))))
703 (build-system meson-build-system)
704 (arguments
705 (list
706 #:glib-or-gtk? #t
707 #:phases
708 #~(modify-phases %standard-phases
709 (add-after 'unpack 'patch-sources
710 (lambda _
711 (substitute* "komikku/utils.py"
712 (("from komikku\\.servers import get_servers_list")
713 ;; code following that line should migrate old databases
714 ;; but the line itself results in an import error
715 "return data_dir_path"))))
716 (add-after 'unpack 'unpack-fonts
717 (lambda* (#:key inputs #:allow-other-keys)
718 (mkdir-p "data/fonts")
719 (copy-file (search-input-file
720 inputs
721 "share/fonts/opentype/0xPropo-Medium.otf")
722 "data/fonts/0xPropo-Medium.otf")))
723 (add-after 'unpack 'skip-gtk-update-icon-cache
724 (lambda _
725 (substitute* "meson.build"
726 (("([a-z_]*): true" all option)
727 (cond ; cond rather than match saves an import
728 ((string=? option "gtk_update_icon_cache")
729 (string-append option ": false"))
730 (else all))))))
731 (add-after 'glib-or-gtk-wrap 'python-and-gi-wrap
732 (lambda* (#:key outputs #:allow-other-keys)
733 (wrap-program (search-input-file outputs "bin/komikku")
734 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")))
735 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))
736 `("GDK_PIXBUF_MODULE_FILE" =
737 (,(getenv "GDK_PIXBUF_MODULE_FILE")))))))))
738 (inputs
739 (list bash-minimal
740 font-0xpropo
741 gtk
742 gtksourceview
743 libadwaita
744 libnotify
745 libsecret
746 python
747 python-beautifulsoup4
748 python-brotli
749 python-colorthief
750 ;; python-curl-cffi ;not packaged yet in Guix
751 python-dateparser
752 python-ebooklib
753 python-emoji
754 python-jxlpy
755 python-keyring
756 python-lxml
757 python-magic
758 python-natsort
759 python-piexif
760 python-pillow
761 python-pycairo
762 python-pygobject
763 python-pyjwt
764 python-pypdf
765 python-rarfile
766 python-requests
767 python-unidecode
768 webkitgtk
769 webp-pixbuf-loader))
770 (native-inputs
771 (list blueprint-compiler
772 desktop-file-utils
773 gettext-minimal
774 `(,glib "bin")
775 gobject-introspection
776 pkg-config))
777 (home-page "https://apps.gnome.org/Komikku")
778 (synopsis "Manga reader for GNOME")
779 (description "Komikku is an online/offline manga reader for GNOME,
780developed with the aim of being used with the Librem 5 phone.")
781 (license license:gpl3+)
782 (native-search-paths (list (search-path-specification
783 (variable "KOMIKKU_SERVERS_PATH")
784 (files '("lib/komikku/servers")))))))
785
786(define-public komikku-servers
787 (package
788 (name "komikku-servers")
789 (version "51.0.1")
790 (source
791 (origin
792 (method git-fetch)
793 (uri (git-reference
794 (url "https://codeberg.org/valos/Komikku/")
795 (commit (string-append "v" version))))
796 (file-name (git-file-name name version))
797 (sha256
798 (base32
799 "0l1zfqrzrldn8c5flsm9240d1d22li07vznb8bz32p4h9i68x24r"))))
800 (build-system copy-build-system)
801 (arguments
802 (list
803 #:install-plan
804 #~'(("komikku/servers" "lib/komikku/servers"))
805 #:modules '((guix build copy-build-system)
806 (guix build utils)
807 (ice-9 ftw))
808 #:phases
809 #~(modify-phases %standard-phases
810 (add-after 'unpack 'delete-conflicting-files
811 (lambda _
812 (with-directory-excursion "komikku/servers"
813 (for-each delete-file
814 (scandir "."
815 (lambda (f) (string-suffix? ".py" f)))))))
816 (add-after 'install 'compile
817 (lambda* (#:key outputs #:allow-other-keys)
818 (let ((site-dir (string-append (assoc-ref outputs "out")
819 "/lib/komikku/servers")))
820 (invoke "python" "-m" "compileall"
821 "--invalidation-mode=unchecked-hash" site-dir)))))))
822 (native-inputs (list python-wrapper))
823 (home-page "https://apps.gnome.org/Komikku")
824 (synopsis "Servers for Komikku")
825 (description "This package provides more recent servers for Komikku.")
826 (license license:gpl3+)))
827
828(define-public polari
829 (package
830 (name "polari")
831 (version "50.0")
832 (source (origin
833 (method url-fetch)
834 (uri (string-append "mirror://gnome/sources/polari/"
835 (version-major version)
836 "/polari-" version ".tar.xz"))
837 (sha256
838 (base32
839 "1nv7wlvfsz5r23v76gpnwhs4m9mgfjfn53nhb9yzs9a74swrca55"))))
840 (build-system meson-build-system)
841 (arguments
842 (list
843 #:glib-or-gtk? #t
844 #:phases
845 #~(modify-phases %standard-phases
846 (add-after 'unpack 'skip-gtk-update-icon-cache
847 (lambda _
848 (substitute* "meson.build"
849 (("gtk_update_icon_cache: true")
850 "gtk_update_icon_cache: false"))))
851 (add-after 'install 'fix-desktop-file
852 ;; Hard-code launcher to be on the safe side.
853 (lambda* (#:key outputs #:allow-other-keys)
854 (substitute* (search-input-file
855 outputs
856 "share/applications/org.gnome.Polari.desktop")
857 (("Exec=.*")
858 (string-append "Exec=" (search-input-file outputs "bin/polari")
859 "\n")))))
860 (add-after 'glib-or-gtk-wrap 'wrap-typelib
861 (lambda* (#:key outputs #:allow-other-keys)
862 (wrap-program (search-input-file outputs "bin/polari")
863 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))))))))
864 (native-inputs
865 (list desktop-file-utils
866 gettext-minimal
867 `(,glib "bin")
868 gobject-introspection
869 pkg-config
870 yelp-tools))
871 (inputs
872 (list bash-minimal
873 glib
874 gsettings-desktop-schemas
875 gspell
876 gtk
877 gjs
878 libadwaita
879 libsecret
880 libsoup
881 telepathy-glib
882 telepathy-logger
883 tinysparql))
884 (propagated-inputs
885 (list telepathy-idle
886 telepathy-mission-control))
887 (synopsis "Simple IRC Client")
888 (description
889 "Polari is a simple Internet Relay Chat (IRC) client that is designed to
890integrate seamlessly with the GNOME desktop.")
891 (home-page "https://wiki.gnome.org/Apps/Polari")
892 (license license:gpl2+)))
893
894(define-public raider
895 (package
896 (name "raider")
897 (version "1.3.1")
898 (source (origin
899 (method git-fetch)
900 (uri (git-reference
901 (url "https://github.com/ADBeveridge/raider/")
902 (commit (string-append "v" version))))
903 (file-name (git-file-name name version))
904 (sha256
905 (base32
906 "0ll9220d6qf9m7wdi5xhq69p8h8whs7l5h5nzdhlbn99qh5388bz"))))
907 (build-system meson-build-system)
908 (arguments
909 (list #:phases
910 #~(modify-phases %standard-phases
911 (add-after 'unpack 'patch-paths
912 (lambda* (#:key inputs #:allow-other-keys)
913 (substitute* "data/com.github.ADBeveridge.Raider.gschema.xml"
914 (("/usr/bin/shred")
915 (which "shred")))))
916 (add-after 'install 'wrap-program
917 (lambda* (#:key inputs outputs #:allow-other-keys)
918 (wrap-program (string-append (assoc-ref outputs "out")
919 "/bin/raider")
920 `("GSETTINGS_SCHEMA_DIR" =
921 (,(string-append (assoc-ref outputs "out")
922 "/share/glib-2.0/schemas")))))))))
923 (native-inputs
924 (list gettext-minimal
925 pkg-config
926 cmake-minimal
927 `(,glib "bin")
928 desktop-file-utils
929 itstool
930 gobject-introspection
931 blueprint-compiler
932 `(,gtk "bin")))
933 (inputs
934 (list libadwaita
935 gtk))
936 (home-page "https://github.com/ADBeveridge/raider")
937 (synopsis "Securely delete your files")
938 (description
939 "Raider is a simple shredding program built for GNOME. Also known as
940File Shredder, it uses the GNU Core Utility called shred to securely delete
941files.")
942 (license license:gpl3+)))
943
944(define-public resources
945 (package
946 (name "resources")
947 (version "1.10.1")
948 (source (origin
949 (method git-fetch)
950 (uri (git-reference
951 (url "https://github.com/nokyan/resources")
952 (commit (string-append "v" version))))
953 (file-name (git-file-name name version))
954 (sha256
955 (base32
956 "0472532a9cr83841g220lpylh7a9bddq2z72pw12428gkngk72dn"))))
957 (build-system meson-build-system)
958 (arguments
959 (list
960 #:glib-or-gtk? #t
961 #:imported-modules `(,@%meson-build-system-modules
962 ,@%cargo-build-system-modules)
963 #:modules `(((guix build cargo-build-system) #:prefix cargo:)
964 (guix build meson-build-system)
965 (guix build utils))
966 #:configure-flags #~(list "-Dprofile=default")
967 #:phases
968 (with-extensions (list (cargo-guile-json))
969 #~(modify-phases %standard-phases
970 (add-after 'unpack 'replace-commands
971 (lambda* (#:key inputs #:allow-other-keys)
972 (let ((PATH (search-path-as-list '("bin" "sbin")
973 (map cdr inputs))))
974 (substitute* '("src/utils/cpu.rs"
975 "src/utils/memory.rs")
976 (("Command::new\\(\"(.*)\"\\)" all command)
977 (format #f "Command::new(\"~a\")"
978 (search-path PATH command)))))))
979 (add-after 'unpack 'prepare-for-build
980 (lambda _
981 (substitute* "meson.build"
982 (("gtk_update_icon_cache: true")
983 "gtk_update_icon_cache: false")
984 (("update_desktop_database: true")
985 "update_desktop_database: false")
986 (("glib_compile_schemas: true")
987 "glib_compile_schemas: false"))
988 (delete-file "Cargo.lock")
989 (delete-file "lib/process_data/Cargo.lock")))
990 (add-after 'configure 'prepare-cargo-build-system
991 (lambda args
992 (for-each
993 (lambda (phase)
994 (format #t "Running cargo phase: ~a~%" phase)
995 (apply (assoc-ref cargo:%standard-phases phase)
996 #:vendor-dir "vendor"
997 #:cargo-target #$(cargo-triplet)
998 args))
999 '(unpack-rust-crates
1000 configure
1001 check-for-pregenerated-files
1002 patch-cargo-checksums))))))))
1003 (native-inputs
1004 (list gettext-minimal
1005 `(,glib "bin")
1006 pkg-config
1007 rust
1008 `(,rust "cargo")))
1009 (inputs
1010 (cons* dmidecode ;for dmidecode
1011 eudev ;for udevadm
1012 gtk
1013 libadwaita
1014 util-linux ;for lscpu
1015 (cargo-inputs 'resources)))
1016 (home-page "https://apps.gnome.org/Resources/")
1017 (synopsis "System resource and process monitor")
1018 (description "Resources is a monitor for system resources and processes for
1019GNOME. It can display usage and details of your CPU, memory, GPUs, NPUs,
1020network interfaces and block devices. It can also list and terminate running
1021graphical applications and processes.")
1022 (license license:gpl3+)))
1023
1024(define-public secrets
1025 (package
1026 (name "secrets")
1027 (version "11.1.1")
1028 (source
1029 (origin
1030 (method git-fetch)
1031 (uri (git-reference
1032 (url "https://gitlab.gnome.org/World/secrets")
1033 (commit version)))
1034 (file-name (git-file-name name version))
1035 (sha256
1036 (base32 "1lhj19zqwb12grrbh5xhgiilmr394s86vl1cqn4ix70zfd40wsy3"))))
1037 (build-system meson-build-system)
1038 (arguments
1039 (list
1040 #:glib-or-gtk? #t
1041 #:imported-modules (append %meson-build-system-modules
1042 %pyproject-build-system-modules)
1043 #:modules '((guix build meson-build-system)
1044 ((guix build pyproject-build-system) #:prefix py:)
1045 (guix build utils))
1046 #:phases
1047 #~(modify-phases %standard-phases
1048 (add-after 'unpack 'disable-postinstall-script
1049 (lambda _
1050 (substitute* "meson.build"
1051 (("gtk_update_icon_cache: true")
1052 "gtk_update_icon_cache: false"))
1053 (setenv "DESTDIR" "/")))
1054 (add-after 'glib-or-gtk-wrap 'wrap-binaries
1055 (lambda* (#:key inputs outputs #:allow-other-keys)
1056 (wrap-program (search-input-file outputs "bin/secrets")
1057 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")
1058 ,(py:site-packages inputs outputs)))
1059 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))
1060 `("GSETTINGS_SCHEMA_DIR" =
1061 (,(string-append #$output "/share/glib-2.0/schemas"))))))
1062 (add-after 'install 'add-install-to-pythonpath
1063 (assoc-ref py:%standard-phases 'add-install-to-pythonpath))
1064 (delete 'check)
1065 (add-after 'glib-or-gtk-compile-schemas 'check
1066 (assoc-ref %standard-phases 'check))
1067 (add-before 'check 'set-search-path
1068 (lambda _
1069 (setenv "GSETTINGS_SCHEMA_DIR" (string-append #$output "/share/glib-2.0/schemas/")))))))
1070 (native-inputs
1071 (list desktop-file-utils
1072 gettext-minimal
1073 `(,glib "bin")
1074 gobject-introspection
1075 pkg-config
1076 python
1077 python-pytest))
1078 (inputs
1079 (list adwaita-icon-theme
1080 bash-minimal
1081 glib
1082 gsettings-desktop-schemas
1083 gtk
1084 gtksourceview
1085 libadwaita
1086 libhandy
1087 libpwquality
1088 python
1089 python-pycairo
1090 python-pygobject
1091 python-pykcs11
1092 python-pykeepass
1093 python-pyotp
1094 python-validators
1095 python-yubico
1096 python-zxcvbn-rs-py))
1097 (home-page "https://gitlab.gnome.org/World/secrets")
1098 (synopsis "Password manager for the GNOME desktop")
1099 (description
1100 "Secrets is a password manager which makes use of the KeePass v4
1101format. It integrates perfectly with the GNOME desktop and provides an easy
1102and uncluttered interface for the management of password databases.")
1103 (license license:gpl3+)))
1104
1105(define-public textpieces
1106 (package
1107 (name "textpieces")
1108 (version "3.2.0")
1109 (source (origin
1110 (method git-fetch)
1111 (uri (git-reference
1112 (url "https://github.com/liferooter/textpieces")
1113 (commit (string-append "v" version))))
1114 (file-name (git-file-name name version))
1115 (sha256
1116 (base32
1117 "14zq2c7js80m4cq8wpdb3kyz5sw96l8znbz027w8s94gqhm632ff"))))
1118 (arguments
1119 '(;; The test suite fails to validate appstream file due to lack of
1120 ;; network access
1121 #:tests? #f
1122 #:glib-or-gtk? #t))
1123 (build-system meson-build-system)
1124 (native-inputs
1125 (list appstream-glib
1126 blueprint-compiler-0.4
1127 desktop-file-utils
1128 gettext-minimal
1129 `(,glib "bin")
1130 `(,gtk "bin")
1131 pkg-config
1132 vala))
1133 (inputs
1134 (list gtk
1135 gtksourceview
1136 json-glib
1137 libadwaita
1138 libgee
1139 python
1140 python-pygobject
1141 python-pyyaml))
1142 (home-page "https://github.com/liferooter/textpieces")
1143 (synopsis "Quick text processor")
1144 (description
1145 "Text Pieces is a tool for quick text transformations such as checksums,
1146encoding, decoding, etc.
1147
1148The basic features of Text Pieces are:
1149@itemize
1150@item Base64 encoding and decoding
1151@item SHA-1, SHA-2 and MD5 checksums
1152@item Prettify and minify JSON
1153@item Convert JSON to YAML and vice versa
1154@item Count lines, symbols and words
1155@item Escape and unescape string, URL and HTML
1156@item Remove leading and trailing whitespaces
1157@item Sort and reverse sort lines
1158@item Reverse lines and whole text
1159@item You can write your own scripts and create custom tools
1160@end itemize")
1161 (license license:gpl3)))