sddm: separate wrapping from building

K900 59aa3af1 ff303455

Changed files
+145 -75
pkgs
applications
+27 -75
pkgs/applications/display-managers/sddm/default.nix
···
-
{ stdenv, lib, fetchFromGitHub
-
, cmake, pkg-config, qttools
-
, libxcb, libXau, pam, qtbase, wrapQtAppsHook, qtdeclarative
-
, qtquickcontrols2 ? null, systemd, xkeyboardconfig
+
{
+
callPackage,
+
runCommand,
+
wrapQtAppsHook,
+
unwrapped ? callPackage ./unwrapped.nix {},
+
extraPackages ? [],
}:
-
let
-
isQt6 = lib.versions.major qtbase.version == "6";
-
in stdenv.mkDerivation {
-
pname = "sddm";
-
version = "0.20.0-unstable-2023-12-29";
+
runCommand "sddm-wrapped" {
+
inherit (unwrapped) version;
-
src = fetchFromGitHub {
-
owner = "sddm";
-
repo = "sddm";
-
rev = "501129294be1487f753482c29949fc1c19ef340e";
-
hash = "sha256-mLm987Ah0X9s0tBK2a45iERwYoh5JzWb3TFlSoxi8CA=";
-
};
-
-
patches = [
-
./sddm-ignore-config-mtime.patch
-
./sddm-default-session.patch
-
];
-
-
postPatch = ''
-
substituteInPlace src/greeter/waylandkeyboardbackend.cpp \
-
--replace "/usr/share/X11/xkb/rules/evdev.xml" "${xkeyboardconfig}/share/X11/xkb/rules/evdev.xml"
-
'';
-
-
nativeBuildInputs = [ wrapQtAppsHook cmake pkg-config qttools ];
-
-
buildInputs = [
-
libxcb
-
libXau
-
pam
-
qtbase
-
qtdeclarative
-
qtquickcontrols2
-
systemd
-
];
-
-
cmakeFlags = [
-
(lib.cmakeBool "BUILD_WITH_QT6" isQt6)
-
"-DCONFIG_FILE=/etc/sddm.conf"
-
"-DCONFIG_DIR=/etc/sddm.conf.d"
+
buildInputs = unwrapped.buildInputs ++ extraPackages;
+
nativeBuildInputs = [ wrapQtAppsHook ];
-
# Set UID_MIN and UID_MAX so that the build script won't try
-
# to read them from /etc/login.defs (fails in chroot).
-
# The values come from NixOS; they may not be appropriate
-
# for running SDDM outside NixOS, but that configuration is
-
# not supported anyway.
-
"-DUID_MIN=1000"
-
"-DUID_MAX=29999"
+
passthru = {
+
inherit unwrapped;
+
};
-
# we still want to run the DM on VT 7 for the time being, as 1-6 are
-
# occupied by getties by default
-
"-DSDDM_INITIAL_VT=7"
+
meta = unwrapped.meta;
+
} ''
+
mkdir -p $out/bin
-
"-DQT_IMPORTS_DIR=${placeholder "out"}/${qtbase.qtQmlPrefix}"
-
"-DCMAKE_INSTALL_SYSCONFDIR=${placeholder "out"}/etc"
-
"-DSYSTEMD_SYSTEM_UNIT_DIR=${placeholder "out"}/lib/systemd/system"
-
"-DSYSTEMD_SYSUSERS_DIR=${placeholder "out"}/lib/sysusers.d"
-
"-DSYSTEMD_TMPFILES_DIR=${placeholder "out"}/lib/tmpfiles.d"
-
"-DDBUS_CONFIG_DIR=${placeholder "out"}/share/dbus-1/system.d"
-
];
+
cd ${unwrapped}
-
postInstall = ''
-
# remove empty scripts
-
rm "$out/share/sddm/scripts/Xsetup" "$out/share/sddm/scripts/Xstop"
-
for f in $out/share/sddm/themes/**/theme.conf ; do
-
substituteInPlace $f \
-
--replace 'background=' "background=$(dirname $f)/"
-
done
-
'';
+
for i in *; do
+
if [ "$i" == "bin" ]; then
+
continue
+
fi
+
ln -s ${unwrapped}/$i $out/$i
+
done
-
meta = with lib; {
-
description = "QML based X11 display manager";
-
homepage = "https://github.com/sddm/sddm";
-
maintainers = with maintainers; [ abbradar ttuegel ];
-
platforms = platforms.linux;
-
license = licenses.gpl2Plus;
-
};
-
}
+
for i in bin/*; do
+
makeQtWrapper ${unwrapped}/$i $out/$i --set SDDM_GREETER $out/bin/sddm-greeter
+
done
+
''
+32
pkgs/applications/display-managers/sddm/greeter-path.patch
···
+
diff --git a/src/daemon/Greeter.cpp b/src/daemon/Greeter.cpp
+
index c0437ae..f814146 100644
+
--- a/src/daemon/Greeter.cpp
+
+++ b/src/daemon/Greeter.cpp
+
@@ -85,6 +85,9 @@ namespace SDDM {
+
if (m_started)
+
return false;
+
+
+ // Nixpkgs: use wrapped greeter if available
+
+ QString greeter = qEnvironmentVariable("SDDM_GREETER", QStringLiteral("%1/sddm-greeter").arg(QStringLiteral(BIN_INSTALL_DIR)));
+
+
+
// themes
+
QString xcursorTheme = mainConfig.Theme.CursorTheme.get();
+
if (m_themeConfig->contains(QLatin1String("cursorTheme")))
+
@@ -139,7 +142,7 @@ namespace SDDM {
+
m_process->setProcessEnvironment(env);
+
}
+
// Greeter command
+
- m_process->start(QStringLiteral("%1/sddm-greeter").arg(QStringLiteral(BIN_INSTALL_DIR)), args);
+
+ m_process->start(greeter, args);
+
+
//if we fail to start bail immediately, and don't block in waitForStarted
+
if (m_process->state() == QProcess::NotRunning) {
+
@@ -173,7 +176,7 @@ namespace SDDM {
+
+
// command
+
QStringList cmd;
+
- cmd << QStringLiteral("%1/sddm-greeter").arg(QStringLiteral(BIN_INSTALL_DIR))
+
+ cmd << greeter
+
<< args;
+
+
// greeter environment
+86
pkgs/applications/display-managers/sddm/unwrapped.nix
···
+
{ stdenv, lib, fetchFromGitHub
+
, cmake, pkg-config, qttools
+
, libxcb, libXau, pam, qtbase, qtdeclarative
+
, qtquickcontrols2 ? null, systemd, xkeyboardconfig
+
}:
+
let
+
isQt6 = lib.versions.major qtbase.version == "6";
+
in stdenv.mkDerivation {
+
pname = "sddm-unwrapped";
+
version = "0.20.0-unstable-2023-12-29";
+
+
src = fetchFromGitHub {
+
owner = "sddm";
+
repo = "sddm";
+
rev = "501129294be1487f753482c29949fc1c19ef340e";
+
hash = "sha256-mLm987Ah0X9s0tBK2a45iERwYoh5JzWb3TFlSoxi8CA=";
+
};
+
+
patches = [
+
./greeter-path.patch
+
./sddm-ignore-config-mtime.patch
+
./sddm-default-session.patch
+
];
+
+
postPatch = ''
+
substituteInPlace src/greeter/waylandkeyboardbackend.cpp \
+
--replace "/usr/share/X11/xkb/rules/evdev.xml" "${xkeyboardconfig}/share/X11/xkb/rules/evdev.xml"
+
'';
+
+
nativeBuildInputs = [ cmake pkg-config qttools ];
+
+
buildInputs = [
+
libxcb
+
libXau
+
pam
+
qtbase
+
qtdeclarative
+
qtquickcontrols2
+
systemd
+
];
+
+
# We will wrap manually later
+
dontWrapQtApps = true;
+
+
cmakeFlags = [
+
(lib.cmakeBool "BUILD_WITH_QT6" isQt6)
+
"-DCONFIG_FILE=/etc/sddm.conf"
+
"-DCONFIG_DIR=/etc/sddm.conf.d"
+
+
# Set UID_MIN and UID_MAX so that the build script won't try
+
# to read them from /etc/login.defs (fails in chroot).
+
# The values come from NixOS; they may not be appropriate
+
# for running SDDM outside NixOS, but that configuration is
+
# not supported anyway.
+
"-DUID_MIN=1000"
+
"-DUID_MAX=29999"
+
+
# we still want to run the DM on VT 7 for the time being, as 1-6 are
+
# occupied by getties by default
+
"-DSDDM_INITIAL_VT=7"
+
+
"-DQT_IMPORTS_DIR=${placeholder "out"}/${qtbase.qtQmlPrefix}"
+
"-DCMAKE_INSTALL_SYSCONFDIR=${placeholder "out"}/etc"
+
"-DSYSTEMD_SYSTEM_UNIT_DIR=${placeholder "out"}/lib/systemd/system"
+
"-DSYSTEMD_SYSUSERS_DIR=${placeholder "out"}/lib/sysusers.d"
+
"-DSYSTEMD_TMPFILES_DIR=${placeholder "out"}/lib/tmpfiles.d"
+
"-DDBUS_CONFIG_DIR=${placeholder "out"}/share/dbus-1/system.d"
+
];
+
+
postInstall = ''
+
# remove empty scripts
+
rm "$out/share/sddm/scripts/Xsetup" "$out/share/sddm/scripts/Xstop"
+
for f in $out/share/sddm/themes/**/theme.conf ; do
+
substituteInPlace $f \
+
--replace 'background=' "background=$(dirname $f)/"
+
done
+
'';
+
+
meta = with lib; {
+
description = "QML based X11 display manager";
+
homepage = "https://github.com/sddm/sddm";
+
maintainers = with maintainers; [ abbradar ttuegel k900 ];
+
platforms = platforms.linux;
+
license = licenses.gpl2Plus;
+
};
+
}