sddm: separate wrapping from building
This commit is contained in:
@@ -1,82 +1,34 @@
|
||||
{ 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=";
|
||||
buildInputs = unwrapped.buildInputs ++ extraPackages;
|
||||
nativeBuildInputs = [ wrapQtAppsHook ];
|
||||
|
||||
passthru = {
|
||||
inherit unwrapped;
|
||||
};
|
||||
|
||||
patches = [
|
||||
./sddm-ignore-config-mtime.patch
|
||||
./sddm-default-session.patch
|
||||
];
|
||||
meta = unwrapped.meta;
|
||||
} ''
|
||||
mkdir -p $out/bin
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace src/greeter/waylandkeyboardbackend.cpp \
|
||||
--replace "/usr/share/X11/xkb/rules/evdev.xml" "${xkeyboardconfig}/share/X11/xkb/rules/evdev.xml"
|
||||
'';
|
||||
cd ${unwrapped}
|
||||
|
||||
nativeBuildInputs = [ wrapQtAppsHook cmake pkg-config qttools ];
|
||||
for i in *; do
|
||||
if [ "$i" == "bin" ]; then
|
||||
continue
|
||||
fi
|
||||
ln -s ${unwrapped}/$i $out/$i
|
||||
done
|
||||
|
||||
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"
|
||||
|
||||
# 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 ];
|
||||
platforms = platforms.linux;
|
||||
license = licenses.gpl2Plus;
|
||||
};
|
||||
}
|
||||
for i in bin/*; do
|
||||
makeQtWrapper ${unwrapped}/$i $out/$i --set SDDM_GREETER $out/bin/sddm-greeter
|
||||
done
|
||||
''
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
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
|
||||
@@ -0,0 +1,86 @@
|
||||
{ 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;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user