Subject: [bug#44400] [PATCH v3 1/5] WIP: gnu: Add phosh.

From: phodina <[email-masked]>
Date: Thu, 24 Mar 2022 13:32:53 +0000

Hi Jonathan,

the current patch set is based on the master branch. Running the Guix command
gives me 26 dependent packages - not a massive number.
```
./pre-inst-env guix refresh --list-dependent libhandy
Building the following 26 packages would ensure 54 dependent packages are rebuilt:
[email-masked] [email-masked] [email-masked] [email-masked] [email-masked] [email-masked]
[email-masked] arc-theme@20210412 gnome-shell-extension-gsconnect@48
 [email-masked] [email-masked] [email-masked] [email-masked] [email-masked]
 [email-masked] [email-masked] [email-masked] [email-masked] [email-masked] [email-masked]
 [email-masked] [email-masked] [email-masked] [email-masked] [email-masked] [email-masked]
```

I've given up on meson build system and just build it as a regular Rust package
with cargo build system.

Btw squeekboard is a requirement for Phosh to work as stated by Guido [1].

See the patches attached.

The current issue I face is probably due to the fact I fix the requirements
as squeekboard depends on older versions of packages that are no longer in Guix.

Should I bring the packages back or attempt to patch the Phosh upstream to use
newer versions of Rust crates?

> Regarding that schema issue: does it occur as well when you install the
> phosh package?

I'm stuck with squeekboard with these errors:

```
Compiling rs v0.1.0 (/tmp/guix-build-squeekboard-1.17.0.drv-0/source)
error[E0599]: no function or associated item named `from_glib_none` found for struct `gtk::Widget` in the current scope
   --> src/drawing.rs:262:40
    |
262 |     let widget = unsafe { gtk::Widget::from_glib_none(keyboard.0) };
    |                                        ^^^^^^^^^^^^^^ function or associated item not found in `gtk::Widget`
    |
    = help: items from traits can only be used if the trait is in scope
help: the following trait is implemented but not in scope; perhaps add a `use` for it:
    |
3   | use glib::translate::FromGlibPtrNone;
    |

error[E0599]: no method named `unwrap` found for struct `glib::variant::Variant` in the current scope
   --> src/popover.rs:136:52
    |
136 |         let inputs = settings.get_value("sources").unwrap();
    |                                                    ^^^^^^ method not found in `glib::variant::Variant`

error[E0308]: mismatched types
   --> src/popover.rs:145:13
    |
145 |             &variants::ArrayPairString(inputs).to_variant(),
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `glib::variant::Variant`, found struct `glib::Variant`
    |
    = note: expected reference `&glib::variant::Variant`
               found reference `&glib::Variant`
    = note: perhaps two different versions of crate `glib` are being used?

error[E0599]: no function or associated item named `from_glib_none` found for struct `gtk::Widget` in the current scope
   --> src/popover.rs:253:40
    |
253 |     let window = unsafe { gtk::Widget::from_glib_none(window.0) };
    |                                        ^^^^^^^^^^^^^^ function or associated item not found in `gtk::Widget`
    |
    = help: items from traits can only be used if the trait is in scope
help: the following trait is implemented but not in scope; perhaps add a `use` for it:
    |
3   | use glib::translate::FromGlibPtrNone;
    |

error[E0599]: no method named `unwrap` found for struct `glib::variant::Variant` in the current scope
   --> src/popover.rs:264:56
    |
264 |             let inputs = settings.get_value("sources").unwrap();
    |                                                        ^^^^^^ method not found in `glib::variant::Variant`

error[E0308]: mismatched types
   --> src/popover.rs:340:18
    |
340 |             Some(current_layout_name.to_variant().type_()),
    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `glib::variant_type::VariantTy`, found struct `VariantTy`
    |
    = note: expected reference `&glib::variant_type::VariantTy`
               found reference `&VariantTy`
    = note: perhaps two different versions of crate `glib` are being used?

error[E0308]: mismatched types
   --> src/popover.rs:341:13
    |
341 |             &current_layout_name.to_variant()
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `glib::variant::Variant`, found struct `glib::Variant`
    |
    = note: expected reference `&glib::variant::Variant`
               found reference `&glib::Variant`
    = note: perhaps two different versions of crate `glib` are being used?

error[E0308]: mismatched types
   --> src/popover.rs:387:9
    |
387 |         Continue(false)
    |         ^^^^^^^^^^^^^^^ expected struct `glib::Continue`, found struct `gdk::prelude::Continue`
    |
    = note: perhaps two different versions of crate `glib` are being used?

error[E0599]: no method named `to_glib_full` found for struct `CssProvider` in the current scope
   --> src/style.rs:64:18
    |
64  |         provider.to_glib_full()
    |                  ^^^^^^^^^^^^ method not found in `CssProvider`
    |
   ::: /tmp/guix-build-squeekboard-1.17.0.drv-0/source/guix-vendor/rust-glib-0.9.3.tar.gz/src/translate.rs:279:8
    |
279 |     fn to_glib_full(&self) -> P {
    |        ------------ the method is available for `CssProvider` here
    |
    = help: items from traits can only be used if the trait is in scope
help: the following trait is implemented but not in scope; perhaps add a `use` for it:
    |
29  |     use glib::translate::ToGlibPtr;
    |

error[E0599]: the method `get_property` exists for reference `&gtk::Settings`, but its trait bounds were not satisfied
   --> src/style.rs:104:44
    |
104 |       let prop = |s: &gtk::Settings, name| s.get_property(name);
    |                                              ^^^^^^^^^^^^ method cannot be called on `&gtk::Settings` due to unsatisfied trait bounds
    |
   ::: /tmp/guix-build-squeekboard-1.17.0.drv-0/source/guix-vendor/rust-gtk-0.8.1.tar.gz/src/auto/settings.rs:23:1
    |
23  | / glib_wrapper! {
24  | |     pub struct Settings(Object<gtk_sys::GtkSettings, gtk_sys::GtkSettingsClass, SettingsClass>) @implements StyleProvider;
25  | |
26  | |     match fn {
27  | |         get_type => || gtk_sys::gtk_settings_get_type(),
28  | |     }
29  | | }
    | | -
    | | |
    | |_doesn't satisfy `gtk::Settings: glib::ObjectExt`
    |   doesn't satisfy `gtk::Settings: glib::ObjectType`
    |
    = note: the following trait bounds were not satisfied:
            `gtk::Settings: glib::ObjectType`
            which is required by `gtk::Settings: glib::ObjectExt`
            `&gtk::Settings: glib::ObjectType`
            which is required by `&gtk::Settings: glib::ObjectExt`
    = help: items from traits can only be used if the trait is in scope
help: the following trait is implemented but not in scope; perhaps add a `use` for it:
    |
21  | use gdk::prelude::ObjectExt;
    |

Some errors have detailed explanations: E0308, E0599.
For more information about an error, try `rustc --explain E0308`.
error: could not compile `rs` due to 10 previous errors
error: in phase 'build': uncaught exception:
%exception #<&invoke-error program: "cargo" arguments: ("build" "--release") exit-status: 101 term-signal: #f stop-signal: #f>
```

[1] https://gitlab.gnome.org/World/Phosh/phosh/-/issues/692

----
Petr

From d226b385bda38b1df7d9a0394fae881841371bdd Mon Sep 17 00:00:00 2001
From: Petr Hodina <[email-masked]>
Date: Mon, 10 Jan 2022 14:40:17 +0100
Subject: [PATCH v3 1/5] gnu: Add rust-xkbcommon-0.4.

* gnu/packages/crates-io.scm (rust-xkbcommon-0.4): New variable.

diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index 90c95b6368..21d5eb868b 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -85,6 +85,7 @@ (define-module (gnu packages crates-io)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
+  #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages webkit)
@@ -71076,6 +71077,36 @@ (define-public rust-xml-rs-0.8
     (description "An XML library in pure Rust.")
     (license license:expat)))
 
+(define-public rust-xkbcommon-0.4
+  (package
+    (name "rust-xkbcommon")
+    (version "0.4.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "xkbcommon" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "1kig3drxm3jbjlyxv9vxawpi2x32w2z9jxysxvg53gfsgmgym87x"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:cargo-inputs
+        (("rust-libc" ,rust-libc-0.2)
+         ("rust-memmap" ,rust-memmap-0.7)
+         ("rust-xcb" ,rust-xcb-0.9))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-version-requirements
+           (lambda _
+             (substitute* "Cargo.toml"
+               (("0.8")
+                ,(package-version rust-xcb-0.9))))))))
+    (inputs (list libxkbcommon))
+    (home-page "https://github.com/rust-x-bindings/xkbcommon-rs")
+    (synopsis "Rust bindings and wrappers for libxkbcommon")
+    (description "Rust bindings and wrappers for libxkbcommon")
+    (license license:expat)))
+
 (define-public rust-xml-rs-0.7
   (package
     (name "rust-xml-rs")
-- 
2.34.0

From f03a75ceeda012d486a68b06fd70beab390f3dbc Mon Sep 17 00:00:00 2001
From: Petr Hodina <[email-masked]>
Date: Mon, 27 Dec 2021 20:23:25 +0100
Subject: [PATCH v3 4/5] gnu: Add squeekboard.

* gnu/packages/gnome.scm (squeekboard): New variable.

diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 0bf5a8ed2f..a481b1db79 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -566,6 +566,70 @@ (define-public seed
     (home-page "https://wiki.gnome.org/Projects/Seed")
     (license license:lgpl2.0+)))
 
+(define-public squeekboard
+  (package
+    (name "squeekboard")
+    (version "1.17.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+	   (url "https://gitlab.gnome.org/World/Phosh/squeekboard")
+	   (commit (string-append "v" version))))
+       (sha256
+        (base32
+         "1612s6cim46a4rqzqpvz46m4l4kgdnf52bxgrpx7p4fp8r1qx3jk"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:modules ((guix build cargo-build-system)
+                  (guix build utils)
+                  (ice-9 textual-ports))
+	  #:cargo-inputs
+       (("rust-cairo-sys-rs" ,rust-cairo-sys-rs-0.9)
+        ("rust-cairo-rs" ,rust-cairo-rs-0.7)
+        ("rust-clap" ,rust-clap-2)
+        ("rust-gdk" ,rust-gdk-0.12)
+        ("rust-gio" ,rust-gio-0.7)
+        ("rust-glib-sys" ,rust-glib-sys-0.9)
+        ("rust-gtk" ,rust-gtk-0.8)
+	    ("rust-gtk-sys" ,rust-gtk-sys-0.9)
+	    ("rust-bitflags" ,rust-bitflags-1)
+        ("rust-maplit" ,rust-maplit-1)
+		("rust-serde" ,rust-serde-1)
+		("rust-serde-yaml" ,rust-serde-yaml-0.8)
+		("rust-xkbcommon" ,rust-xkbcommon-0.4))
+		#:phases
+ 		(modify-phases %standard-phases
+		 (add-before 'patch-cargo-checksums 'fix-requirements
+		   (lambda* _
+				(substitute* "Cargo.toml.in"
+				(("@path@/") ""))
+				(substitute* "Cargo.deps"
+				(("1.2") ,(version-major+minor (package-version
+				rust-bitflags-1)))
+				(("0.7") ,(version-major+minor (package-version
+				rust-gtk-0.8)))
+				(("0.11") ,(version-major+minor (package-version
+				rust-gdk-0.12)))
+				(("2.33") ,(version-major+minor (package-version
+				rust-clap-2))))))
+         (add-after 'fix-requirements 'prepare-cargo-toml
+           (lambda* (#:key source #:allow-other-keys)
+		   (let* ((cargo-toml-in (call-with-input-file "Cargo.toml.in" get-string-all))
+		          (cargo-deps (call-with-input-file "Cargo.deps" get-string-all))
+		          (cargo-toml (open-file "Cargo.toml" "w")))
+                (display cargo-toml-in cargo-toml)
+                (display cargo-deps cargo-toml)
+                (close-output-port cargo-toml)))))))
+	(native-inputs (list wayland-protocols))
+    (inputs
+     (list gtk dbus))
+    (home-page "https://gitlab.gnome.org/World/Phosh/squeekboard")
+    (synopsis "On-screen-keyboard input method for Wayland")
+    (description "This package provides an on-screen-keyboard input
+	method for Wayland.")
+    (license license:gpl3+)))
+
 (define-public libdmapsharing
   (package
     (name "libdmapsharing")
-- 
2.34.0

From 228be2a154607fa97d561366bd6f7e99fbcf61ab Mon Sep 17 00:00:00 2001
From: Petr Hodina <[email-masked]>
Date: Wed, 17 Nov 2021 10:58:55 +0100
Subject: [PATCH v3 2/5] gnu: Add phoc.

* gnu/packages/gnome.scm (phoc): New variable.

diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index bc99454b1b..0bf5a8ed2f 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -69,6 +69,7 @@
 ;;; Copyright © 2022 Pierre Langlois <[email-masked]>
 ;;; Copyright © 2022 John Kehayias <[email-masked]>
 ;;; Copyright © 2022 Denis 'GNUtoo' Carikli <[email-masked]>
+;;; Copyright © 2021, 2022 Petr Hodina <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1168,6 +1169,81 @@ (define-public mm-common
     (home-page "https://gitlab.gnome.org/GNOME/mm-common")
     (license license:gpl2+)))
 
+(define-public phoc
+  (package
+    (name "phoc")
+    (version "0.9.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.gnome.org/World/Phosh/phoc")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "18nwjbyjxq11ppfdky3bnfh9pr23fjl2543jwva0iz1n6c8mkpd9"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:tests? #f                      ; requires server connection
+       #:phases
+       (modify-phases %standard-phases
+        ; source of wlroots required in subprojects/wlroots folder
+         (add-after 'unpack 'get-wlroots
+           (lambda* (#:key inputs #:allow-other-keys)
+             (copy-recursively (assoc-ref inputs "wlroots-librem5-source")
+                               "subprojects/wlroots")
+             #t))
+         (add-after 'get-wlroots 'patch-paths
+           (lambda _
+             (substitute* "src/server.c"
+               (("/bin/sh") (which "sh")))
+             (substitute* "tests/test-run.c"
+               (("/bin/true") (which "true"))
+               (("/bin/false") (which "false")))
+             #t))
+         ;; Those check a running phoc server against some screenshots in the repo.
+         ;; They differ only by the mouse cursor (shadow vs. no shadow).
+         (add-before 'patch-paths 'disable-failing-tests
+           (lambda _
+             (substitute* "tests/meson.build"
+               (("'layer-shell',") "")
+               (("'xdg-shell',") "")
+               (("'phosh'") ""))
+             #t))
+         (add-before 'check 'pre-check
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; Tests require a running X server.
+             (system "Xvfb :1 &")
+             (setenv "DISPLAY" ":1")
+             #t)))))
+    (native-inputs
+     `(("gobject-introspection" ,gobject-introspection)
+       ("glib:bin" ,glib "bin")
+       ("gnome-desktop" ,gnome-desktop)
+       ("libinput" ,libinput)
+       ("libxkbcommon" ,libxkbcommon)
+       ("pkg-config" ,pkg-config)
+       ("wayland" ,wayland)
+       ("wayland-protocols" ,wayland-protocols)
+       ("wlroots-librem5-source"        ; patched version for Librem 5
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://source.puri.sm/Librem5/wlroots.git")
+                 (commit "5413b1ec61c6e3390929db595c0ec92f92ea2594")))
+           (file-name (string-append name "-" version "-checkout"))
+           (sha256
+            (base32
+             "02q70244sfs2jzl8mxsvd51rrv59jxllyss821xgg0cmq49rgq5w"))))
+       ("xorg-server" ,xorg-server-for-tests)))
+    (propagated-inputs
+     `(("mutter" ,mutter)))
+    (synopsis "Wayland compositor for mobile phones")
+    (description "Phoc is a wayland compositor for mobile phones based on
+        wlroots.")
+    (home-page "https://gitlab.gnome.org/World/Phosh/phoc")
+    (license license:gpl3+)))
+
 (define-public phodav
   (package
    (name "phodav")
-- 
2.34.0

From b87ce61b64b067bf60341e476bae37db7880a35a Mon Sep 17 00:00:00 2001
From: Petr Hodina <[email-masked]>
Date: Wed, 17 Nov 2021 11:10:16 +0100
Subject: [PATCH v3 3/5] gnu: Add callaudiod.

* gnu/packages/audio.scm (callaudiod): New variable.

diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 13e0f02837..3b452954d7 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -36,6 +36,7 @@
 ;;; Copyright © 2020 Michael Rohleder <[email-masked]>
 ;;; Copyright © 2021 jgart <[email-masked]>
 ;;; Copyright © 2021 Aleksandr Vityazev <[email-masked]>
+;;; Copyright © 2021, 2022 Petr Hodina <[email-masked]>
 ;;; Copyright © 2022 Arjan Adriaanse <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -1076,6 +1077,33 @@ (define-public calf
     ;; The plugins are released under LGPLv2.1+
     (license (list license:lgpl2.1+ license:gpl2+))))
 
+(define-public callaudiod
+  (package
+    (name "callaudiod")
+    (version "0.1.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.com/mobian1/callaudiod")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "04pn6f9p2n0qsy7cbchmnqlmjfvn908vdryc4y38srnj3xiq212l"))))
+    (build-system meson-build-system)
+    (native-inputs `(("alsa-lib" ,alsa-lib)
+                     ("glib" ,glib)
+                     ("glib" ,glib "bin")
+                     ("pkg-config" ,pkg-config)
+                     ("pulseaudio" ,pulseaudio)))
+    (inputs `(("alsa-utils" ,alsa-utils)
+              ("pulseaudio" ,pulseaudio)))
+    (synopsis "Call audio routing daemon")
+    (description "This package provides a daemon for dealing with audio routing
+during phone calls.  It provides a D-Bus interface.")
+    (home-page "https://gitlab.com/mobian1/callaudiod")
+    (license license:gpl3+)))
+
 (define-public caps-plugins-lv2
   (package
     (name "caps-plugins-lv2")
-- 
2.34.0

From 1fc1bca4767f9876dd6d6cb102e76ab8d8bca120 Mon Sep 17 00:00:00 2001
From: Petr Hodina <[email-masked]>
Date: Wed, 17 Nov 2021 11:14:15 +0100
Subject: [PATCH v3 5/5] gnu: Add phosh.

* gnu/packages/gnome.scm (phosh): New variable.

diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index a481b1db79..c2e1223725 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -91,6 +91,7 @@ (define-module (gnu packages gnome)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages aidc)
   #:use-module (gnu packages aspell)
+  #:use-module (gnu packages audio)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages avahi)
   #:use-module (gnu packages backup)
@@ -1353,6 +1354,112 @@ (define-public phodav
    (home-page "https://wiki.gnome.org/phodav")
    (license license:lgpl2.1+)))
 
+(define-public phosh
+  (package
+    (name "phosh")
+    (version "0.14.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.gnome.org/World/Phosh/phosh")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0fhp2jmwjzzxd66b4figc2wdpzdjycpq3cf4lx3z04dzl9vmw65a"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:modules ((guix build meson-build-system)
+	              ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
+				  (guix build utils)
+				  (ice-9 match))
+       #:imported-modules ((guix build glib-or-gtk-build-system)
+	                       ,@%meson-build-system-modules)
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'get-libgnome-volume-control
+           (lambda* (#:key inputs #:allow-other-keys)
+             (copy-recursively (assoc-ref inputs "libgnome-volume-control-source")
+                               "subprojects/gvc")))
+         (add-after 'unpack 'get-libcall-ui
+           (lambda* (#:key inputs #:allow-other-keys)
+             (copy-recursively (assoc-ref inputs "libcall-ui")
+                               "subprojects/libcall-ui")))
+         ;; we use elogind instead of systemd
+         (add-after 'unpack 'patch-systemd
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "meson.build"
+               (("libsystemd") "libelogind"))
+             (substitute* "src/meson.build"
+               (("libsystemd_dep") "libelogind_dep"))
+             (substitute* "src/util.c"
+               (("systemd/sd-login.h") "elogind/sd-login.h"))
+             (substitute* "src/main.c"
+               (("systemd/sd-daemon.h") "elogind/sd-daemon.h"))))
+         (add-before 'configure 'fix-phoc-path
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "data/phosh.in"
+               (("@bindir@") (string-append (assoc-ref inputs "phoc") "/bin")))))
+		 (add-after 'install 'glib-or-gtk-compile-schemas
+		  (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
+		 (add-after 'install 'glib-or-gtk-wrap
+		  (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))
+         (delete 'check)    ; TODO: needs a running wayland compositor
+         )))
+    (native-inputs
+     `(("elogind" ,elogind)
+       ("gcr" ,gcr)
+       ("gettext" ,gettext-minimal)
+       ("git" ,git)
+       ("glib:bin" ,glib "bin")
+	   ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
+       ("gnome-desktop" ,gnome-desktop)
+       ("gtk+:bin" ,gtk+ "bin")
+       ("pkg-config" ,pkg-config)))
+	(inputs `(
+       ("libgnome-volume-control-source" ; needs to be present in subprojects/gvc folder
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://gitlab.gnome.org/GNOME/libgnome-volume-control.git")
+                 (commit "ae1a34aafce7026b8c0f65a43c9192d756fe1057")))
+           (file-name (string-append name "-" version "-checkout"))
+           (sha256
+            (base32
+             "0a4qh5pgyjki904qf7qmvqz2ksxb0p8xhgl2aixfbhixn0pw6saw"))))
+       ("libcall-ui" ; needs to be present in subprojects/libcall-ui folder
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://gitlab.gnome.org/World/Phosh/libcall-ui")
+                 (commit "465f6add090b623fb80c6c5cbb9ab2880ff531a4")))
+           (file-name (string-append name "-" version "-checkout"))
+           (sha256
+            (base32
+             "1as857npl2yra4zh4bfph9wvhvjck53i2qp3zzbv3mbpi36nscfr"))))
+       ("callaudiod" ,callaudiod)
+       ("libsecret" ,libsecret)
+       ("linux-pam" ,linux-pam)
+       ("network-manager" ,network-manager)
+       ("polkit" ,polkit)
+       ("upower" ,upower)
+       ("feedbackd" ,feedbackd)
+       ("libhandy" ,libhandy)
+       ("libgudev" ,libgudev)
+       ("pulseaudio" ,pulseaudio)))
+    (propagated-inputs
+     ;; "missing" schema files
+     ;; org.gnome.DejaDup.File org.guido-berhoerster.code.package-update-indicator org.blueberry
+     `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas) ;org.gnome.desktop.wm.keybindings
+       ("gnome-session" ,gnome-session)
+       ("mutter" ,mutter)               ;org.gnome.mutter.keybindings
+       ("network-manager-applet" ,network-manager-applet) ;org.gnome.nm-applet
+       ("phoc" ,phoc)))                 ;sm.puri.phoc
+    (synopsis "Wayland shell for GNOME on mobile devices")
+    (description "Phosh is a pure Wayland prototype intended for mobile devices.")
+    (home-page "https://gitlab.gnome.org/World/Phosh/phosh")
+    (license license:gpl3+)))
+
 (define-public gnome-color-manager
   (package
    (name "gnome-color-manager")
-- 
2.34.0