Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Jan 2026 06:39:05 +0000
From:      Hiroki Tagato <tagattie@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: c766a64796dd - main - x11/quickshell: Add port: Building blocks for your desktop
Message-ID:  <6965e889.3e37d.53633b7c@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by tagattie:

URL: https://cgit.FreeBSD.org/ports/commit/?id=c766a64796dd0f7deedc810adf30eb451a339bf4

commit c766a64796dd0f7deedc810adf30eb451a339bf4
Author:     Hiroki Tagato <tagattie@FreeBSD.org>
AuthorDate: 2026-01-13 06:36:48 +0000
Commit:     Hiroki Tagato <tagattie@FreeBSD.org>
CommitDate: 2026-01-13 06:38:54 +0000

    x11/quickshell: Add port: Building blocks for your desktop
    
    Quickshell is a toolkit for building status bars, widgets,
    lockscreens, and other desktop components using QtQuick. It can be
    used alongside your wayland compositor or window manager to build a
    complete desktop environment.
    
    WWW: https://quickshell.org/
---
 x11/Makefile                                       |  1 +
 x11/quickshell/Makefile                            | 71 ++++++++++++++++++++
 x11/quickshell/distinfo                            |  3 +
 .../extra-patch-src_wayland_buffer_dmabuf.cpp      | 26 ++++++++
 x11/quickshell/files/patch-src_core_logging.cpp    | 77 ++++++++++++++++++++++
 x11/quickshell/files/patch-src_core_paths.cpp      | 20 ++++++
 .../files/patch-src_core_toolsupport.cpp           | 11 ++++
 .../files/patch-src_services_pam_conversation.cpp  | 10 +++
 .../files/patch-src_services_pam_qml.hpp           | 12 ++++
 .../files/patch-src_services_pam_subprocess.cpp    | 24 +++++++
 x11/quickshell/pkg-descr                           |  4 ++
 x11/quickshell/pkg-plist                           | 62 +++++++++++++++++
 12 files changed, 321 insertions(+)

diff --git a/x11/Makefile b/x11/Makefile
index c528bd4705b2..20a940c56a77 100644
--- a/x11/Makefile
+++ b/x11/Makefile
@@ -374,6 +374,7 @@
     SUBDIR += qt5-qev
     SUBDIR += qt5-x11extras
     SUBDIR += qterminal
+    SUBDIR += quickshell
     SUBDIR += remontoire
     SUBDIR += rendercheck
     SUBDIR += rgb
diff --git a/x11/quickshell/Makefile b/x11/quickshell/Makefile
new file mode 100644
index 000000000000..5134f79baeb1
--- /dev/null
+++ b/x11/quickshell/Makefile
@@ -0,0 +1,71 @@
+PORTNAME=	quickshell
+DISTVERSIONPREFIX=	v
+DISTVERSION=	0.2.1
+CATEGORIES=	x11
+MASTER_SITES=	https://git.outfoxxed.me/${PORTNAME}/${PORTNAME}/archive/${DISTVERSIONFULL}${EXTRACT_SUFX}?dummy=/
+
+MAINTAINER=	tagattie@FreeBSD.org
+COMMENT=	Building blocks for your desktop
+WWW=		https://quickshell.org/
+
+LICENSE=	LGPL3
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	${LOCALBASE}/share/cmake/CLI11/CLI11Config.cmake:devel/cli11 \
+		${LOCALBASE}/lib/cmake/SPIRV-Tools/SPIRV-ToolsConfig.cmake:graphics/spirv-tools
+LIB_DEPENDS=	libxkbcommon.so:x11/libxkbcommon
+
+USES=		cmake:testing display:test gl localbase:ldflags pkgconfig qt:6
+
+USE_GL=		opengl
+USE_QT=		5compat base declarative imageformats multimedia svg \
+		shadertools:build
+
+CMAKE_ARGS=		-DDISTRIBUTOR:STRING="FreeBSD ports/packages" \
+			-DINSTALL_QML_PREFIX:STRING=${QT_QMLDIR_REL} \
+			-DGIT_REVISION:STRING=${GIT_COMMIT_HASH}
+CMAKE_OFF=		DISTRIBUTOR_DEBUGINFO_AVAILABLE \
+			CRASH_REPORTER \
+			USE_JEMALLOC
+CMAKE_BUILD_TYPE=	RelWithDebInfo
+
+STRIP=		# empty
+
+WRKSRC=		${WRKDIR}/${PORTNAME}
+
+PORTDOCS=	CONTRIBUTING.md README.md
+
+OPTIONS_DEFINE=	DOCS PIPEWIRE WAYLAND X11
+OPTIONS_DEFAULT=PIPEWIRE WAYLAND X11
+OPTIONS_SUB=	yes
+
+PIPEWIRE_LIB_DEPENDS=	libpipewire-0.3.so:multimedia/pipewire
+PIPEWIRE_CMAKE_BOOL=	SERVICE_PIPEWIRE
+WAYLAND_BUILD_DEPENDS=	wayland-scanner:graphics/wayland \
+			wayland-protocols>0:graphics/wayland-protocols
+WAYLAND_LIB_DEPENDS=	libdrm.so:graphics/libdrm \
+			libwayland-client.so:graphics/wayland
+WAYLAND_USE=		gl=egl,gbm,gl \
+			qt=wayland
+WAYLAND_CMAKE_BOOL=	WAYLAND
+X11_LIB_DEPENDS=	libdrm.so:graphics/libdrm
+X11_USES=		xorg
+X11_USE=		gl=egl,gbm,gl \
+			xorg=xcb
+X11_CMAKE_BOOL=		X11
+
+GIT_COMMIT_HASH=a1a150fab00a93ea983aaca5df55304bc837f51b
+
+.if ${OPSYS} == FreeBSD && ${ARCH} == i386
+EXTRA_PATCHES=	${PATCHDIR}/extra-patch-src_wayland_buffer_dmabuf.cpp
+.endif
+
+post-install:
+	@${RM} ${STAGEDIR}${PREFIX}/bin/qs
+	@${RLN} ${STAGEDIR}${PREFIX}/bin/quickshell ${STAGEDIR}${PREFIX}/bin/qs
+
+post-install-DOCS-on:
+	@${MKDIR} ${STAGEDIR}${DOCSDIR}
+	${INSTALL_MAN} ${PORTDOCS:S|^|${WRKSRC}/|} ${STAGEDIR}${DOCSDIR}
+
+.include <bsd.port.mk>
diff --git a/x11/quickshell/distinfo b/x11/quickshell/distinfo
new file mode 100644
index 000000000000..7ac167fa9027
--- /dev/null
+++ b/x11/quickshell/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1768222570
+SHA256 (quickshell-v0.2.1.tar.gz) = d815c5f99f4a0a28545ffaa90464420c773b7c0ab62f713d9d8735a8e7282ca7
+SIZE (quickshell-v0.2.1.tar.gz) = 403070
diff --git a/x11/quickshell/files/extra-patch-src_wayland_buffer_dmabuf.cpp b/x11/quickshell/files/extra-patch-src_wayland_buffer_dmabuf.cpp
new file mode 100644
index 000000000000..e2234d50c41d
--- /dev/null
+++ b/x11/quickshell/files/extra-patch-src_wayland_buffer_dmabuf.cpp
@@ -0,0 +1,26 @@
+--- src/wayland/buffer/dmabuf.cpp.orig	2026-01-13 05:59:50 UTC
++++ src/wayland/buffer/dmabuf.cpp
+@@ -599,9 +599,9 @@ WlBufferQSGTexture* WlDmaBuffer::createQsgTexture(QQui
+ 
+ 	// clang-format off
+ 	auto attribs = std::vector<EGLAttrib> {
+-		EGL_WIDTH, this->width,
+-		EGL_HEIGHT, this->height,
+-		EGL_LINUX_DRM_FOURCC_EXT, this->format,
++		EGL_WIDTH, static_cast<int>(this->width),
++		EGL_HEIGHT, static_cast<int>(this->height),
++		EGL_LINUX_DRM_FOURCC_EXT, static_cast<int>(this->format),
+ 	};
+ 	// clang-format on
+ 
+@@ -617,8 +617,8 @@ WlBufferQSGTexture* WlDmaBuffer::createQsgTexture(QQui
+ 		// clang-format off
+ 		attribs.insert(attribs.end(), {
+ 		    names.fd, plane.fd,
+-		    names.offset, plane.offset,
+-		    names.pitch, plane.stride,
++		    names.offset, static_cast<int>(plane.offset),
++		    names.pitch, static_cast<int>(plane.stride),
+ 		});
+ 		// clang-format on
+ 
diff --git a/x11/quickshell/files/patch-src_core_logging.cpp b/x11/quickshell/files/patch-src_core_logging.cpp
new file mode 100644
index 000000000000..eda74904e917
--- /dev/null
+++ b/x11/quickshell/files/patch-src_core_logging.cpp
@@ -0,0 +1,77 @@
+--- src/core/logging.cpp.orig	2025-10-12 00:14:14 UTC
++++ src/core/logging.cpp
+@@ -27,7 +27,16 @@
+ #include <qtmetamacros.h>
+ #include <qtypes.h>
+ #include <sys/mman.h>
++#if defined(__linux__)
+ #include <sys/sendfile.h>
++#else
++#include <unistd.h>
++#include <sys/types.h>
++#if defined(__NetBSD__) || defined(__DragonFly__)
++#include <sys/socket.h>
++#include <sys/uio.h>
++#endif
++#endif
+ 
+ #include "instanceinfo.hpp"
+ #include "logcat.hpp"
+@@ -389,7 +398,7 @@ void ThreadLogging::initFs() {
+ 		delete detailedFile;
+ 		detailedFile = nullptr;
+ 	} else {
+-		auto lock = flock {
++		struct flock lock {
+ 		    .l_type = F_WRLCK,
+ 		    .l_whence = SEEK_SET,
+ 		    .l_start = 0,
+@@ -411,7 +420,19 @@ void ThreadLogging::initFs() {
+ 		auto* oldFile = this->file;
+ 		if (oldFile) {
+ 			oldFile->seek(0);
++#if defined(__linux__)
+ 			sendfile(file->handle(), oldFile->handle(), nullptr, oldFile->size());
++#elif defined(__FreeBSD__)
++			copy_file_range(oldFile->handle(), nullptr, file->handle(), nullptr, oldFile->size(), 0);
++#elif defined(__NetBSD__) || defined(__DragonFly__)
++			sendfile(oldFile->handle(), file->handle(), 0, oldFile->size(), nullptr, nullptr, 0);
++#elif defined(__OpenBSD__)
++			constexpr size_t BUF_SIZE = 1 << 20;
++			char buf[BUF_SIZE];
++			ssize_t r = read(oldFile->handle(), buf, oldFile->size() > BUF_SIZE ? BUF_SIZE : (size_t)oldFile->size());
++			if (r > 0)
++				write(file->handle(), buf, r);
++#endif
+ 		}
+ 
+ 		this->file = file;
+@@ -423,7 +444,19 @@ void ThreadLogging::initFs() {
+ 		auto* oldFile = this->detailedFile;
+ 		if (oldFile) {
+ 			oldFile->seek(0);
++#if defined(__linux__)
+ 			sendfile(detailedFile->handle(), oldFile->handle(), nullptr, oldFile->size());
++#elif defined(__FreeBSD__)
++			copy_file_range(oldFile->handle(), nullptr, detailedFile->handle(), nullptr, oldFile->size(), 0);
++#elif defined(__NetBSD__) || defined(__DragonFly__)
++			sendfile(oldFile->handle(), detailedFile->handle(), 0, oldFile->size(), nullptr, nullptr, 0);
++#elif defined(__OpenBSD__)
++			constexpr size_t BUF_SIZE = 1 << 20;
++			char buf[BUF_SIZE];
++			ssize_t r = read(oldFile->handle(), buf, oldFile->size() > BUF_SIZE ? BUF_SIZE : (size_t)oldFile->size());
++			if (r > 0)
++				write(detailedFile->handle(), buf, r);
++#endif
+ 		}
+ 
+ 		crash::CrashInfo::INSTANCE.logFd = detailedFile->handle();
+@@ -886,7 +919,7 @@ void LogFollower::FcntlWaitThread::run() {
+ }
+ 
+ void LogFollower::FcntlWaitThread::run() {
+-	auto lock = flock {
++	struct flock lock {
+ 	    .l_type = F_RDLCK, // won't block other read locks when we take it
+ 	    .l_whence = SEEK_SET,
+ 	    .l_start = 0,
diff --git a/x11/quickshell/files/patch-src_core_paths.cpp b/x11/quickshell/files/patch-src_core_paths.cpp
new file mode 100644
index 000000000000..302d5948a8ff
--- /dev/null
+++ b/x11/quickshell/files/patch-src_core_paths.cpp
@@ -0,0 +1,20 @@
+--- src/core/paths.cpp.orig	2025-10-12 00:14:14 UTC
++++ src/core/paths.cpp
+@@ -346,7 +346,7 @@ void QsPaths::createLock() {
+ 			return;
+ 		}
+ 
+-		auto lock = flock {
++		struct flock lock {
+ 		    .l_type = F_WRLCK,
+ 		    .l_whence = SEEK_SET,
+ 		    .l_start = 0,
+@@ -373,7 +373,7 @@ bool QsPaths::checkLock(const QString& path, InstanceL
+ 	auto file = QFile(QDir(path).filePath("instance.lock"));
+ 	if (!file.open(QFile::ReadOnly)) return false;
+ 
+-	auto lock = flock {
++	struct flock lock {
+ 	    .l_type = F_WRLCK,
+ 	    .l_whence = SEEK_SET,
+ 	    .l_start = 0,
diff --git a/x11/quickshell/files/patch-src_core_toolsupport.cpp b/x11/quickshell/files/patch-src_core_toolsupport.cpp
new file mode 100644
index 000000000000..15271acf6dd8
--- /dev/null
+++ b/x11/quickshell/files/patch-src_core_toolsupport.cpp
@@ -0,0 +1,11 @@
+--- src/core/toolsupport.cpp.orig	2025-10-12 00:14:14 UTC
++++ src/core/toolsupport.cpp
+@@ -54,7 +54,7 @@ bool QmlToolingSupport::lockTooling() {
+ 		return false;
+ 	}
+ 
+-	auto lock = flock {
++	struct flock lock {
+ 	    .l_type = F_WRLCK,
+ 	    .l_whence = SEEK_SET, // NOLINT (fcntl.h??)
+ 	    .l_start = 0,
diff --git a/x11/quickshell/files/patch-src_services_pam_conversation.cpp b/x11/quickshell/files/patch-src_services_pam_conversation.cpp
new file mode 100644
index 000000000000..8269b0742fa1
--- /dev/null
+++ b/x11/quickshell/files/patch-src_services_pam_conversation.cpp
@@ -0,0 +1,10 @@
+--- src/services/pam/conversation.cpp.orig	2026-01-12 13:51:40 UTC
++++ src/services/pam/conversation.cpp
+@@ -7,6 +7,7 @@
+ #include <qstring.h>
+ #include <qtmetamacros.h>
+ #include <sys/wait.h>
++#include <signal.h>
+ 
+ #include "../../core/logcat.hpp"
+ #include "ipc.hpp"
diff --git a/x11/quickshell/files/patch-src_services_pam_qml.hpp b/x11/quickshell/files/patch-src_services_pam_qml.hpp
new file mode 100644
index 000000000000..7e91f062bda4
--- /dev/null
+++ b/x11/quickshell/files/patch-src_services_pam_qml.hpp
@@ -0,0 +1,12 @@
+--- src/services/pam/qml.hpp.orig	2025-10-12 00:14:14 UTC
++++ src/services/pam/qml.hpp
+@@ -6,7 +6,9 @@
+ #include <qtclasshelpermacros.h>
+ #include <qthread.h>
+ #include <qtmetamacros.h>
++#if defined(__linux__)
+ #include <security/_pam_types.h>
++#endif
+ #include <security/pam_appl.h>
+ 
+ #include "conversation.hpp"
diff --git a/x11/quickshell/files/patch-src_services_pam_subprocess.cpp b/x11/quickshell/files/patch-src_services_pam_subprocess.cpp
new file mode 100644
index 000000000000..89f0e2ee7830
--- /dev/null
+++ b/x11/quickshell/files/patch-src_services_pam_subprocess.cpp
@@ -0,0 +1,24 @@
+--- src/services/pam/subprocess.cpp.orig	2025-10-12 00:14:14 UTC
++++ src/services/pam/subprocess.cpp
+@@ -7,7 +7,9 @@
+ #include <qloggingcategory.h>
+ #include <qstring.h>
+ #include <sched.h>
++#if defined(__linux__)
+ #include <security/_pam_types.h>
++#endif
+ #include <security/pam_appl.h>
+ #include <unistd.h>
+ 
+@@ -83,7 +85,11 @@ PamIpcExitCode PamSubprocess::exec(const char* configD
+ 	logIf(this->log) << "Starting pam session for user \"" << user << "\" with config \"" << config
+ 	                 << "\" in dir \"" << configDir << "\"" << std::endl;
+ 
++#if defined(__linux__)
+ 	auto result = pam_start_confdir(config, user, &conv, configDir, &handle);
++#else
++	auto result = pam_start(config, user, &conv, &handle);
++#endif
+ 
+ 	if (result != PAM_SUCCESS) {
+ 		logIf(true) << "Unable to start pam conversation with error \"" << pam_strerror(handle, result)
diff --git a/x11/quickshell/pkg-descr b/x11/quickshell/pkg-descr
new file mode 100644
index 000000000000..51feff797655
--- /dev/null
+++ b/x11/quickshell/pkg-descr
@@ -0,0 +1,4 @@
+Quickshell is a toolkit for building status bars, widgets,
+lockscreens, and other desktop components using QtQuick. It can be
+used alongside your wayland compositor or window manager to build a
+complete desktop environment.
diff --git a/x11/quickshell/pkg-plist b/x11/quickshell/pkg-plist
new file mode 100644
index 000000000000..1b531398a880
--- /dev/null
+++ b/x11/quickshell/pkg-plist
@@ -0,0 +1,62 @@
+bin/qs
+bin/quickshell
+%%QT_QMLDIR%%/Quickshell/Bluetooth/qmldir
+%%QT_QMLDIR%%/Quickshell/Bluetooth/quickshell-bluetooth.qmltypes
+%%QT_QMLDIR%%/Quickshell/DBusMenu/qmldir
+%%QT_QMLDIR%%/Quickshell/DBusMenu/quickshell-dbusmenu.qmltypes
+%%WAYLAND%%%%QT_QMLDIR%%/Quickshell/Hyprland/_FocusGrab/qmldir
+%%WAYLAND%%%%QT_QMLDIR%%/Quickshell/Hyprland/_FocusGrab/quickshell-hyprland-focus-grab.qmltypes
+%%WAYLAND%%%%QT_QMLDIR%%/Quickshell/Hyprland/_GlobalShortcuts/qmldir
+%%WAYLAND%%%%QT_QMLDIR%%/Quickshell/Hyprland/_GlobalShortcuts/quickshell-hyprland-global-shortcuts.qmltypes
+%%WAYLAND%%%%QT_QMLDIR%%/Quickshell/Hyprland/_Ipc/qmldir
+%%WAYLAND%%%%QT_QMLDIR%%/Quickshell/Hyprland/_Ipc/quickshell-hyprland-ipc.qmltypes
+%%WAYLAND%%%%QT_QMLDIR%%/Quickshell/Hyprland/_SurfaceExtensions/qmldir
+%%WAYLAND%%%%QT_QMLDIR%%/Quickshell/Hyprland/_SurfaceExtensions/quickshell-hyprland-surface-extensions.qmltypes
+%%WAYLAND%%%%QT_QMLDIR%%/Quickshell/Hyprland/qmldir
+%%WAYLAND%%%%QT_QMLDIR%%/Quickshell/Hyprland/quickshell-hyprland.qmltypes
+%%X11%%%%QT_QMLDIR%%/Quickshell/I3/_Ipc/qmldir
+%%X11%%%%QT_QMLDIR%%/Quickshell/I3/_Ipc/quickshell-i3-ipc.qmltypes
+%%X11%%%%QT_QMLDIR%%/Quickshell/I3/qmldir
+%%X11%%%%QT_QMLDIR%%/Quickshell/I3/quickshell-i3.qmltypes
+%%QT_QMLDIR%%/Quickshell/Io/FileView.qml
+%%QT_QMLDIR%%/Quickshell/Io/qmldir
+%%QT_QMLDIR%%/Quickshell/Io/quickshell-io.qmltypes
+%%QT_QMLDIR%%/Quickshell/Services/Greetd/qmldir
+%%QT_QMLDIR%%/Quickshell/Services/Greetd/quickshell-service-greetd.qmltypes
+%%QT_QMLDIR%%/Quickshell/Services/Mpris/qmldir
+%%QT_QMLDIR%%/Quickshell/Services/Mpris/quickshell-service-mpris.qmltypes
+%%QT_QMLDIR%%/Quickshell/Services/Notifications/qmldir
+%%QT_QMLDIR%%/Quickshell/Services/Notifications/quickshell-service-notifications.qmltypes
+%%QT_QMLDIR%%/Quickshell/Services/Pam/qmldir
+%%QT_QMLDIR%%/Quickshell/Services/Pam/quickshell-service-pam.qmltypes
+%%PIPEWIRE%%%%QT_QMLDIR%%/Quickshell/Services/Pipewire/qmldir
+%%PIPEWIRE%%%%QT_QMLDIR%%/Quickshell/Services/Pipewire/quickshell-service-pipewire.qmltypes
+%%QT_QMLDIR%%/Quickshell/Services/SystemTray/qmldir
+%%QT_QMLDIR%%/Quickshell/Services/SystemTray/quickshell-service-statusnotifier.qmltypes
+%%QT_QMLDIR%%/Quickshell/Services/UPower/qmldir
+%%QT_QMLDIR%%/Quickshell/Services/UPower/quickshell-service-upower.qmltypes
+%%WAYLAND%%%%QT_QMLDIR%%/Quickshell/Wayland/_Screencopy/qmldir
+%%WAYLAND%%%%QT_QMLDIR%%/Quickshell/Wayland/_Screencopy/quickshell-wayland-screencopy.qmltypes
+%%WAYLAND%%%%QT_QMLDIR%%/Quickshell/Wayland/_ToplevelManagement/qmldir
+%%WAYLAND%%%%QT_QMLDIR%%/Quickshell/Wayland/_ToplevelManagement/quickshell-wayland-toplevel-management.qmltypes
+%%WAYLAND%%%%QT_QMLDIR%%/Quickshell/Wayland/_WlrLayerShell/qmldir
+%%WAYLAND%%%%QT_QMLDIR%%/Quickshell/Wayland/_WlrLayerShell/quickshell-wayland-layershell.qmltypes
+%%WAYLAND%%%%QT_QMLDIR%%/Quickshell/Wayland/qmldir
+%%WAYLAND%%%%QT_QMLDIR%%/Quickshell/Wayland/quickshell-wayland.qmltypes
+%%QT_QMLDIR%%/Quickshell/Widgets/ClippingRectangle.qml
+%%QT_QMLDIR%%/Quickshell/Widgets/ClippingWrapperRectangle.qml
+%%QT_QMLDIR%%/Quickshell/Widgets/ClippingWrapperRectangleInternal.qml
+%%QT_QMLDIR%%/Quickshell/Widgets/IconImage.qml
+%%QT_QMLDIR%%/Quickshell/Widgets/WrapperItem.qml
+%%QT_QMLDIR%%/Quickshell/Widgets/WrapperMouseArea.qml
+%%QT_QMLDIR%%/Quickshell/Widgets/WrapperRectangle.qml
+%%QT_QMLDIR%%/Quickshell/Widgets/qmldir
+%%QT_QMLDIR%%/Quickshell/Widgets/quickshell-widgets.qmltypes
+%%X11%%%%QT_QMLDIR%%/Quickshell/X11/qmldir
+%%X11%%%%QT_QMLDIR%%/Quickshell/X11/quickshell-x11.qmltypes
+%%QT_QMLDIR%%/Quickshell/_Window/qmldir
+%%QT_QMLDIR%%/Quickshell/_Window/quickshell-window.qmltypes
+%%QT_QMLDIR%%/Quickshell/qmldir
+%%QT_QMLDIR%%/Quickshell/quickshell-core.qmltypes
+share/applications/org.quickshell.desktop
+share/icons/hicolor/scalable/apps/org.quickshell.svg


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6965e889.3e37d.53633b7c>