@@ -78,6 +78,7 @@
;;; Copyright © 2023 Dominik Delgado Steuter <d@delgado.nrw>
;;; Copyright © 2023 Zhu Zihao <all_but_last@163.com>
;;; Copyright © 2024 Dariqq <dariqq@posteo.net>
+;;; Copyright © 2024 Herman Rimm <herman@rimm.ee>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -356,6 +357,149 @@ (define-public brasero
features to enable users to create their discs easily and quickly.")
(license license:gpl2+)))
+(define-public fractal
+ (package
+ (name "fractal")
+ (version "6")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://gitlab.gnome.org/World/fractal")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1q6r4y11jrirfhb8lw1r0bnvwzr4dpkhdi2mdig6gnbcjvcwc65m"))
+ (modules '((guix build utils)))
+ (snippet '(begin
+ (substitute* "Cargo.toml"
+ ;; Use the version used by Matrix SDK.
+ (("qrcode = \"0.12\"") "qrcode = \"0.13\"")
+ ;; Use vendored matrix-sdk.
+ ((".*(git|rev) =.*") "")
+ (("\\[dependencies.matrix-sdk\\]" all)
+ (string-append all "\nversion = \"0.7.1\""))
+ (("\\[dependencies.matrix-sdk-ui\\]" all)
+ (string-append all "\nversion = \"0.7.0\"")))
+ ;; Adjust to ashpd 0.6.2 API change.
+ (substitute* "src/system_settings/linux.rs"
+ (("with_args") "with_args::<ClockFormat>")
+ (("ClockFormat::try_from.*") "setting {"))))))
+ (build-system cargo-build-system)
+ (arguments
+ `(#:install-source? #f
+ #:modules ((guix build cargo-build-system)
+ ((guix build meson-build-system) #:prefix meson:)
+ (guix build utils))
+ #:imported-modules ((guix build cargo-build-system)
+ (guix build cargo-utils)
+ (guix build json)
+ ,@%meson-build-system-modules)
+ #:cargo-inputs
+ (("rust-ashpd" ,rust-ashpd-0.6)
+ ("rust-djb-hash" ,rust-djb-hash-0.1)
+ ("rust-eyeball-im" ,rust-eyeball-im-0.4)
+ ("rust-futures-channel" ,rust-futures-channel-0.3)
+ ("rust-futures-util" ,rust-futures-util-0.3)
+ ("rust-geo-uri" ,rust-geo-uri-0.2)
+ ("rust-gettext-rs" ,rust-gettext-rs-0.7)
+ ("rust-gstreamer" ,rust-gstreamer-0.21)
+ ("rust-gstreamer-base" ,rust-gstreamer-base-0.21)
+ ("rust-gst-plugin-gtk4" ,rust-gst-plugin-gtk4-0.11)
+ ("rust-gstreamer-pbutils" ,rust-gstreamer-pbutils-0.21)
+ ("rust-gstreamer-play" ,rust-gstreamer-play-0.21)
+ ("rust-gstreamer-video" ,rust-gstreamer-video-0.21)
+ ("rust-gtk" ,rust-gtk4-0.7)
+ ("rust-html-escape" ,rust-html-escape-0.2)
+ ("rust-html2pango" ,rust-html2pango-0.6)
+ ("rust-html5gum" ,rust-html5gum-0.5)
+ ("rust-image" ,rust-image-0.24)
+ ("rust-indexmap" ,rust-indexmap-2)
+ ("rust-libadwaita" ,rust-libadwaita-0.5)
+ ("rust-libshumate" ,rust-libshumate-0.4)
+ ("rust-matrix-sdk" ,rust-matrix-sdk-0.7)
+ ("rust-matrix-sdk-ui" ,rust-matrix-sdk-ui-0.7)
+ ("rust-mime" ,rust-mime-0.3)
+ ("rust-mime-guess" ,rust-mime-guess-2)
+ ("rust-once-cell" ,rust-once-cell-1)
+ ("rust-oo7" ,rust-oo7-0.2)
+ ("rust-pulldown-cmark" ,rust-pulldown-cmark-0.9)
+ ("rust-qrcode" ,rust-qrcode-0.13)
+ ("rust-rand" ,rust-rand-0.8)
+ ("rust-regex" ,rust-regex-1)
+ ("rust-rmp-serde" ,rust-rmp-serde-1)
+ ("rust-rqrr" ,rust-rqrr-0.6)
+ ("rust-ruma" ,rust-ruma-0.9)
+ ("rust-secular" ,rust-secular-1)
+ ("rust-serde" ,rust-serde-1)
+ ("rust-serde-json" ,rust-serde-json-1)
+ ("rust-sourceview5" ,rust-sourceview5-0.7)
+ ("rust-strum" ,rust-strum-0.25)
+ ("rust-thiserror" ,rust-thiserror-1)
+ ("rust-tokio" ,rust-tokio-1)
+ ("rust-tracing" ,rust-tracing-0.1)
+ ("rust-tracing-subscriber" ,rust-tracing-subscriber-0.3)
+ ("rust-url" ,rust-url-2))
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'build 'configure-meson
+ (lambda* (#:key outputs #:allow-other-keys #:rest args)
+ (apply (assoc-ref meson:%standard-phases 'configure)
+ #:build-type "debugoptimized"
+ #:configure-flags '()
+ args)
+ (install-file "../source/.cargo/config" "cargo-home")
+ (copy-recursively "../source/guix-vendor" "guix-vendor")))
+ ;; Build and install desktop, GSettings, and GResource files.
+ (replace 'build
+ (lambda* (#:key outputs #:allow-other-keys #:rest args)
+ (apply (assoc-ref meson:%standard-phases 'build) args)))
+ ;; TODO: also try cargo test with --manifest specified.
+ (replace 'check
+ (lambda* (#:key outputs #:allow-other-keys #:rest args)
+ (apply (assoc-ref meson:%standard-phases 'check)
+ #:test-options '()
+ args)))
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys #:rest args)
+ (apply (assoc-ref meson:%standard-phases 'install) args)))
+ (add-after 'install 'glib-or-gtk-wrap
+ (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
+ (apply (assoc-ref meson:%standard-phases 'glib-or-gtk-wrap)
+ #:inputs inputs
+ #:outputs outputs
+ args))))))
+ (native-inputs (list meson ninja pkg-config))
+ (inputs
+ (list cairo
+ clang
+ desktop-file-utils
+ gdk-pixbuf
+ gettext-minimal
+ glib
+ (list glib "bin")
+ graphene
+ gsettings-desktop-schemas
+ gst-plugins-bad-minimal
+ gst-plugins-base
+ gstreamer
+ gtk
+ (list gtk "bin")
+ gtksourceview
+ libadwaita
+ libshumate
+ openssl
+ pango
+ pipewire
+ xdg-desktop-portal))
+ (home-page "https://gitlab.gnome.org/World/fractal")
+ (synopsis "Matrix messaging app for GNOME written in Rust")
+ (description
+ "Fractal is a Matrix messaging app for GNOME written in Rust. Its
+interface is optimized for collaboration in large groups, such as free
+software projects, and will fit all screens, big or small.")
+ (license license:gpl3+)))
+
;;; Minimal variant, used to break a cycle with Inkscape.
(define-public libcloudproviders-minimal
(package