pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

sddm: Fix rc script and minor patch for VirtualTerminal.cpp



Module Name:	pkgsrc-wip
Committed By:	Stepan Ipatov <st.ipatov%gmail.com@localhost>
Pushed By:	st.ipatov
Date:		Fri Jan 2 01:31:42 2026 +0000
Changeset:	14e13753df3a4f3a9c0900483caa37bea047165f

Added Files:
	sddm/COMMIT_MSG
	sddm/DESCR
	sddm/Makefile
	sddm/PLIST
	sddm/distinfo
	sddm/files/README.pkgsrc
	sddm/files/sddm.sh
	sddm/files/xinit-session
	sddm/files/xsessions/ctwm.desktop
	sddm/files/xsessions/xinitrc.desktop
	sddm/options.mk
	sddm/patches/patch-CMakeLists.txt
	sddm/patches/patch-data_man_sddm.conf.rst.in
	sddm/patches/patch-data_themes_CMakeLists.txt
	sddm/patches/patch-services_CMakeLists.txt
	sddm/patches/patch-src_common_Configuration.h
	sddm/patches/patch-src_common_VirtualTerminal.cpp
	sddm/patches/patch-src_common_XAuth.cpp
	sddm/patches/patch-src_daemon_LogindDBusTypes.cpp
	sddm/patches/patch-src_helper_Backend.cpp
	sddm/patches/patch-src_helper_CMakeLists.txt
	sddm/patches/patch-src_helper_HelperApp.cpp
	sddm/patches/patch-src_helper_UserSession.cpp

Log Message:
sddm: Fix rc script and minor patch for VirtualTerminal.cpp

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=14e13753df3a4f3a9c0900483caa37bea047165f

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 sddm/COMMIT_MSG                                   |   1 +
 sddm/DESCR                                        |   7 +
 sddm/Makefile                                     |  95 +++++++++
 sddm/PLIST                                        | 236 ++++++++++++++++++++++
 sddm/distinfo                                     |  17 ++
 sddm/files/README.pkgsrc                          |  12 ++
 sddm/files/sddm.sh                                |  44 ++++
 sddm/files/xinit-session                          |  11 +
 sddm/files/xsessions/ctwm.desktop                 | 174 ++++++++++++++++
 sddm/files/xsessions/xinitrc.desktop              |   6 +
 sddm/options.mk                                   |  29 +++
 sddm/patches/patch-CMakeLists.txt                 |  24 +++
 sddm/patches/patch-data_man_sddm.conf.rst.in      |  47 +++++
 sddm/patches/patch-data_themes_CMakeLists.txt     |  12 ++
 sddm/patches/patch-services_CMakeLists.txt        |  39 ++++
 sddm/patches/patch-src_common_Configuration.h     |  47 +++++
 sddm/patches/patch-src_common_VirtualTerminal.cpp |  52 +++++
 sddm/patches/patch-src_common_XAuth.cpp           |  15 ++
 sddm/patches/patch-src_daemon_LogindDBusTypes.cpp |  35 ++++
 sddm/patches/patch-src_helper_Backend.cpp         |  47 +++++
 sddm/patches/patch-src_helper_CMakeLists.txt      |  15 ++
 sddm/patches/patch-src_helper_HelperApp.cpp       |  15 ++
 sddm/patches/patch-src_helper_UserSession.cpp     |  33 +++
 23 files changed, 1013 insertions(+)

diffs:
diff --git a/sddm/COMMIT_MSG b/sddm/COMMIT_MSG
new file mode 100644
index 0000000000..9b6270e710
--- /dev/null
+++ b/sddm/COMMIT_MSG
@@ -0,0 +1 @@
+x11/sddm: Fix rc script and minor patch for VirtualTerminal.cpp
diff --git a/sddm/DESCR b/sddm/DESCR
new file mode 100644
index 0000000000..993db7274f
--- /dev/null
+++ b/sddm/DESCR
@@ -0,0 +1,7 @@
+SDDM is a modern display manager for X11 and Wayland aiming to be fast,
+simple and beautiful. It uses modern technologies like QtQuick, which in
+turn gives the designer the ability to create smooth, animated user interfaces.
+
+SDDM is extremely themeable. We put no restrictions on the user interface
+design, it is completely up to the designer. We simply provide a few callbacks
+to the user interface which can be used for authentication, suspend, etc.
diff --git a/sddm/Makefile b/sddm/Makefile
new file mode 100644
index 0000000000..c1dd42d323
--- /dev/null
+++ b/sddm/Makefile
@@ -0,0 +1,95 @@
+# $NetBSD: Makefile,v 1.1 2025/12/30 04:00:08 gutteridge Exp $
+
+DISTNAME=	sddm-0.21.0
+CATEGORIES=	x11
+PKGREVISION=	1
+MASTER_SITES=	${MASTER_SITE_GITHUB:=sddm/}
+GITHUB_TAG=	refs/tags/v${PKGVERSION_NOREV}
+
+MAINTAINER=	pkgsrc-users%NetBSD.org@localhost
+HOMEPAGE=	https://github.com/sddm/sddm
+COMMENT=	QML-based X11 and Wayland display manager
+LICENSE=	gnu-gpl-v2 AND gnu-gpl-v3
+
+WRKSRC=		${WRKDIR}/${DISTNAME}
+
+USE_LANGUAGES=		c c++
+USE_CXX_FEATURES+=	c++17
+USE_TOOLS+=		pkg-config
+
+.if !exists(/etc/login.defs)
+CMAKE_CONFIGURE_ARGS+=	-DUID_MIN=1000
+CMAKE_CONFIGURE_ARGS+=	-DUID_MAX=65000
+.endif
+CMAKE_CONFIGURE_ARGS+=	-DDBUS_CONFIG_DIR=${PREFIX}/share/examples/sddm
+CMAKE_CONFIGURE_ARGS+=	-DCMAKE_INSTALL_SYSCONFDIR:PATH=${PKG_SYSCONFDIR:Q}
+CMAKE_CONFIGURE_ARGS+=	-DBUILD_MAN_PAGES=ON
+CMAKE_CONFIGURE_ARGS+=	-DRST2MAN_EXECUTABLE=${PREFIX}/bin/rst2man-${PYVERSSUFFIX}
+
+TOOL_DEPENDS+=	extra-cmake-modules-[0-9]*:../../devel/extra-cmake-modules
+TOOL_DEPENDS+=	${PYPKGPREFIX}-docutils-[0-9]*:../../textproc/py-docutils
+
+.include "options.mk"
+.include "../../mk/bsd.prefs.mk"
+
+.if ${OPSYS} != "Linux"
+CMAKE_CONFIGURE_ARGS+=	-DENABLE_JOURNALD=OFF
+CMAKE_CONFIGURE_ARGS+=	-DNO_SYSTEMD=ON
+.endif
+
+.if ${OPSYS} == "NetBSD"
+CMAKE_CONFIGURE_ARGS+=	-DSDDM_INITIAL_VT=5
+.endif
+
+.if ${OPSYS} == "FreeBSD"
+CMAKE_CONFIGURE_ARGS+=	-DSDDM_INITIAL_VT=7
+.endif
+
+SUBST_CLASSES+=		vars
+SUBST_STAGE.vars=	pre-configure
+SUBST_MESSAGE.vars=	Fix hard-coded absolute paths.
+SUBST_FILES.vars=	src/common/Configuration.h
+SUBST_FILES.vars+=	data/man/sddm.conf.rst.in
+SUBST_VARS.vars=	PREFIX X11BASE
+
+SUBST_CLASSES+=		paths
+SUBST_STAGE.paths=	pre-configure
+SUBST_MESSAGE.paths=	Set path to sddm executable.
+SUBST_FILES.paths=	../xinitrc.desktop
+SUBST_VARS.paths=	PREFIX
+
+BUILD_DEFS+=		VARBASE
+SDDM_GROUP=		sddm
+SDDM_USER=		sddm
+SDDM_HOME=		${VARBASE}/lib/sddm
+PKG_GROUPS_VARS+=	SMDM_GROUP
+PKG_USERS_VARS+=	SDDM_USER
+PKG_GROUPS=		${SDDM_GROUP}
+PKG_USERS=		${SDDM_USER}:${SDDM_GROUP}
+PKG_GECOS.${SDDM_USER}=	SDDM user
+PKG_HOME.${SDDM_USER}=	${SDDM_HOME}
+
+OWN_DIRS_PERMS+=	${SDDM_HOME} ${SDDM_USER} ${SDDM_GROUP} 0770
+
+.if ${INIT_SYSTEM} == "rc.d"
+DEPENDS+=	daemonize-[0-9]*:../../sysutils/daemonize
+RCD_SCRIPTS+=	sddm
+.endif
+
+INSTALLATION_DIRS+=	share/xsessions
+
+post-extract:
+	${CP} ${FILESDIR}/xsessions/xinitrc.desktop ${WRKDIR}/xinitrc.desktop
+
+post-install:
+	${INSTALL_DATA} ${FILESDIR}/xsessions/ctwm.desktop ${DESTDIR}${PREFIX}/share/xsessions/ctwm.desktop
+	${INSTALL_DATA} ${WRKDIR}/xinitrc.desktop ${DESTDIR}${PREFIX}/share/xsessions/xinitrc.desktop
+	${INSTALL_SCRIPT} ${FILESDIR}/xinit-session ${DESTDIR}${PREFIX}/share/sddm/scripts/xinit-session
+
+PYTHON_FOR_BUILD_ONLY=  yes
+.include "../../devel/cmake/build.mk"
+.include "../../lang/python/pyversion.mk"
+.include "../../sysutils/dbus/buildlink3.mk"
+.include "../../x11/libxcb/buildlink3.mk"
+.include "../../mk/pam.buildlink3.mk"
+.include "../../mk/bsd.pkg.mk"
diff --git a/sddm/PLIST b/sddm/PLIST
new file mode 100644
index 0000000000..6279382c38
--- /dev/null
+++ b/sddm/PLIST
@@ -0,0 +1,236 @@
+@comment $NetBSD: PLIST,v 1.1 2025/12/30 04:00:08 gutteridge Exp $
+bin/sddm
+${PLIST.qt5}bin/sddm-greeter
+${PLIST.qt6}bin/sddm-greeter-qt6
+libexec/sddm-helper
+libexec/sddm-helper-start-wayland
+libexec/sddm-helper-start-x11user
+man/man1/sddm-greeter.1
+man/man1/sddm.1
+man/man5/sddm-state.conf.5
+man/man5/sddm.conf.5
+${PLIST.qt5}qt5/qml/SddmComponents/Background.qml
+${PLIST.qt5}qt5/qml/SddmComponents/Button.qml
+${PLIST.qt5}qt5/qml/SddmComponents/Clock.qml
+${PLIST.qt5}qt5/qml/SddmComponents/ComboBox.qml
+${PLIST.qt5}qt5/qml/SddmComponents/ImageButton.qml
+${PLIST.qt5}qt5/qml/SddmComponents/LayoutBox.qml
+${PLIST.qt5}qt5/qml/SddmComponents/Menu.qml
+${PLIST.qt5}qt5/qml/SddmComponents/PasswordBox.qml
+${PLIST.qt5}qt5/qml/SddmComponents/PictureBox.qml
+${PLIST.qt5}qt5/qml/SddmComponents/TextBox.qml
+${PLIST.qt5}qt5/qml/SddmComponents/TextConstants.qml
+${PLIST.qt5}qt5/qml/SddmComponents/qmldir
+${PLIST.qt5}qt5/qml/SddmComponents/warning.png
+${PLIST.qt6}qt6/qml/SddmComponents/Background.qml
+${PLIST.qt6}qt6/qml/SddmComponents/Button.qml
+${PLIST.qt6}qt6/qml/SddmComponents/Clock.qml
+${PLIST.qt6}qt6/qml/SddmComponents/ComboBox.qml
+${PLIST.qt6}qt6/qml/SddmComponents/ImageButton.qml
+${PLIST.qt6}qt6/qml/SddmComponents/LayoutBox.qml
+${PLIST.qt6}qt6/qml/SddmComponents/Menu.qml
+${PLIST.qt6}qt6/qml/SddmComponents/PasswordBox.qml
+${PLIST.qt6}qt6/qml/SddmComponents/PictureBox.qml
+${PLIST.qt6}qt6/qml/SddmComponents/TextBox.qml
+${PLIST.qt6}qt6/qml/SddmComponents/TextConstants.qml
+${PLIST.qt6}qt6/qml/SddmComponents/qmldir
+${PLIST.qt6}qt6/qml/SddmComponents/warning.png
+share/examples/pam.d/sddm
+share/examples/pam.d/sddm-autologin
+share/examples/pam.d/sddm-greeter
+share/examples/sddm/org.freedesktop.DisplayManager.conf
+share/sddm/faces/.face.icon
+share/sddm/faces/root.face.icon
+share/sddm/flags/ae.png
+share/sddm/flags/am.png
+share/sddm/flags/ar.png
+share/sddm/flags/at.png
+share/sddm/flags/az.png
+share/sddm/flags/bd.png
+share/sddm/flags/be.png
+share/sddm/flags/bg.png
+share/sddm/flags/bh.png
+share/sddm/flags/br.png
+share/sddm/flags/by.png
+share/sddm/flags/ca.png
+share/sddm/flags/ch.png
+share/sddm/flags/cu.png
+share/sddm/flags/cz.png
+share/sddm/flags/de.png
+share/sddm/flags/dj.png
+share/sddm/flags/dk.png
+share/sddm/flags/dz.png
+share/sddm/flags/ee.png
+share/sddm/flags/eg.png
+share/sddm/flags/es.png
+share/sddm/flags/eu.png
+share/sddm/flags/fi.png
+share/sddm/flags/fr.png
+share/sddm/flags/gb.png
+share/sddm/flags/ge.png
+share/sddm/flags/gr.png
+share/sddm/flags/hr.png
+share/sddm/flags/hu.png
+share/sddm/flags/il.png
+share/sddm/flags/in.png
+share/sddm/flags/iq.png
+share/sddm/flags/is.png
+share/sddm/flags/it.png
+share/sddm/flags/jo.png
+share/sddm/flags/jp.png
+share/sddm/flags/km.png
+share/sddm/flags/kr.png
+share/sddm/flags/kw.png
+share/sddm/flags/la.png
+share/sddm/flags/lb.png
+share/sddm/flags/lt.png
+share/sddm/flags/lv.png
+share/sddm/flags/ly.png
+share/sddm/flags/ma.png
+share/sddm/flags/mk.png
+share/sddm/flags/mn.png
+share/sddm/flags/mx.png
+share/sddm/flags/nl.png
+share/sddm/flags/no.png
+share/sddm/flags/om.png
+share/sddm/flags/pl.png
+share/sddm/flags/ps.png
+share/sddm/flags/pt.png
+share/sddm/flags/qa.png
+share/sddm/flags/qc.png
+share/sddm/flags/ro.png
+share/sddm/flags/ru.png
+share/sddm/flags/sa.png
+share/sddm/flags/sd.png
+share/sddm/flags/se.png
+share/sddm/flags/si.png
+share/sddm/flags/sk.png
+share/sddm/flags/so.png
+share/sddm/flags/sr.png
+share/sddm/flags/sy.png
+share/sddm/flags/th.png
+share/sddm/flags/tn.png
+share/sddm/flags/tr.png
+share/sddm/flags/ua.png
+share/sddm/flags/uk.png
+share/sddm/flags/un.png
+share/sddm/flags/us.png
+share/sddm/flags/uy.png
+share/sddm/flags/vn.png
+share/sddm/flags/ye.png
+share/sddm/flags/yu.png
+share/sddm/flags/zz.png
+share/sddm/scripts/Xsession
+share/sddm/scripts/Xsetup
+share/sddm/scripts/Xstop
+share/sddm/scripts/wayland-session
+share/sddm/scripts/xinit-session
+share/sddm/themes/elarun/Main.qml
+share/sddm/themes/elarun/README
+share/sddm/themes/elarun/angle-down.png
+share/sddm/themes/elarun/elarun.jpg
+share/sddm/themes/elarun/images/background.png
+share/sddm/themes/elarun/images/lock.png
+share/sddm/themes/elarun/images/login_active.png
+share/sddm/themes/elarun/images/login_normal.png
+share/sddm/themes/elarun/images/rectangle.png
+share/sddm/themes/elarun/images/rectangle_overlay.png
+share/sddm/themes/elarun/images/session_normal.png
+share/sddm/themes/elarun/images/system_hibernate.png
+share/sddm/themes/elarun/images/system_reboot.png
+share/sddm/themes/elarun/images/system_shutdown.png
+share/sddm/themes/elarun/images/system_suspend.png
+share/sddm/themes/elarun/images/system_switch_user.png
+share/sddm/themes/elarun/images/user_icon.png
+share/sddm/themes/elarun/metadata.desktop
+share/sddm/themes/elarun/theme.conf
+${PLIST.qt5}share/sddm/translations-qt5/ar.qm
+${PLIST.qt5}share/sddm/translations-qt5/bg.qm
+${PLIST.qt5}share/sddm/translations-qt5/bn.qm
+${PLIST.qt5}share/sddm/translations-qt5/ca.qm
+${PLIST.qt5}share/sddm/translations-qt5/cs.qm
+${PLIST.qt5}share/sddm/translations-qt5/da.qm
+${PLIST.qt5}share/sddm/translations-qt5/de.qm
+${PLIST.qt5}share/sddm/translations-qt5/es.qm
+${PLIST.qt5}share/sddm/translations-qt5/et.qm
+${PLIST.qt5}share/sddm/translations-qt5/eu.qm
+${PLIST.qt5}share/sddm/translations-qt5/fi.qm
+${PLIST.qt5}share/sddm/translations-qt5/fr.qm
+${PLIST.qt5}share/sddm/translations-qt5/gl.qm
+${PLIST.qt5}share/sddm/translations-qt5/he.qm
+${PLIST.qt5}share/sddm/translations-qt5/hi_IN.qm
+${PLIST.qt5}share/sddm/translations-qt5/hu.qm
+${PLIST.qt5}share/sddm/translations-qt5/ie.qm
+${PLIST.qt5}share/sddm/translations-qt5/is.qm
+${PLIST.qt5}share/sddm/translations-qt5/it.qm
+${PLIST.qt5}share/sddm/translations-qt5/ja.qm
+${PLIST.qt5}share/sddm/translations-qt5/ka.qm
+${PLIST.qt5}share/sddm/translations-qt5/kk.qm
+${PLIST.qt5}share/sddm/translations-qt5/ko.qm
+${PLIST.qt5}share/sddm/translations-qt5/lt.qm
+${PLIST.qt5}share/sddm/translations-qt5/lv.qm
+${PLIST.qt5}share/sddm/translations-qt5/nb.qm
+${PLIST.qt5}share/sddm/translations-qt5/nl.qm
+${PLIST.qt5}share/sddm/translations-qt5/nn.qm
+${PLIST.qt5}share/sddm/translations-qt5/oc.qm
+${PLIST.qt5}share/sddm/translations-qt5/pl.qm
+${PLIST.qt5}share/sddm/translations-qt5/pt_BR.qm
+${PLIST.qt5}share/sddm/translations-qt5/pt_PT.qm
+${PLIST.qt5}share/sddm/translations-qt5/ro.qm
+${PLIST.qt5}share/sddm/translations-qt5/ru.qm
+${PLIST.qt5}share/sddm/translations-qt5/sk.qm
+${PLIST.qt5}share/sddm/translations-qt5/sr.qm
+${PLIST.qt5}share/sddm/translations-qt5/sr%ijekavian.qm@localhost
+${PLIST.qt5}share/sddm/translations-qt5/sr%ijekavianlatin.qm@localhost
+${PLIST.qt5}share/sddm/translations-qt5/sr%latin.qm@localhost
+${PLIST.qt5}share/sddm/translations-qt5/sv.qm
+${PLIST.qt5}share/sddm/translations-qt5/tr.qm
+${PLIST.qt5}share/sddm/translations-qt5/uk.qm
+${PLIST.qt5}share/sddm/translations-qt5/zh_CN.qm
+${PLIST.qt5}share/sddm/translations-qt5/zh_TW.qm
+${PLIST.qt6}share/sddm/translations-qt6/ar.qm
+${PLIST.qt6}share/sddm/translations-qt6/bg.qm
+${PLIST.qt6}share/sddm/translations-qt6/bn.qm
+${PLIST.qt6}share/sddm/translations-qt6/ca.qm
+${PLIST.qt6}share/sddm/translations-qt6/cs.qm
+${PLIST.qt6}share/sddm/translations-qt6/da.qm
+${PLIST.qt6}share/sddm/translations-qt6/de.qm
+${PLIST.qt6}share/sddm/translations-qt6/es.qm
+${PLIST.qt6}share/sddm/translations-qt6/et.qm
+${PLIST.qt6}share/sddm/translations-qt6/eu.qm
+${PLIST.qt6}share/sddm/translations-qt6/fi.qm
+${PLIST.qt6}share/sddm/translations-qt6/fr.qm
+${PLIST.qt6}share/sddm/translations-qt6/gl.qm
+${PLIST.qt6}share/sddm/translations-qt6/he.qm
+${PLIST.qt6}share/sddm/translations-qt6/hi_IN.qm
+${PLIST.qt6}share/sddm/translations-qt6/hu.qm
+${PLIST.qt6}share/sddm/translations-qt6/ie.qm
+${PLIST.qt6}share/sddm/translations-qt6/is.qm
+${PLIST.qt6}share/sddm/translations-qt6/it.qm
+${PLIST.qt6}share/sddm/translations-qt6/ja.qm
+${PLIST.qt6}share/sddm/translations-qt6/ka.qm
+${PLIST.qt6}share/sddm/translations-qt6/kk.qm
+${PLIST.qt6}share/sddm/translations-qt6/ko.qm
+${PLIST.qt6}share/sddm/translations-qt6/lt.qm
+${PLIST.qt6}share/sddm/translations-qt6/lv.qm
+${PLIST.qt6}share/sddm/translations-qt6/nb.qm
+${PLIST.qt6}share/sddm/translations-qt6/nl.qm
+${PLIST.qt6}share/sddm/translations-qt6/nn.qm
+${PLIST.qt6}share/sddm/translations-qt6/oc.qm
+${PLIST.qt6}share/sddm/translations-qt6/pl.qm
+${PLIST.qt6}share/sddm/translations-qt6/pt_BR.qm
+${PLIST.qt6}share/sddm/translations-qt6/pt_PT.qm
+${PLIST.qt6}share/sddm/translations-qt6/ro.qm
+${PLIST.qt6}share/sddm/translations-qt6/ru.qm
+${PLIST.qt6}share/sddm/translations-qt6/sk.qm
+${PLIST.qt6}share/sddm/translations-qt6/sr.qm
+${PLIST.qt6}share/sddm/translations-qt6/sr%ijekavian.qm@localhost
+${PLIST.qt6}share/sddm/translations-qt6/sr%ijekavianlatin.qm@localhost
+${PLIST.qt6}share/sddm/translations-qt6/sr%latin.qm@localhost
+${PLIST.qt6}share/sddm/translations-qt6/sv.qm
+${PLIST.qt6}share/sddm/translations-qt6/tr.qm
+${PLIST.qt6}share/sddm/translations-qt6/uk.qm
+${PLIST.qt6}share/sddm/translations-qt6/zh_CN.qm
+${PLIST.qt6}share/sddm/translations-qt6/zh_TW.qm
+share/xsessions/ctwm.desktop
+share/xsessions/xinitrc.desktop
diff --git a/sddm/distinfo b/sddm/distinfo
new file mode 100644
index 0000000000..3f92fe4688
--- /dev/null
+++ b/sddm/distinfo
@@ -0,0 +1,17 @@
+$NetBSD: distinfo,v 1.1 2025/12/30 04:00:08 gutteridge Exp $
+
+BLAKE2s (sddm-0.21.0.tar.gz) = 074acc30769f11b9efda7e0a6eb5a48603034170bbe4f175f9f0b579ed3e2c8e
+SHA512 (sddm-0.21.0.tar.gz) = 2e8e460e7f318f20a406dcbb1a9fa1dc78b6a5b8d888bfbbaae22b9c642dbc49cf2ac682b4ea9ed847bbafa9bdc361ba08795e59cad970088b370caaaa70f458
+Size (sddm-0.21.0.tar.gz) = 3557266 bytes
+SHA1 (patch-CMakeLists.txt) = d1110dd1eb5b30a1d888e154b65ab4bf21960162
+SHA1 (patch-data_man_sddm.conf.rst.in) = 07b99ddf63108353db0b9490521292bd38b6ed5e
+SHA1 (patch-data_themes_CMakeLists.txt) = 105647648b6b172c89cbe68e5d34136459b8e1da
+SHA1 (patch-services_CMakeLists.txt) = f271ae7044792b22d7ac7427c462400c2cb24d29
+SHA1 (patch-src_common_Configuration.h) = 67d0960dc3b8a01d3c80d3897a1fa3c7575635fe
+SHA1 (patch-src_common_VirtualTerminal.cpp) = 12f888d18ff320ad93e069f9da45bc91ad200de5
+SHA1 (patch-src_common_XAuth.cpp) = 0d828eb6adc19bf7dc69a1ca26e80b92bcc56722
+SHA1 (patch-src_daemon_LogindDBusTypes.cpp) = cd8773a37bdc89196bba67cdb0c41a8a4b416306
+SHA1 (patch-src_helper_Backend.cpp) = 7b9702880840723411b0eb19c45cb66e33b8700c
+SHA1 (patch-src_helper_CMakeLists.txt) = 5e2de779a05f6d7f9ee9d64e615c81b9c9afa409
+SHA1 (patch-src_helper_HelperApp.cpp) = 41e455b406ed948248411e746bf8e8efa65e6659
+SHA1 (patch-src_helper_UserSession.cpp) = 9f89dd07ae5d76a1c380191de1938480002f8cd5
diff --git a/sddm/files/README.pkgsrc b/sddm/files/README.pkgsrc
new file mode 100644
index 0000000000..8bd8a4c8e5
--- /dev/null
+++ b/sddm/files/README.pkgsrc
@@ -0,0 +1,12 @@
+$NetBSD: README.pkgsrc,v 1.2 2025/12/30 17:55:02 gutteridge Exp $
+
+By default, this package will use PAM for authentication purposes.
+To add the required authenticaion policies to your PAM configuration,
+import the policy files provided with the package:
+
+	$ for i in sddm sddm-autologin sddm-greeter; do
+	> cp @PREFIX@/share/examples/pam.d/$i /etc/pam.d
+	> done
+
+You will also need to install the sddm rc.d script to run it as a
+service. These details will be noted during the installation phase.
diff --git a/sddm/files/sddm.sh b/sddm/files/sddm.sh
new file mode 100644
index 0000000000..c9516ff0dc
--- /dev/null
+++ b/sddm/files/sddm.sh
@@ -0,0 +1,44 @@
+#!@RCD_SCRIPTS_SHELL@
+#
+# $NetBSD: sddm.sh,v 1.1 2025/12/30 04:00:09 gutteridge Exp $
+#
+# PROVIDE: sddm
+# REQUIRE: DAEMON LOGIN wscons dbus
+# KEYWORD: shutdown
+
+$_rc_subr_loaded . /etc/rc.subr
+
+name="sddm"
+rcvar=$name
+procname="@LOCALBASE@/bin/$name"
+pidfile="@VARBASE@/run/$name.pid"
+command="@LOCALBASE@/sbin/daemonize"
+command_args="$command_args -p $pidfile"
+command_args="$command_args $procname"
+start_precmd=sddm_prestart
+start_cmd=sddm_start
+
+sddm_prestart() {
+	dirs="@VARBASE@/lib/$name"
+	if test ! -d $dir; then
+		mkdir -p $dir
+		chmod 0755 $dir
+		chown sddm:sddm $dir
+	fi
+}
+
+sddm_start()
+{
+	@ECHO@ "Starting ${name}."
+
+	(
+		for i in $(seq 1 60); do
+			pgrep -f '^/usr/libexec/getty ' >/dev/null && break
+			sleep 1
+		done
+		$command $command_args
+	) &
+}
+
+load_rc_config $name
+run_rc_command "$1"
diff --git a/sddm/files/xinit-session b/sddm/files/xinit-session
new file mode 100644
index 0000000000..62794d27a3
--- /dev/null
+++ b/sddm/files/xinit-session
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+XINITRC="$HOME/.xinitrc"
+if [ ! -f "$XINITRC" ] ; then
+        XINITRC="/etc/X11/xinit/xinitrc"
+fi
+
+if [ -n "$XINITRC" -a -f "$XINITRC" ] ; then
+        test -x "$XINITRC" && exec "$XINITRC"
+        test -f "$XINITRC" && exec /bin/sh "$XINITRC"
+fi
diff --git a/sddm/files/xsessions/ctwm.desktop b/sddm/files/xsessions/ctwm.desktop
new file mode 100644
index 0000000000..c6a0eebfa0
--- /dev/null
+++ b/sddm/files/xsessions/ctwm.desktop
@@ -0,0 +1,174 @@
+[Desktop Entry]
+Type=XSession
+Exec=ctwm
+TryExec=ctwm
+Name=CTWM
+Name[af]=CTWM
+Name[ar]=CTWM
+Name[ast]=CTWM
+Name[be]=CTWM
+Name[be@latin]=CTWM
+Name[bg]=CTWM
+Name[bn]=CTWM
+Name[bn_IN]=CTWM
+Name[br]=CTWM
+Name[bs]=CTVM
+Name[ca]=CTWM
+Name[ca@valencia]=CTWM
+Name[cs]=CTWM
+Name[csb]=CTWM
+Name[cy]=CTWM
+Name[da]=CTWM
+Name[de]=CTWM
+Name[el]=CTWM
+Name[en_GB]=CTWM
+Name[eo]=TFAC
+Name[es]=CTWM
+Name[et]=CTWM
+Name[eu]=CTWM
+Name[fi]=CTWM
+Name[fr]=CTWM
+Name[fy]=CTWM
+Name[ga]=CTWM
+Name[gl]=CTWM
+Name[gu]=CTWM
+Name[he]=CTWM
+Name[hi]=सीटीडबल्यूएम
+Name[hne]=सीटीडबल्यूएम
+Name[hr]=CTWM
+Name[hsb]=CTWM
+Name[hu]=CTWM
+Name[ia]=CTWM
+Name[id]=CTWM
+Name[is]=CTWM
+Name[it]=CTWM
+Name[ja]=CTWM
+Name[ka]=CTWM
+Name[kk]=CTWM
+Name[km]=CTWM
+Name[kn]=CTWM
+Name[ko]=CTWM
+Name[ku]=CTWM
+Name[lt]=CTWM
+Name[lv]=CTWM
+Name[mai]=सीटीडबल्यूएम
+Name[mk]=CTWM
+Name[ml]=സിടിഡബ്ലിയുഎം
+Name[mr]=CTWM
+Name[ms]=CTWM
+Name[nb]=CTWM
+Name[nds]=CTWM
+Name[ne]=CTWM
+Name[nl]=CTWM
+Name[nn]=CTWM
+Name[pa]=CTWM
+Name[pl]=CTWM
+Name[pt]=CTWM
+Name[pt_BR]=CTWM
+Name[ro]=CTWM
+Name[ru]=CTWM
+Name[se]=CTWM
+Name[si]=CTWM
+Name[sk]=CTWM
+Name[sl]=CTWM
+Name[sr]=ЦТВМ
+Name[sr@ijekavian]=ЦТВМ
+Name[sr@ijekavianlatin]=CTWM
+Name[sr@latin]=CTWM
+Name[sv]=CTWM
+Name[ta]=CTWM
+Name[te]=సి టి డబ్ల్యు ఎం
+Name[tg]=CTWM
+Name[th]=CTWM
+Name[tr]=CTWM
+Name[ug]=CTWM
+Name[uk]=CTWM
+Name[uz]=CTWM
+Name[uz@cyrillic]=CTWM
+Name[vi]=CTWM
+Name[wa]=CTWM
+Name[x-test]=xxCTWMxx
+Name[zh_CN]=CTWM
+Name[zh_TW]=CTWM
+Comment=Claude's Tab Window Manager, TWM enhanced by virtual screens, etc.
+Comment[af]=Claude se Tab venster bestuurder. Dis TWM wat met virtuele skerms verbeter is
+Comment[ar]=مدير نوافذ كلود بالألسنة, TWM محسن بشاشات افتراضية وغيرها.
+Comment[ast]=Claude's Tab Window Manager, TWM ameyoráu con pantalles virtuales, etc.
+Comment[be]=Кіраўнік вокнаў з укладкамі ад Claude, TWM з падтрымкай віртуальных экранаў і інш.
+Comment[be@latin]=„Claude's Tab Window Manager”: akońnik „TWM” ź lepšymi virtualnymi ekranami
+Comment[bg]=Claude's Tab Window Manager - представлява TWM, подобрен с виртуални екрани и др.
+Comment[bn]=ক্লড-এর ট্যাব উইণ্ডো ম্যানেজার
+Comment[bs]=Claude's Tab Window Manager, TVM dopunjen virtuelnim ekranima itd.
+Comment[ca]=Gestor de finestres amb pestanyes d'en Claude, millores TWM per a pantalles virtuals, etc.
+Comment[ca@valencia]=Gestor de finestres amb pestanyes d'en Claude, millores TWM per a pantalles virtuals, etc.
+Comment[cs]=Claudův správce oken s kartami, TWM vylepšený o virtuální obrazovky a další.
+Comment[csb]=Menadżera òknów Claude, TWM zbògacony ò wirtualné pùltë, ëtp.
+Comment[cy]=Trefnydd Ffenestri Tab Claude, TWM wedi ei wella gan sgriniau rhith, ayyb.
+Comment[da]=Claude's Tab vindueshåndtering, TWM udvidet med virtuelle skærme osv.
+Comment[de]=Claudes Fenstermanager mit Unterfenstern, eine verbesserte Fassung von TWM mit virtuellen Ansichten usw.
+Comment[el]=Ο διαχειριστής παραθύρων Tab του Claude, ο TWM εμπλουτισμένος με εικονικές οθόνες, κτλ.
+Comment[en_GB]=Claude's Tab Window Manager, TWM enhanced by virtual screens, etc.
+Comment[eo]=Taba Fenestroadministrilo de Claude, TWM, bonigita per virtualaj ekranoj ktp.
+Comment[es]=Claude's Tab Window Manager, TWM mejorado con pantallas virtuales, etc.
+Comment[et]=Claude kaartidega aknahaldur, aluseks TWM, mida on täiendatud virtuaaltöölaudadega jne.
+Comment[eu]=Claude's Tab Window Manager, alegiazko pantailez eta abarrez hobetutako TWMa
+Comment[fa]=مدیر پنجره تب Claude، TWM، گسترش‌یافته توسط پرده‌های مجازی و غیره.
+Comment[fi]=Claudes Tab Window Manager, TWM, jota on parannettu esimerkiksi virtuaalityöpöydillä
+Comment[fr]=« Claude 's Tab Window Manager », TWM enrichi par des bureaux virtuels, etc.
+Comment[fy]=Claude's Tab _indow Manager, TWM útbreide mei firtuele skermen etc.
+Comment[ga]=Bainisteoir Fuinneog Tab de chuid Claude, TWM feabhsaithe le scáileáin fhíorúla, srl.
+Comment[gl]=Xestor de xanelas de Claude, TWM mellorado con pantallas virtuais etc.
+Comment[gu]=ક્લાઉડેનું ટેબ વિન્ડો વ્યવસ્થાપક, TWM વર્ચ્યુઅલ સ્ક્રિન વગેરે વડે વિસ્તૃત કરેલ.
+Comment[he]=‏Claude's Tab Window Manager, ‏TWM עם שדרוג של מסכים וירטואליים וכו'
+Comment[hi]=क्लाउडे का टैब युक्त विंडो प्रबंधक, टीडबल्यूएम को आभासी स्क्रीन इत्यादि से बेहतर बनाया गया.
+Comment[hne]=क्लाउडे के टैब सहित विंडो प्रबंधक, टीडबल्यूएम ल आभासी स्क्रीन आदि से बेहतर बनाइस.
+Comment[hr]=Claudov Tab upravitelj prozora, TWM poboljšan virtualnim zaslonima, itd.
+Comment[hsb]=Claude's Tab Window Manager, TWM rozšěrjeny z wirtualnymi powjerchami atd.
+Comment[hu]=Claude lapozós ablakkezelője, lényegében a TWM, kiegészítve virtuális képernyőkkel, egyebekkel
+Comment[ia]=Claude's Tab Window Manager, TWM meliorate per schermos virtual, etc.
+Comment[id]=Claude's Tab Window Manager, TWM ditingkatkan dengan layar virtual, dll.
+Comment[is]=Tab gluggastjórinn eftir Claude sem hefur verið endurbættur með sýndarskjáum og fl.
+Comment[it]=Gestore di finestre con schede di Claude, TWM migliorato con schermi virtuali, eccetera.
+Comment[ja]=TWM に仮想デスクトップなどを強化した Claude のウィンドウマネージャ
+Comment[ka]=Claude's Tab Window Manager - TWM-ის გაუმჯობესებული ვერსია
+Comment[kk]=Claude's Tab Window Manager, TWM-ның жетілдірген нұсқасы.
+Comment[km]=កម្មវិធី​គ្រប់គ្រង​ផ្ទាំង​បង្អួច​របស់ Claude TWM ដែល​បាន​​ធ្វើ​ឲ្យ​ប្រសើរ​ដោយ​អេក្រង់​និមិត្ត​ជា​ដើម ។ល។
+Comment[kn]=ವಾಸ್ತವಪ್ರಾಯ ತೆರೆಗಳು ಇತ್ಯಾದಿಗಳಿಂದ ಊರ್ಜಿತಗೊಂಡ TWM ,ಕ್ಲಾಡ್ ನ ಟ್ಯಾಬ್ (ಹಾಳೆ ಆಧಾರಿತ) ಕಿಟಕಿ ವ್ಯವಸ್ಥಾಪಕ
+Comment[ko]=Claude의 탭 창 관리자. 가상 스크린 등의 기능을 가진 TWM.
+Comment[lt]=Claude kortelių langų tvarkyklė, TWM praplėsta virtualių ekranų palaikymu ir t.t.
+Comment[lv]=Claude Tab Logu Pārvaldnieks, TWM papildināts ar virtuālajiem ekrāniem, u.c.
+Comment[mai]=क्लाउडे क' टैब युक्त विंडो प्रबंधक, टीडबल्यूएम केँ आभासी स्क्रीन आदि सँ नीक बनाएल गेल.
+Comment[mk]=Claude's Tab Window Manager, TWM подобрен менаџер со виртуелни екрани итн.
+Comment[ml]=ക്ലോഡിന്റെ ടാബ് ജാലപാലകന്‍, വിര്‍ച്ച്വല്‍ സ്ക്രീന്‍ പോലുള്ളവ കൊണ്ടു് മെച്ചപ്പെട്ട ടിഡബ്ല്യൂഎം
+Comment[mr]=क्लाउडे चे टैब युक्त चौकट प्रबंधक, TWM ला आभासी स्क्रीन इत्यादि सह उत्तम बनविले गेले.
+Comment[nb]=Claude's Tab Window Manager, TWM forbedret med virtuelle skrivebord,osv.
+Comment[nds]=Claude's Tab Finsterpleger, TWM verbetert üm virtuelle Schriefdischen usw.
+Comment[ne]=क्लाउडको ट्याब सञ्झ्याल प्रबन्धक, अवास्तविक पर्दाद्वारा बृद्धि गरिएको TWM, आदि
+Comment[nl]=Claude's Tab Window Manager, TWM uitgebreid met virtuele schermen etc.
+Comment[nn]=Claude's Tab Window Manager, TWM med virtuelle skrivebord og andre forbetringar
+Comment[pa]=ਕਲਾਉਡੀ ਦਾ ਟੈਬ ਵਿੰਡੋ ਮੈਨੈਜਰ, TWM ਫਰਜ਼ੀ ਪਰਦਿਆਂ ਆਦਿ ਨਾਲ ਲੈੱਸ ਹੈ।
+Comment[pl]=Menadżer okien Claude, TWM wzbogacony o wirtualne pulpity, itp.
+Comment[pt]=O Tab Window Manager do Claude, um TWM melhorado com ecrãs virtuais, etc.
+Comment[pt_BR]=O gerenciador de janelas em abas do Claude, o TWM melhorado pelas telas virtuais, etc.
+Comment[ro]=Administratorul de ferestre al lui Claude, o versiune îmbunătățită de TWM cu ecrane virtuale etc.
+Comment[ru]=Claude's Tab Window Manager - улучшенная версия TWM
+Comment[se]=Claudea Tab Window Manager, TWM mas lea virtuella čállinbeavddit ja eará buorideamit.
+Comment[si]=Claude හී ටැබ් කවුළු කළමණාකරු, අතත්‍ය තිර හා තවත් දෑ සමඟ TWM දියුණු කර ඇත.
+Comment[sk]=Claude's Tab Window Manager, TWM rozšírený o virtuálne plochy, atď.
+Comment[sl]=Upravljalnik oken Claude's Tab, TWM izboljšan z navideznimi zasloni ipd.
+Comment[sr]=„Клодов менаџер прозора језичак“ (Claude's Tab Window Manager), ТВМ допуњен виртуелним екранима итд.
+Comment[sr@ijekavian]=„Клодов менаџер прозора језичак“ (Claude's Tab Window Manager), ТВМ допуњен виртуелним екранима итд.
+Comment[sr@ijekavianlatin]=„Klodov menadžer prozora jezičak“ (Claude's Tab Window Manager), TWM dopunjen virtuelnim ekranima itd.
+Comment[sr@latin]=„Klodov menadžer prozora jezičak“ (Claude's Tab Window Manager), TWM dopunjen virtuelnim ekranima itd.
+Comment[sv]=Claudes fönsterhanterare med flikar, TWM förbättrad med virtuella skärmar, etc.
+Comment[ta]= க்ளூடின் தத்தல் சாளர மேளாளர், TWM ஆல் மேம்படுத்தப்பட்ட மெய்நிகர் திரைகள்..
+Comment[te]=క్లాడ్‌యొక్క టాబ్ విండో నిర్వాహిక, TWM వర్చ్యువల్ తెరలద్వారా విస్తరించిన, మొదలైన.
+Comment[tg]=Claude's Tab Window Manager - улучшенная версия TWM
+Comment[th]=ตัวจัดการแท็บหน้าต่างของ Claude คือ TWM ที่เพิ่มความสามารถด้วยหน้าจอเสมือน และอื่นๆ
+Comment[tr]=Claude's Sekme Pencere Yöneticisi, sanal ekranlar ile TWM genişletilmiş, vs.
+Comment[ug]=Claude بەتكۈچلۈك كۆزنەك باشقۇرغۇچ، مەۋھۇم كۆزنەك قاتارلىقلار كۈچەيتىلگەن TWM.
+Comment[uk]=Claude's Tab Window Manager, TWM з підтримкою віртуальних екранів тощо.
+Comment[wa]=Li Manaedjeu des fniesses avou linwetes da Claude, TWM avou des forveyowes waitroûles, evnd.
+Comment[x-test]=xxClaude's Tab Window Manager, TWM enhanced by virtual screens, etc.xx
+Comment[zh_CN]=Claude 的标签式窗口管理器,加强了虚拟屏幕等功能的 TWM。
+Comment[zh_TW]=Claude's Tab 視窗管理程式, 基於 TWM 並加強虛擬螢幕等功能
diff --git a/sddm/files/xsessions/xinitrc.desktop b/sddm/files/xsessions/xinitrc.desktop
new file mode 100644
index 0000000000..b76e96b8c9
--- /dev/null
+++ b/sddm/files/xsessions/xinitrc.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=XSession
+Exec=@PREFIX@/share/sddm/scripts/xinit-session
+TryExec=@PREFIX@/share/sddm/scripts/xinit-session
+Name=User Session
diff --git a/sddm/options.mk b/sddm/options.mk
new file mode 100644
index 0000000000..d8ad5c11a6
--- /dev/null
+++ b/sddm/options.mk
@@ -0,0 +1,29 @@
+# $NetBSD: options.mk,v 1.1 2025/12/30 04:00:08 gutteridge Exp $
+
+PKG_OPTIONS_VAR=		PKG_OPTIONS.sddm
+PKG_OPTIONS_REQUIRED_GROUPS+=	gui
+PKG_OPTIONS_GROUP.gui=		qt5 qt6
+PKG_SUGGESTED_OPTIONS+=		qt6
+
+PLIST_VARS+=	qt5
+PLIST_VARS+=	qt6
+
+.include "../../mk/bsd.prefs.mk"
+.include "../../mk/bsd.options.mk"
+
+.if !empty(PKG_OPTIONS:Mqt5)
+PLIST.qt5=	yes
+CMAKE_CONFIGURE_ARGS+=	-DBUILD_WITH_QT6=OFF
+BUILDLINK_API_DEPENDS.qt5-qtbase+=     qt5-qtbase>=5.15.17
+.include "../../x11/qt5-qtbase/buildlink3.mk"
+.include "../../x11/qt5-qtdeclarative/buildlink3.mk"
+.include "../../x11/qt5-qttools/buildlink3.mk"
+.endif
+
+.if !empty(PKG_OPTIONS:Mqt6)
+PLIST.qt6=	yes
+CMAKE_CONFIGURE_ARGS+=	-DBUILD_WITH_QT6=ON
+.include "../../x11/qt6-qtbase/buildlink3.mk"
+.include "../../lang/qt6-qtdeclarative/buildlink3.mk"
+.include "../../devel/qt6-qttools/buildlink3.mk"
+.endif
diff --git a/sddm/patches/patch-CMakeLists.txt b/sddm/patches/patch-CMakeLists.txt
new file mode 100644
index 0000000000..c8575b6d81
--- /dev/null
+++ b/sddm/patches/patch-CMakeLists.txt
@@ -0,0 +1,24 @@
+$NetBSD: patch-CMakeLists.txt,v 1.1 2025/12/30 04:00:09 gutteridge Exp $
+
+Update the minimum required cmake version to 3.5 to avoid build 
+errors on modern cmake versions. 
+
+Fix the shutdown command for NetBSD.
+
+--- CMakeLists.txt.orig	2025-10-03 11:58:46.078418066 +0000
++++ CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 3.4)
++cmake_minimum_required(VERSION 3.5)
+ 
+ project(SDDM)
+ 
+@@ -155,7 +155,7 @@ if (NOT ELOGIND_FOUND AND NOT SYSTEMD_FO
+     # Set the VT on which sddm will normally appear, and the
+     # commands for shutdown and reboot. On FreeBSD, there are
+     # normally more getty's running than on Linux.
+-    if("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD")
++    if("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD" OR "${CMAKE_SYSTEM_NAME}" STREQUAL "NetBSD")
+         set(HALT_COMMAND "/sbin/shutdown -p now")
+     else()
+         set(HALT_COMMAND "/sbin/shutdown -h -P now")
diff --git a/sddm/patches/patch-data_man_sddm.conf.rst.in b/sddm/patches/patch-data_man_sddm.conf.rst.in
new file mode 100644
index 0000000000..b7c7351efd
--- /dev/null
+++ b/sddm/patches/patch-data_man_sddm.conf.rst.in
@@ -0,0 +1,47 @@
+$NetBSD: patch-data_man_sddm.conf.rst.in,v 1.1 2025/12/30 04:00:09 gutteridge Exp $
+
+Fix hardcoded absolute paths.
+
+--- data/man/sddm.conf.rst.in.orig	2025-10-06 03:46:40.665247116 +0000
++++ data/man/sddm.conf.rst.in
+@@ -114,7 +114,7 @@ OPTIONS
+ 
+ `ServerPath=`
+ 	Path of the X server.
+-	Default value is "/usr/bin/X".
++	Default value is "@X11BASE@/bin/X".
+ 
+ `ServerArguments=`
+ 	Arguments to the X server.
+@@ -122,11 +122,11 @@ OPTIONS
+ 
+ `XephyrPath=`
+ 	Path of the Xephyr.
+-	Default value is "/usr/bin/Xephyr".
++	Default value is "@PREFIX@/bin/Xephyr".
+ 
+ `SessionDir=`
+ 	Comma-separated list of directories containing session files.
+-	Default value is "/usr/local/share/xsessions,/usr/share/xsessions".
++	Default value is "@PREFIX@/share/xsessions,/usr/share/xsessions".
+ 
+ `SessionCommand=`
+ 	Path of script to execute when starting the user session. This script
+@@ -174,7 +174,7 @@ The `UserAuthFile=` option was removed, 
+ 
+ `SessionDir=`
+ 	Comma-separated list of directories containing session files.
+-	Default value is "/usr/local/share/wayland-sessions,/usr/share/wayland-sessions".
++	Default value is "@PREFIX@/share/wayland-sessions,/usr/share/wayland-sessions".
+ 
+ `SessionCommand=`
+ 	Path of script to execute when starting the user session. This script
+@@ -196,7 +196,7 @@ The `UserAuthFile=` option was removed, 
+ `DefaultPath=`
+ 	Default path to set after successfully logging in.
+ 	This is also where SDDM looks for programs.
+-	Default value is "/usr/local/bin:/usr/bin:/bin".
++	Default value is "@PREFIX@/bin:/usr/bin:/bin".
+ 
+ `MinimumUid=`
+ 	Minimum user id of the users to be listed in the
diff --git a/sddm/patches/patch-data_themes_CMakeLists.txt b/sddm/patches/patch-data_themes_CMakeLists.txt
new file mode 100644
index 0000000000..465bb3fd34
--- /dev/null
+++ b/sddm/patches/patch-data_themes_CMakeLists.txt
@@ -0,0 +1,12 @@
+$NetBSD: patch-data_themes_CMakeLists.txt,v 1.1 2025/12/30 04:00:09 gutteridge Exp $
+
+Disable installation of themes distributed under an unsupported license.
+
+--- data/themes/CMakeLists.txt.orig	2025-10-05 08:19:57.818176883 +0000
++++ data/themes/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-set(THEMES elarun maldives maya)
++set(THEMES elarun)
+ 
+ foreach(THEME ${THEMES})
+     # We assume that theme-specific translations are stored
diff --git a/sddm/patches/patch-services_CMakeLists.txt b/sddm/patches/patch-services_CMakeLists.txt
new file mode 100644
index 0000000000..282f3978af
--- /dev/null
+++ b/sddm/patches/patch-services_CMakeLists.txt
@@ -0,0 +1,39 @@
+$NetBSD: patch-services_CMakeLists.txt,v 1.1 2025/12/30 04:00:09 gutteridge Exp $
+
+Install OpenPAM files instead of Linux-Pam for NetBSD.
+
+--- services/CMakeLists.txt.orig	2024-02-26 10:23:03.000000000 +0000
++++ services/CMakeLists.txt
+@@ -21,21 +21,21 @@ configure_file("${CMAKE_CURRENT_SOURCE_D
+ 
+ if(INSTALL_PAM_CONFIGURATION)
+     if(EXISTS "/etc/debian_version")
+-        install(FILES debian.sddm-autologin.pam DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/pam.d RENAME sddm-autologin)
+-        install(FILES debian.sddm-greeter.pam DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/pam.d RENAME sddm-greeter)
+-        install(FILES debian.sddm.pam DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/pam.d RENAME sddm)
+-    elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+-        install(FILES freebsd.sddm-autologin.pam DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/pam.d RENAME sddm-autologin)
+-        install(FILES freebsd.sddm-greeter.pam DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/pam.d RENAME sddm-greeter)
+-        install(FILES freebsd.sddm.pam DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/pam.d RENAME sddm)
++        install(FILES debian.sddm-autologin.pam DESTINATION ${CMAKE_INSTALL_PREFIX}/share/examples/pam.d RENAME sddm-autologin)
++        install(FILES debian.sddm-greeter.pam DESTINATION ${CMAKE_INSTALL_PREFIX}/share/examples/pam.d RENAME sddm-greeter)
++        install(FILES debian.sddm.pam DESTINATION ${CMAKE_INSTALL_PREFIX}/share/examples/pam.d RENAME sddm)
++    elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR CMAKE_SYSTEM_NAME STREQUAL "NetBSD")
++        install(FILES freebsd.sddm-autologin.pam DESTINATION ${CMAKE_INSTALL_PREFIX}/share/examples/pam.d RENAME sddm-autologin)
++        install(FILES freebsd.sddm-greeter.pam DESTINATION ${CMAKE_INSTALL_PREFIX}/share/examples/pam.d RENAME sddm-greeter)
++        install(FILES freebsd.sddm.pam DESTINATION ${CMAKE_INSTALL_PREFIX}/share/examples/pam.d RENAME sddm)
+     else()
+         if(HAVE_PAM_FAILLOCK)
+-           install(FILES sddm-autologin.pam DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/pam.d RENAME sddm-autologin)
++           install(FILES sddm-autologin.pam DESTINATION ${CMAKE_INSTALL_PREFIX}/share/examples/pam.d RENAME sddm-autologin)
+         else()
+-           install(FILES sddm-autologin-tally2.pam DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/pam.d RENAME sddm-autologin)
++           install(FILES sddm-autologin-tally2.pam DESTINATION ${CMAKE_INSTALL_PREFIX}/share/examples/pam.d RENAME sddm-autologin)
+         endif()
+ 
+-        install(FILES sddm.pam DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/pam.d RENAME sddm)
+-        install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sddm-greeter.pam" DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/pam.d RENAME sddm-greeter)
++        install(FILES sddm.pam DESTINATION ${CMAKE_INSTALL_PREFIX}/share/examples/pam.d RENAME sddm)
++        install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sddm-greeter.pam" DESTINATION ${CMAKE_INSTALL_PREFIX}/share/examples/pam.d RENAME sddm-greeter)
+     endif()
+ endif()
diff --git a/sddm/patches/patch-src_common_Configuration.h b/sddm/patches/patch-src_common_Configuration.h
new file mode 100644
index 0000000000..3e7b273fde
--- /dev/null
+++ b/sddm/patches/patch-src_common_Configuration.h
@@ -0,0 +1,47 @@
+$NetBSD: patch-src_common_Configuration.h,v 1.1 2025/12/30 04:00:09 gutteridge Exp $
+
+Fix hardcoded absolute paths.
+
+--- src/common/Configuration.h.orig	2024-02-26 10:23:03.000000000 +0000
++++ src/common/Configuration.h
+@@ -47,7 +47,7 @@ namespace SDDM {
+                                                                                                    "NOTE: Currently ignored if autologin is enabled."));
+         Entry(InputMethod,         QString,     QStringLiteral("qtvirtualkeyboard"),                   _S("Input method module"));
+         Entry(Namespaces,          QStringList, QStringList(),                                  _S("Comma-separated list of Linux namespaces for user session to enter"));
+-        Entry(GreeterEnvironment,  QStringList, QStringList(),                                  _S("Comma-separated list of environment variables to be set"));
++        Entry(GreeterEnvironment,  QStringList, {_S("PATH=@PREFIX@/bin:@X11BASE@/bin:/usr/bin:/bin")},        _S("Comma-separated list of environment variables to be set"));
+         //  Name   Entries (but it's a regular class again)
+         Section(Theme,
+             Entry(ThemeDir,            QString,     _S(DATA_INSTALL_DIR "/themes"),             _S("Theme directory path"));
+@@ -65,10 +65,10 @@ namespace SDDM {
+ 
+         // TODO: Not absolutely sure if everything belongs here. Xsessions, VT and probably some more seem universal
+         Section(X11,
+-            Entry(ServerPath,          QString,     _S("/usr/bin/X"),                           _S("Path to X server binary"));
++            Entry(ServerPath,          QString,     _S("@X11BASE@/bin/X"),                      _S("Path to X server binary"));
+             Entry(ServerArguments,     QString,     _S("-nolisten tcp"),                        _S("Arguments passed to the X server invocation"));
+-            Entry(XephyrPath,          QString,     _S("/usr/bin/Xephyr"),                      _S("Path to Xephyr binary"));
+-            Entry(SessionDir,          QStringList, {_S("/usr/local/share/xsessions"),
++            Entry(XephyrPath,          QString,     _S("@PREFIX@/bin/Xephyr"),                  _S("Path to Xephyr binary"));
++            Entry(SessionDir,          QStringList, {_S("@PREFIX@/share/xsessions"),
+                                                      _S("/usr/share/xsessions")},               _S("Comma-separated list of directories containing available X sessions"));
+             Entry(SessionCommand,      QString,     _S(SESSION_COMMAND),                        _S("Path to a script to execute when starting the desktop session"));
+             Entry(SessionLogFile,      QString,     _S(".local/share/sddm/xorg-session.log"),   _S("Path to the user session log file"));
+@@ -79,7 +79,7 @@ namespace SDDM {
+ 
+         Section(Wayland,
+             Entry(CompositorCommand,   QString,     _S("weston --shell=kiosk"),                 _S("Path of the Wayland compositor to execute when starting the greeter"));
+-            Entry(SessionDir,          QStringList, {_S("/usr/local/share/wayland-sessions"),
++            Entry(SessionDir,          QStringList, {_S("@PREFIX@/share/wayland-sessions"),
+                                                      _S("/usr/share/wayland-sessions")},        _S("Comma-separated list of directories containing available Wayland sessions"));
+             Entry(SessionCommand,      QString,     _S(WAYLAND_SESSION_COMMAND),                _S("Path to a script to execute when starting the desktop session"));
+             Entry(SessionLogFile,      QString,     _S(".local/share/sddm/wayland-session.log"),_S("Path to the user session log file"));
+@@ -87,7 +87,7 @@ namespace SDDM {
+         );
+ 
+         Section(Users,
+-            Entry(DefaultPath,         QString,     _S("/usr/local/bin:/usr/bin:/bin"),         _S("Default $PATH for logged in users"));
++            Entry(DefaultPath,         QString,     _S("@PREFIX@/bin:@X11BASE@/bin:/usr/bin:/bin"),         _S("Default $PATH for logged in users"));
+             Entry(MinimumUid,          int,         UID_MIN,                                    _S("Minimum user id for displayed users"));
+             Entry(MaximumUid,          int,         UID_MAX,                                    _S("Maximum user id for displayed users"));
+             Entry(HideUsers,           QStringList, QStringList(),                              _S("Comma-separated list of users that should not be listed"));
diff --git a/sddm/patches/patch-src_common_VirtualTerminal.cpp b/sddm/patches/patch-src_common_VirtualTerminal.cpp
new file mode 100644
index 0000000000..7d76bcea06
--- /dev/null
+++ b/sddm/patches/patch-src_common_VirtualTerminal.cpp
@@ -0,0 +1,52 @@
+$NetBSD: patch-src_common_VirtualTerminal.cpp,v 1.1 2025/12/30 04:00:09 gutteridge Exp $
+
+Fix tty device for NetBSD.
+
+--- src/common/VirtualTerminal.cpp.orig	2024-02-26 10:23:03.000000000 +0000
++++ src/common/VirtualTerminal.cpp
+@@ -29,6 +29,8 @@
+ #include <signal.h>
+ #ifdef __FreeBSD__
+ #include <sys/consio.h>
++#elif __NetBSD__
++#include <dev/wscons/wsdisplay_usl_io.h>
+ #else
+ #include <linux/vt.h>
+ #include <linux/kd.h>
+@@ -58,6 +60,21 @@ namespace SDDM {
+             }
+             return vtActive;
+         }
++#elif defined(__NetBSD__)
++        static const char *defaultVtPath = "/dev/ttyE0";        
++
++        QString path(int vt) {
++            return QStringLiteral("/dev/ttyE%1").arg(vt - 1);
++        }
++
++        int getVtActive(int fd) {
++            int vtActive = 0;
++            if (ioctl(fd, VT_GETACTIVE, &vtActive) < 0) {
++                qCritical() << "Failed to get current VT:" << strerror(errno);
++                return -1;
++            }
++            return vtActive;
++        }
+ #else
+         static const char *defaultVtPath = "/dev/tty0";
+ 
+@@ -119,12 +136,12 @@ namespace SDDM {
+ 
+             if (getmodeReply.mode != VT_AUTO)
+                 goto out;
+-
++#ifdef KDGETMODE
+             if (ioctl(fd, KDGETMODE, &kernelDisplayMode) < 0) {
+                 qWarning() << "Failed to query kernel display mode:" << strerror(errno);
+                 ok = false;
+             }
+-
++#endif
+             if (kernelDisplayMode == KD_TEXT)
+                 goto out;
+ 
diff --git a/sddm/patches/patch-src_common_XAuth.cpp b/sddm/patches/patch-src_common_XAuth.cpp
new file mode 100644
index 0000000000..c1e4fbc8bf
--- /dev/null
+++ b/sddm/patches/patch-src_common_XAuth.cpp
@@ -0,0 +1,15 @@
+$NetBSD: patch-src_common_XAuth.cpp,v 1.1 2025/12/30 04:00:09 gutteridge Exp $
+
+Define HOST_NAME_MAX.
+
+--- src/common/XAuth.cpp.orig	2024-02-26 10:23:03.000000000 +0000
++++ src/common/XAuth.cpp
+@@ -31,7 +31,7 @@
+ #include <unistd.h>
+ #include <X11/Xauth.h>
+ 
+-#ifdef __FreeBSD__
++#if defined(__FreeBSD__) || defined(__NetBSD__)
+ #define HOST_NAME_MAX _POSIX_HOST_NAME_MAX
+ #endif
+ 
diff --git a/sddm/patches/patch-src_daemon_LogindDBusTypes.cpp b/sddm/patches/patch-src_daemon_LogindDBusTypes.cpp
new file mode 100644
index 0000000000..47edfe45e0
--- /dev/null
+++ b/sddm/patches/patch-src_daemon_LogindDBusTypes.cpp
@@ -0,0 +1,35 @@
+$NetBSD: patch-src_daemon_LogindDBusTypes.cpp,v 1.1 2025/12/30 04:00:09 gutteridge Exp $
+
+As of version 0.21.0, support for ConsoleKit as a login manager in SDDM is broken.
+
+--- src/daemon/LogindDBusTypes.cpp.orig	2025-10-04 05:07:32.881690547 +0000
++++ src/daemon/LogindDBusTypes.cpp
+@@ -58,17 +58,17 @@ LogindPathInternal::LogindPathInternal()
+         return;
+     }
+ 
+-    if (QDBusConnection::systemBus().interface()->isServiceRegistered(QStringLiteral("org.freedesktop.ConsoleKit"))) {
+-        qDebug() << "Console kit interface found";
+-        available = true;
+-        serviceName = QStringLiteral("org.freedesktop.ConsoleKit");
+-        managerPath = QStringLiteral("/org/freedesktop/ConsoleKit/Manager");
+-        managerIfaceName = QStringLiteral("org.freedesktop.ConsoleKit.Manager"); //note this doesn't match logind
+-        seatIfaceName = QStringLiteral("org.freedesktop.ConsoleKit.Seat");
+-        sessionIfaceName = QStringLiteral("org.freedesktop.ConsoleKit.Session");
+-        userIfaceName = QStringLiteral("org.freedesktop.ConsoleKit.User");
+-        return;
+-    }
++    //if (QDBusConnection::systemBus().interface()->isServiceRegistered(QStringLiteral("org.freedesktop.ConsoleKit"))) {
++    //    qDebug() << "Console kit interface found";
++    //    available = true;
++    //    serviceName = QStringLiteral("org.freedesktop.ConsoleKit");
++    //    managerPath = QStringLiteral("/org/freedesktop/ConsoleKit/Manager");
++    //    managerIfaceName = QStringLiteral("org.freedesktop.ConsoleKit.Manager"); //note this doesn't match logind
++    //    seatIfaceName = QStringLiteral("org.freedesktop.ConsoleKit.Seat");
++    //    sessionIfaceName = QStringLiteral("org.freedesktop.ConsoleKit.Session");
++    //    userIfaceName = QStringLiteral("org.freedesktop.ConsoleKit.User");
++    //    return;
++    //}
+     qDebug() << "No session manager found";
+ }
+ 
diff --git a/sddm/patches/patch-src_helper_Backend.cpp b/sddm/patches/patch-src_helper_Backend.cpp
new file mode 100644
index 0000000000..50353a6fd9
--- /dev/null
+++ b/sddm/patches/patch-src_helper_Backend.cpp
@@ -0,0 +1,47 @@
+$NetBSD: patch-src_helper_Backend.cpp,v 1.1 2025/12/30 04:00:09 gutteridge Exp $
+
+Add environment variables from /etc/login.conf on NetBSD systems.
+
+--- src/helper/Backend.cpp.orig	2024-02-26 10:23:03.000000000 +0000
++++ src/helper/Backend.cpp
+@@ -29,7 +29,7 @@
+ 
+ #include <pwd.h>
+ 
+-#if defined(Q_OS_FREEBSD)
++#if defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)
+ #include <sys/types.h>
+ #include <login_cap.h>
+ #endif
+@@ -68,7 +68,7 @@ namespace SDDM {
+             env.insert(QStringLiteral("SHELL"), QString::fromLocal8Bit(pw->pw_shell));
+             env.insert(QStringLiteral("USER"), QString::fromLocal8Bit(pw->pw_name));
+             env.insert(QStringLiteral("LOGNAME"), QString::fromLocal8Bit(pw->pw_name));
+-#if defined(Q_OS_FREEBSD)
++#if defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)
+         /* get additional environment variables via setclassenvironment();
+             this needs to be done here instead of in UserSession::setupChildProcess
+             as the environment for execve() is prepared here
+@@ -82,6 +82,7 @@ namespace SDDM {
+             QProcessEnvironment::systemEnvironment().clear();
+             QString savedLang = env.value(QStringLiteral("LANG"));
+ 
++#if defined(Q_OS_FREEBSD)
+             // setclassenvironment() is the implementation inside setusercontext()
+             // so use lowest-level function there
+             setclassenvironment(lc, pw, 1);     /* path variables */
+@@ -92,7 +93,13 @@ namespace SDDM {
+                 setclassenvironment(lc, pw, 0);
+                 login_close(lc);
+             }
+-
++#elif defined(Q_OS_NETBSD)
++            // NetBSD does not have setclassenvironment() function, so 
++            // setusercontext() is used to set environment variables.
++            setusercontext(lc, pw, pw->pw_uid, LOGIN_SETPATH);
++            setusercontext(lc, pw, pw->pw_uid, LOGIN_SETENV);
++            login_close(lc);
++#endif
+             // copy all environment variables that are now set
+             env.insert(QProcessEnvironment::systemEnvironment());
+             // for sddm itself, we don't want to set LANG from capabilities.
diff --git a/sddm/patches/patch-src_helper_CMakeLists.txt b/sddm/patches/patch-src_helper_CMakeLists.txt
new file mode 100644
index 0000000000..4f1833af31
--- /dev/null
+++ b/sddm/patches/patch-src_helper_CMakeLists.txt
@@ -0,0 +1,15 @@
+$NetBSD: patch-src_helper_CMakeLists.txt,v 1.1 2025/12/30 04:00:09 gutteridge Exp $
+
+Add -lutil flag for NetBSD builds
+
+--- src/helper/CMakeLists.txt.orig	2024-02-26 10:23:03.000000000 +0000
++++ src/helper/CMakeLists.txt
+@@ -35,7 +35,7 @@ target_link_libraries(sddm-helper
+                       Qt${QT_MAJOR_VERSION}::DBus
+                       Qt${QT_MAJOR_VERSION}::Qml
+                       ${LIBXAU_LINK_LIBRARIES})
+-if("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD")
++if("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD" OR "${CMAKE_SYSTEM_NAME}" STREQUAL "NetBSD")
+     # On FreeBSD (possibly other BSDs as well), we want to use
+     # setusercontext() to set up the login configuration from login.conf
+     find_library(_have_libutil util)
diff --git a/sddm/patches/patch-src_helper_HelperApp.cpp b/sddm/patches/patch-src_helper_HelperApp.cpp
new file mode 100644
index 0000000000..20759a626e
--- /dev/null
+++ b/sddm/patches/patch-src_helper_HelperApp.cpp
@@ -0,0 +1,15 @@
+$NetBSD: patch-src_helper_HelperApp.cpp,v 1.1 2025/12/30 04:00:09 gutteridge Exp $
+
+Fix adding entry line to the accounting database
+
+--- src/helper/HelperApp.cpp.orig	2024-02-26 10:23:03.000000000 +0000
++++ src/helper/HelperApp.cpp
+@@ -375,7 +375,7 @@ namespace SDDM {
+ #if defined(Q_OS_LINUX)
+         // append to wtmp
+         updwtmpx("/var/log/wtmp", &entry);
+-#elif defined(Q_OS_FREEBSD)
++#elif defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)
+         pututxline(&entry);
+ #endif
+     }
diff --git a/sddm/patches/patch-src_helper_UserSession.cpp b/sddm/patches/patch-src_helper_UserSession.cpp
new file mode 100644
index 0000000000..8c3b03175f
--- /dev/null
+++ b/sddm/patches/patch-src_helper_UserSession.cpp
@@ -0,0 +1,33 @@
+$NetBSD: patch-src_helper_UserSession.cpp,v 1.1 2025/12/30 04:00:09 gutteridge Exp $
+
+Setting up user context on NetBSD systems.
+
+--- src/helper/UserSession.cpp.orig	2024-02-26 10:23:03.000000000 +0000
++++ src/helper/UserSession.cpp
+@@ -39,7 +39,7 @@
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <sched.h>
+-#ifdef Q_OS_FREEBSD
++#if defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)
+ #include <login_cap.h>
+ #endif
+ 
+@@ -275,7 +275,7 @@ namespace SDDM {
+             exit(Auth::HELPER_OTHER_ERROR);
+         }
+ 
+-#if defined(Q_OS_FREEBSD)
++#if defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)
+         // execve() uses the environment prepared in Backend::openSession(),
+         // therefore environment variables which are set here are ignored.
+         if (setusercontext(NULL, &pw, pw.pw_uid, LOGIN_SETALL) != 0) {
+@@ -341,7 +341,7 @@ namespace SDDM {
+             qCritical() << "setuid(" << pw.pw_uid << ") failed for user: " << username;
+             exit(Auth::HELPER_OTHER_ERROR);
+         }
+-#endif /* Q_OS_FREEBSD */
++#endif /* defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD) */
+         if (chdir(pw.pw_dir) != 0) {
+             qCritical() << "chdir(" << pw.pw_dir << ") failed for user: " << username;
+             qCritical() << "verify directory exist and has sufficient permissions";


Home | Main Index | Thread Index | Old Index