diff --git a/extra-repos/systemd/gdm/0001-DOWNSTREAM-use-bin-touch-instead-of-usr-bin-touch.patch b/extra-repos/systemd/gdm/0001-DOWNSTREAM-use-bin-touch-instead-of-usr-bin-touch.patch
index 4e900e28fe914dd504807492fac08abc2484ef87..64a895b462e4c6dfffda7774c2e4608242568433 100644
--- a/extra-repos/systemd/gdm/0001-DOWNSTREAM-use-bin-touch-instead-of-usr-bin-touch.patch
+++ b/extra-repos/systemd/gdm/0001-DOWNSTREAM-use-bin-touch-instead-of-usr-bin-touch.patch
@@ -14,7 +14,7 @@ diff --git a/data/61-gdm.rules.in b/data/61-gdm.rules.in
 index a4f841bdf..481c5b4dd 100644
 --- a/data/61-gdm.rules.in
 +++ b/data/61-gdm.rules.in
-@@ -2,13 +2,13 @@ SUBSYSTEM!="pci", GOTO="gdm_pci_device_end"
+@@ -2,13 +2,13 @@
  ACTION!="bind", ACTION!="add", GOTO="gdm_pci_device_end"
  
  # cirrus
@@ -32,25 +32,26 @@ index a4f841bdf..481c5b4dd 100644
  
  # disable Wayland on Hi1710 chipsets
  ATTR{vendor}=="0x19e5", ATTR{device}=="0x1711", GOTO="gdm_disable_wayland"
-@@ -36,7 +36,7 @@ SUBSYSTEM!="drm", GOTO="gdm_nomodeset_end"
- # but keep it enabled for simple framebuffer drivers
- DRIVERS=="simple-framebuffer", GOTO="gdm_nomodeset_end"
+@@ -21,7 +21,7 @@
+ SUBSYSTEM!="drm", GOTO="gdm_hardware_gpu_end"
+ DRIVERS=="simple-framebuffer", GOTO="gdm_hardware_gpu_end"
  IMPORT{parent}="GDM_MACHINE_HAS_VIRTUAL_GPU"
 -ENV{GDM_MACHINE_HAS_VIRTUAL_GPU}!="1", RUN+="/usr/bin/touch /run/udev/gdm-machine-has-hardware-gpu"
 +ENV{GDM_MACHINE_HAS_VIRTUAL_GPU}!="1", RUN+="/bin/touch /run/udev/gdm-machine-has-hardware-gpu"
- IMPORT{cmdline}="nomodeset", GOTO="gdm_disable_wayland"
- LABEL="gdm_nomodeset_end"
+ LABEL="gdm_hardware_gpu_end"
  
-@@ -46,7 +46,7 @@ LABEL="gdm_nomodeset_end"
+ # The vendor nvidia driver has multiple modules that need to be loaded before GDM can make an
+@@ -30,7 +30,7 @@
  KERNEL!="nvidia", GOTO="gdm_nvidia_end"
  SUBSYSTEM!="module", GOTO="gdm_nvidia_end"
  ACTION!="add", GOTO="gdm_nvidia_end"
 -RUN+="/usr/bin/touch /run/udev/gdm-machine-has-vendor-nvidia-driver"
 +RUN+="/bin/touch /run/udev/gdm-machine-has-vendor-nvidia-driver"
  
- # Check if suspend/resume services necessary for working wayland support is available
- TEST{0711}!="/usr/bin/nvidia-sleep.sh", GOTO="gdm_disable_wayland"
-@@ -79,7 +79,7 @@ SUBSYSTEM!="drm", GOTO="gdm_hybrid_graphics_check_end"
+ # Import nvidia kernel parameters
+ IMPORT{program}="/bin/sh -c \"sed -e 's/: /=/g' -e 's/\([^[:upper:]]\)\([[:upper:]]\)/\1_\2/g' -e 's/[[:lower:]]/\U&/g' -e 's/^/NVIDIA_/' /proc/driver/nvidia/params\""
+@@ -59,8 +59,8 @@
+ SUBSYSTEM!="drm", GOTO="gdm_hybrid_graphics_check_end"
  ACTION!="add", GOTO="gdm_hybrid_graphics_check_end"
  IMPORT{program}="/bin/sh -c \"echo GDM_NUMBER_OF_GRAPHICS_CARDS=`ls -1d /sys/class/drm/card[0-9] | wc -l`\""
 -ENV{GDM_NUMBER_OF_GRAPHICS_CARDS}=="1", RUN+="/usr/bin/rm -f /run/udev/gdm-machine-has-hybrid-graphics"
@@ -59,7 +60,4 @@ index a4f841bdf..481c5b4dd 100644
 +ENV{GDM_NUMBER_OF_GRAPHICS_CARDS}!="1", RUN+="/bin/touch /run/udev/gdm-machine-has-hybrid-graphics"
  LABEL="gdm_hybrid_graphics_check_end"
  
- # If this is a hybrid graphics laptop with vendor nvidia driver, disable wayland
--- 
-2.39.2
-
+ # Disable wayland in situation where we're in a guest with a virtual gpu and host passthrough gpu
diff --git a/extra-repos/systemd/gdm/APKBUILD b/extra-repos/systemd/gdm/APKBUILD
index 32691420938e85fdcebc504c17b59bd1aa697b53..b5cdd23d90dcb4570b68677464279e4e9bcd6955 100644
--- a/extra-repos/systemd/gdm/APKBUILD
+++ b/extra-repos/systemd/gdm/APKBUILD
@@ -1,8 +1,8 @@
 # Forked from Alpine for systemd support
 
 pkgname=gdm
-pkgver=99947.0
-_pkgver=47.0
+pkgver=99948.0
+_pkgver=48.0
 pkgrel=0
 pkgdesc="GNOME display manager"
 url="https://wiki.gnome.org/Projects/GDM"
@@ -82,8 +82,8 @@ systemd() {
 }
 
 sha512sums="
-5578b2839ec78ef0b155a6ef6b82384495ef0f3ceb49f4bc7c656bf9dafa95b260148c7fc9b8295b71d4a2d33f6fe6c4a47485cd9eba5c0929f0492ba06e0893  gdm-47.0.tar.xz
-c5c57ee93f5a33db154632f0f81fa2e62a48635cfa5e51ada9cc969478df0ce15878446c639c8647c53d439f2eb4173e7fca0069eae31fbdcec541cc5f28cd28  0001-DOWNSTREAM-use-bin-touch-instead-of-usr-bin-touch.patch
+3e4a320cc6a0b43d65122bacd2b99531695f20ec809a767b957d63a511e00da017a9a4abe815596c6ad1398c5d427418d5c51bf6162216f60fdae5e8095bd305  gdm-48.0.tar.xz
+aa302c33c9b31e823ab98ca80c330c3f7eaa10d05c402cf111d78a35fbec82ce90bff34c19b713b6e352428c31df91f04bd01b58cae8968e130a991c73382020  0001-DOWNSTREAM-use-bin-touch-instead-of-usr-bin-touch.patch
 66611d49fc4c9578415a7e554834edcb9de99396bd0ca511dcfd4fb256e8a1cd1fd5f10464f4668ffe04799d919bc22ddb58e8bf272017edba69a7951522e63d  0003-DOWNSTREAM-pam-rename-common-to-base.patch
 f836cf0acdf148f2ae09ac28251b5126ce597f08254c43b1ec77596f75e1a3229926116c13f98554625be763e8d28415b27bd679b0a5de9f86bdca7857054c82  Xsession
 "
diff --git a/extra-repos/systemd/gnome-settings-daemon/APKBUILD b/extra-repos/systemd/gnome-settings-daemon/APKBUILD
index b4ce7e155c323b9f15de5c8965a4fb7a3436b228..354babdf23deeb6a8105c1d8ed38c6ccc0292771 100644
--- a/extra-repos/systemd/gnome-settings-daemon/APKBUILD
+++ b/extra-repos/systemd/gnome-settings-daemon/APKBUILD
@@ -1,9 +1,9 @@
 # Forked from Alpine for systemd support
 
 pkgname=gnome-settings-daemon
-pkgver=99947.2
-_pkgver=47.2
-pkgrel=1
+pkgver=99948.0
+_pkgver=48.0
+pkgrel=0
 pkgdesc="GNOME settings daemon"
 url="https://gitlab.gnome.org/GNOME/gnome-settings-daemon"
 arch="all"
@@ -73,5 +73,5 @@ package() {
 }
 
 sha512sums="
-fd3e358aa1f6a317dc49436965135dde204bd55fee9c96127d1208aafb60af3667fcc344a1667be1596892987f67ebab3fc7eefaeeefce82e1c65635e36c126f  gnome-settings-daemon-47.2.tar.xz
+0f79f6f690f86e37b2209012c45d2d4a97a0b01954b9f457af5c6b82d906f22e48eaa9c26a49f91cc20fec507f371d397820ab4c8505167ff290cb20c2c7f0c8  gnome-settings-daemon-48.0.tar.xz
 "
diff --git a/extra-repos/systemd/gnome-shell/APKBUILD b/extra-repos/systemd/gnome-shell/APKBUILD
index cbb6fa4fd7ae5d937675e74344bb513d9e5883d6..370eab185670bc6d9fc773084a60f97688088f9c 100644
--- a/extra-repos/systemd/gnome-shell/APKBUILD
+++ b/extra-repos/systemd/gnome-shell/APKBUILD
@@ -1,8 +1,8 @@
 # Forked from Alpine to add systemd!
 
 pkgname=gnome-shell
-pkgver=99947.5
-_pkgver=47.5
+pkgver=99948.0
+_pkgver=48.0
 pkgrel=0
 pkgdesc="GNOME shell"
 url="https://gitlab.gnome.org/GNOME/gnome-shell"
@@ -73,7 +73,6 @@ subpackages="
 	"
 source="https://download.gnome.org/sources/gnome-shell/${_pkgver%.*}/gnome-shell-$_pkgver.tar.xz
 	gsh.patch
-	schemas_req.patch
 	"
 # TODO: crossdirect disabled due to armv7 crosscompile failure on x86_64, see
 # https://gitlab.com/postmarketOS/pmaports/-/merge_requests/5115#note_1899890119
@@ -122,7 +121,6 @@ schemas() {
 }
 
 sha512sums="
-5c34d16350fc92d96ed87981eea0abb9fbd9bf793085eece286b2e7bd01b94bfeb123f801e875cecadfda20abd30294e6d46aed0e1ffbbbec57bb7e0aaaea90d  gnome-shell-47.5.tar.xz
+13fce232753223495fbf2d5e9623423efe75c2c5bdd093df6e7cfa2a25fe6f1e8cb7b7e8697d7afc42e55ce628364ec694b316a9d9794e088ac3dfe484cfaec1  gnome-shell-48.0.tar.xz
 ae4ac679bacd35948b44068e5a70407f473bd96986ee126abb1bdf066db5cbc2087a3ffae0b390286689cacbe8325870fd43663ba39f4f7543216e02bf083934  gsh.patch
-3fab1a0e141ae7c972e827935c6e4c52d927faf69dd25a5c72bbcdaa1b763d1bb58ea5cb074686145b29c3391f557b01920a8d3613bb83d15f073d661a447426  schemas_req.patch
 "
diff --git a/extra-repos/systemd/gnome-shell/schemas_req.patch b/extra-repos/systemd/gnome-shell/schemas_req.patch
deleted file mode 100644
index 42c974f85dea0159ade14c225a58261ca69663c9..0000000000000000000000000000000000000000
--- a/extra-repos/systemd/gnome-shell/schemas_req.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/meson.build b/meson.build
-index ec385b1..e0addb3 100644
---- a/meson.build
-+++ b/meson.build
-@@ -28,7 +28,7 @@ gjs_req = '>= 1.73.1'
- gtk_req = '>= 4.0'
- mutter_req = '>= 47.0'
- polkit_req = '>= 0.100'
--schemas_req = '>= 47.alpha'
-+schemas_req = '>= 47'
- systemd_req = '>= 246'
- ibus_req = '>= 1.5.19'
- gnome_desktop_req = '>= 40'
diff --git a/extra-repos/systemd/mutter/APKBUILD b/extra-repos/systemd/mutter/APKBUILD
index 2f31ad3c9afc536aa8c9b40e01140ecdfacaa7d7..ed348ed95b2cb22dc74ec116cf8ddb1db2f282a8 100644
--- a/extra-repos/systemd/mutter/APKBUILD
+++ b/extra-repos/systemd/mutter/APKBUILD
@@ -1,8 +1,8 @@
 # Forked from Alpine to add systemd!
 
 pkgname=mutter
-pkgver=99947.6
-_pkgver=47.6
+pkgver=99948.0
+_pkgver=48.0
 pkgrel=0
 pkgdesc="clutter-based window manager and compositor"
 url="https://wiki.gnome.org/Projects/Mutter/"
@@ -56,6 +56,8 @@ makedepends="
 	meson
 	pango-dev
 	pipewire-dev
+	py3-argcomplete
+	py3-docutils
 	startup-notification-dev
 	wayland-dev
 	wayland-protocols
@@ -71,6 +73,7 @@ subpackages="$pkgname-dbg $pkgname-dev $pkgname-doc $pkgname-lang $pkgname-schem
 source="https://download.gnome.org/sources/mutter/${_pkgver%.*}/mutter-$_pkgver.tar.xz
 	fixudev-req.patch
 	pcversion.patch
+	fix-freeze.patch
 	"
 builddir="$srcdir/$pkgname-$_pkgver"
 
@@ -101,7 +104,8 @@ package() {
 }
 
 sha512sums="
-8997096b3dab1e98532fd238b921fa7820621c0f0ac1701f4abfa37b1cc29095bb60ecee1135a6be147d06fcede86276b8a02d5dbca7d1dcba2d51c43821bfc9  mutter-47.6.tar.xz
-3e5dd59f2f2fd80edde13f64d70d52a023dec303fd8dbfa3ded0d77faf7643179f2ad74d4acd3450decb67deaf6ac85a7af5146fa96f33917b4363f884413af9  fixudev-req.patch
+48abd37a7b622835ccc9a5ca5aaa007744bd0a91764752ae64fc8385b0df700f58bdba11b7145d6bbc15649c84356c5f6107974c696c619cc272a939cb9743e3  mutter-48.0.tar.xz
+60eb075a88ca301470130d17371c1410220be0c7d5a929f6b528ec838a1133ebccf46d29f448060043e94c2edf4615ae431927911bede1972ac37f04ff9f29b4  fixudev-req.patch
 ec94fdecb7a3213903d013c1e6f48e02f8a1972ded16c3604627984cfce0936a0276d284c20e746eb91bf97249785bcf827f6fa55f1629e5290e19423d554e4d  pcversion.patch
+b7d0bea395c47558a089f75c2c30ac04da2ffc60d044364653098dcb30302aeeb839631fc51c5b5673d11f07fe85af645ea6fe9b2ebe107f8fc67541d5a8e3eb  fix-freeze.patch
 "
diff --git a/extra-repos/systemd/mutter/fix-freeze.patch b/extra-repos/systemd/mutter/fix-freeze.patch
new file mode 100644
index 0000000000000000000000000000000000000000..ae911463e3da20488f3a7b69f1d93203c7eb5d28
--- /dev/null
+++ b/extra-repos/systemd/mutter/fix-freeze.patch
@@ -0,0 +1,99 @@
+Patch-Source: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4338
+---
+From d6005b539ca42905dfaf1c3854540a559332b78e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com>
+Date: Mon, 17 Mar 2025 11:00:11 +0100
+Subject: [PATCH 1/2] kms/impl-device: Always catch pending KMS update in
+ _schedule_process
+
+Not only if the deadline timer is enabled. With the next commit, it'll
+be semi-expected to happen even if the deadline timer is disabled.
+
+Still leave the warning though, as a reminder that we'd rather prevent
+this outside of the KMS thread.
+
+Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4338>
+---
+ src/backends/native/meta-kms-impl-device.c | 19 +++++++++----------
+ 1 file changed, 9 insertions(+), 10 deletions(-)
+
+diff --git a/src/backends/native/meta-kms-impl-device.c b/src/backends/native/meta-kms-impl-device.c
+index 0135f22033..25cb1cbd5e 100644
+--- a/src/backends/native/meta-kms-impl-device.c
++++ b/src/backends/native/meta-kms-impl-device.c
+@@ -2081,17 +2081,8 @@ meta_kms_impl_device_schedule_process (MetaKmsImplDevice *impl_device,
+ 
+       if (ensure_deadline_timer_armed (impl_device, crtc_frame))
+         return;
+-
+-      if (crtc_frame->pending_update)
+-        {
+-          meta_kms_impl_device_do_process_update (impl_device, crtc_frame,
+-                                                  crtc_frame->crtc,
+-                                                  crtc_frame->pending_update,
+-                                                  META_KMS_UPDATE_FLAG_NONE);
+-        }
+     }
+-
+-  if (crtc_frame->pending_update)
++  else if (crtc_frame->pending_update)
+     {
+       MetaKmsImplDevicePrivate *priv =
+         meta_kms_impl_device_get_instance_private (impl_device);
+@@ -2100,6 +2091,14 @@ meta_kms_impl_device_schedule_process (MetaKmsImplDevice *impl_device,
+                       crtc_frame->pending_update, priv->deadline_timer_state);
+     }
+ 
++  if (crtc_frame->pending_update)
++    {
++      meta_kms_impl_device_do_process_update (impl_device, crtc_frame,
++                                              crtc_frame->crtc,
++                                              crtc_frame->pending_update,
++                                              META_KMS_UPDATE_FLAG_NONE);
++    }
++
+   meta_kms_device_set_needs_flush (meta_kms_crtc_get_device (crtc), crtc);
+ }
+ 
+-- 
+GitLab
+
+
+From a355f68d347830ab1dc8fba0bf409dd0aaf2804d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com>
+Date: Mon, 17 Mar 2025 10:50:13 +0100
+Subject: [PATCH 2/2] Revert "onscreen/native: Account for all posted frames"
+
+This reverts commit 9fc5fdc953f96cd91ad54fce6c50964e7ce57815.
+
+It caused freezes for some users.
+
+Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3974
+Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4338>
+---
+ src/backends/native/meta-onscreen-native.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/src/backends/native/meta-onscreen-native.c b/src/backends/native/meta-onscreen-native.c
+index bb7a2c4bd5..a8d7d7aa26 100644
+--- a/src/backends/native/meta-onscreen-native.c
++++ b/src/backends/native/meta-onscreen-native.c
+@@ -1672,7 +1672,6 @@ maybe_post_next_frame (CoglOnscreen *onscreen)
+     {
+       kms_update = meta_frame_native_steal_kms_update (frame_native);
+       post_nonprimary_plane_update (onscreen_native, frame, kms_update);
+-      onscreen_native->posted_frame = clutter_frame_ref (frame);
+       return;
+     }
+ 
+@@ -2127,7 +2126,6 @@ meta_onscreen_native_finish_frame (CoglOnscreen *onscreen,
+     }
+ 
+   post_nonprimary_plane_update (onscreen_native, frame, kms_update);
+-  onscreen_native->posted_frame = clutter_frame_ref (frame);
+ 
+   clutter_frame_set_result (frame, CLUTTER_FRAME_RESULT_PENDING_PRESENTED);
+ }
+-- 
+GitLab
+
diff --git a/extra-repos/systemd/mutter/fixudev-req.patch b/extra-repos/systemd/mutter/fixudev-req.patch
index 33553cf98aa1c651f2538dc2a26b12bce0b375e3..d5ffd7b2ed2b50a55c1091911cdae4e23c51eb14 100644
--- a/extra-repos/systemd/mutter/fixudev-req.patch
+++ b/extra-repos/systemd/mutter/fixudev-req.patch
@@ -5,10 +5,10 @@ diff --git a/meson.build b/meson.build
 index 2605a65..3550496 100644
 --- a/meson.build
 +++ b/meson.build
-@@ -218,7 +218,7 @@ endif
+@@ -259,7 +259,7 @@
+     error('The udev support requires logind')
+   endif
  
- have_libgudev = get_option('udev')
- if have_libgudev
 -  libudev_dep = dependency('libudev', version: udev_req)
 +  libudev_dep = dependency('libudev')
    gudev_dep = dependency('gudev-1.0', version: gudev_req)