diff --git a/pkgbuilds/aquamarine/.omarchy/package.json b/pkgbuilds/aquamarine/.omarchy/package.json new file mode 100644 index 00000000..7ddd3305 --- /dev/null +++ b/pkgbuilds/aquamarine/.omarchy/package.json @@ -0,0 +1,6 @@ +{ + "source": "local", + "channels": [ + "edge" + ] +} diff --git a/pkgbuilds/aquamarine/0001-drm-re-read-possible-CRTCs-when-rescanning-connectors.patch b/pkgbuilds/aquamarine/0001-drm-re-read-possible-CRTCs-when-rescanning-connectors.patch new file mode 100644 index 00000000..bbf70430 --- /dev/null +++ b/pkgbuilds/aquamarine/0001-drm-re-read-possible-CRTCs-when-rescanning-connectors.patch @@ -0,0 +1,36 @@ +From 375e80ec3826b54618fdd5f2db708c0f2bb936ae Mon Sep 17 00:00:00 2001 +From: Marcelo Alcantara +Date: Wed, 16 Sep 2026 00:39:04 +1000 +Subject: [PATCH] drm: re-read possible CRTCs when rescanning connectors + +A driver can change a connector's possible CRTCs at runtime. Apple's DCP +driver narrows a Type-C port's encoder to the display pipeline the fabric +routed it to and relies on the following hotplug for userspace to re-read +it. possibleCrtcs was only read when the connector was first created, so a +rerouted port kept a stale mask and was never assigned its now-free CRTC +until the compositor restarted. +--- + src/backend/drm/DRM.cpp | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/src/backend/drm/DRM.cpp b/src/backend/drm/DRM.cpp +index 6618a26..b492dac 100644 +--- a/src/backend/drm/DRM.cpp ++++ b/src/backend/drm/DRM.cpp +@@ -1287,6 +1287,13 @@ void Aquamarine::CDRMBackend::scanConnectors() { + } else { + backend->log(AQ_LOG_DEBUG, std::format("drm: Connector id {} already initialized", connectorID)); + conn = *it; ++ ++ // drivers may narrow or widen these on hotplug, e.g. when a Type-C port is rerouted to another pipeline ++ const auto possibleCrtcs = drmModeConnectorGetPossibleCrtcs(gpu->fd, drmConn); ++ if (possibleCrtcs && possibleCrtcs != conn->possibleCrtcs) { ++ backend->log(AQ_LOG_DEBUG, std::format("drm: Connector {} possible CRTCs changed {:#x} -> {:#x}", conn->szName, conn->possibleCrtcs, possibleCrtcs)); ++ conn->possibleCrtcs = possibleCrtcs; ++ } + } + + conn->status = drmConn->connection; +-- +2.50.1 (Apple Git-155) + diff --git a/pkgbuilds/aquamarine/PKGBUILD b/pkgbuilds/aquamarine/PKGBUILD new file mode 100644 index 00000000..2b16e747 --- /dev/null +++ b/pkgbuilds/aquamarine/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: Caleb Maclennan +# Contributor: Aaron Blasko +# +# Arch's aquamarine 0.15.1-1 plus one patch, carried on edge for Apple Silicon: +# re-read a connector's possible CRTCs when rescanning, so a Type-C port the +# DCP fabric reroutes to another display pipeline gets a CRTC without +# restarting the compositor. Drop the carry once hyprwm releases the fix. + +pkgname=aquamarine +pkgver=0.15.1 +pkgrel=1.1 +pkgdesc='a very light linux rendering backend library' +arch=(aarch64) +url="https://github.com/hyprwm/$pkgname" +license=(BSD-3-Clause) +depends=(libgcc + libstdc++ + glibc # libc.so libm.so + hyprutils libhyprutils.so + libdisplay-info libdisplay-info.so + libdrm # libdrm.so + libglvnd libEGL.so + libinput # libinput.so + mesa # libgbm.so + opengl-driver + pixman + seatd libseat.so + systemd-libs libudev.so + wayland libwayland-client.so + wayland-protocols) +makedepends=(cmake + hyprwayland-scanner) +provides=("lib$pkgname.so") +_archive="$pkgname-$pkgver" +source=("$url/archive/v$pkgver/$_archive.tar.gz" + 0001-drm-re-read-possible-CRTCs-when-rescanning-connectors.patch) +sha256sums=('2f9de98c0bd1b7b1b09c576e390a2fef436449762fb334163c414f0c300296f2' + '50e9e38ff915b18074dc9b5dd1d07d7f24e340e99f254476d6abe578eece7864') + +prepare() { + cd "$_archive" + patch -Np1 -i ../0001-drm-re-read-possible-CRTCs-when-rescanning-connectors.patch +} + +build() { + cd "$_archive" + # cc1plus needs more than 8 MiB of stack for DRM.cpp. GCC raises its own + # limit natively, but under QEMU user-mode emulation (the aarch64 builder) + # the guest stack is fixed at exec and setrlimit is ignored, so the compiler + # segfaults. QEMU reads this at exec; native builds ignore it. The object + # code is identical either way. + export QEMU_STACK_SIZE=64M + cmake -B build \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release + cmake --build build +} + +package() { + cd "$_archive" + DESTDIR="$pkgdir" cmake --install build + install -Dm0644 -t "$pkgdir/usr/share/licenses/$pkgname" LICENSE +}