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