From 78a6d62b4894089fe58c1706cda7c2b801294728 Mon Sep 17 00:00:00 2001 From: Thomas Tuegel Date: Fri, 11 Dec 2015 06:58:04 -0600 Subject: [PATCH] sddm: wrap to include themes --- .../services/x11/display-managers/sddm.nix | 15 ++- .../display-managers/sddm/default.nix | 112 +++++++++++------- pkgs/top-level/all-packages.nix | 4 +- 3 files changed, 85 insertions(+), 46 deletions(-) diff --git a/nixos/modules/services/x11/display-managers/sddm.nix b/nixos/modules/services/x11/display-managers/sddm.nix index 5ca3a44324f..d156f692f26 100644 --- a/nixos/modules/services/x11/display-managers/sddm.nix +++ b/nixos/modules/services/x11/display-managers/sddm.nix @@ -9,6 +9,8 @@ let cfg = dmcfg.sddm; xEnv = config.systemd.services."display-manager".environment; + sddm = pkgs.sddm.override { inherit (cfg) themes; }; + xserverWrapper = pkgs.writeScript "xserver-wrapper" '' #!/bin/sh ${concatMapStrings (n: "export ${n}=\"${getAttr n xEnv}\"\n") (attrNames xEnv)} @@ -22,6 +24,8 @@ let [Theme] Current=${cfg.theme} + ThemeDir=${sddm}/share/sddm/themes + FacesDir=${sddm}/share/sddm/faces [Users] MaximumUid=${toString config.ids.uids.nixbld} @@ -86,6 +90,14 @@ in ''; }; + themes = mkOption { + type = types.listOf types.package; + default = []; + description = '' + Extra packages providing themes. + ''; + }; + autoLogin = mkOption { default = {}; description = '' @@ -146,8 +158,7 @@ in services.xserver.displayManager.job = { logsXsession = true; - #execCmd = "${pkgs.sddm}/bin/sddm"; - execCmd = "exec ${pkgs.sddm}/bin/sddm"; + execCmd = "exec ${sddm}/bin/sddm"; }; security.pam.services = { diff --git a/pkgs/applications/display-managers/sddm/default.nix b/pkgs/applications/display-managers/sddm/default.nix index dc891605d1b..8e517486925 100644 --- a/pkgs/applications/display-managers/sddm/default.nix +++ b/pkgs/applications/display-managers/sddm/default.nix @@ -1,54 +1,80 @@ -{ stdenv, fetchpatch, makeQtWrapper, fetchFromGitHub, cmake, pkgconfig, libxcb, libpthreadstubs -, libXdmcp, libXau, qtbase, qtdeclarative, qttools, pam, systemd }: +{ stdenv, makeQtWrapper, fetchFromGitHub +, cmake, pkgconfig, libxcb, libpthreadstubs, lndir +, libXdmcp, libXau, qtbase, qtdeclarative, qttools, pam, systemd +, themes +}: let version = "0.13.0"; + + unwrapped = stdenv.mkDerivation rec { + name = "sddm-unwrapped-${version}"; + + src = fetchFromGitHub { + owner = "sddm"; + repo = "sddm"; + rev = "v${version}"; + sha256 = "0c3q8lpb123m9k5x3i71mm8lmyzhknw77zxh89yfl8qmn6zd61i1"; + }; + + patches = [ + ./0001-ignore-config-mtime.patch + ./0002-fix-ConfigReader-QStringList-corruption.patch + ]; + + nativeBuildInputs = [ cmake pkgconfig qttools ]; + + buildInputs = [ + libxcb libpthreadstubs libXdmcp libXau qtbase qtdeclarative pam systemd + ]; + + cmakeFlags = [ + "-DCONFIG_FILE=/etc/sddm.conf" + # 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" + ]; + + preConfigure = '' + export cmakeFlags="$cmakeFlags -DQT_IMPORTS_DIR=$out/lib/qt5/qml -DCMAKE_INSTALL_SYSCONFDIR=$out/etc -DSYSTEMD_SYSTEM_UNIT_DIR=$out/lib/systemd/system" + ''; + + enableParallelBuilding = true; + + meta = with stdenv.lib; { + description = "QML based X11 display manager"; + homepage = https://github.com/sddm/sddm; + platforms = platforms.linux; + maintainers = with maintainers; [ abbradar ]; + }; + }; + in -stdenv.mkDerivation rec { + +stdenv.mkDerivation { name = "sddm-${version}"; + phases = "installPhase"; - src = fetchFromGitHub { - owner = "sddm"; - repo = "sddm"; - rev = "v${version}"; - sha256 = "0c3q8lpb123m9k5x3i71mm8lmyzhknw77zxh89yfl8qmn6zd61i1"; - }; + nativeBuildInputs = [ lndir makeQtWrapper ]; + buildInputs = [ unwrapped ] ++ themes; + inherit themes; + inherit unwrapped; - patches = [ - ./0001-ignore-config-mtime.patch - ./0002-fix-ConfigReader-QStringList-corruption.patch - ]; + installPhase = '' + makeQtWrapper "$unwrapped/bin/sddm" "$out/bin/sddm" - nativeBuildInputs = [ cmake makeQtWrapper pkgconfig qttools ]; - - buildInputs = [ libxcb libpthreadstubs libXdmcp libXau qtbase qtdeclarative pam systemd ]; - - cmakeFlags = [ - "-DCONFIG_FILE=/etc/sddm.conf" - # 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" - ]; - - preConfigure = '' - export cmakeFlags="$cmakeFlags -DQT_IMPORTS_DIR=$out/lib/qt5/qml -DCMAKE_INSTALL_SYSCONFDIR=$out/etc -DSYSTEMD_SYSTEM_UNIT_DIR=$out/lib/systemd/system" + mkdir -p "$out/share/sddm" + for pkg in $unwrapped $themes; do + local sddmDir="$pkg/share/sddm" + if [[ -d "$sddmDir" ]]; then + lndir -silent "$sddmDir" "$out/share/sddm" + fi + done ''; - postInstall = '' - wrapQtProgram $out/bin/sddm - wrapQtProgram $out/bin/sddm-greeter - ''; - - enableParallelBuilding = true; - - meta = with stdenv.lib; { - description = "QML based X11 display manager"; - homepage = https://github.com/sddm/sddm; - platforms = platforms.linux; - maintainers = with maintainers; [ abbradar ]; - }; + inherit (unwrapped) meta; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index a88ed84b3fc..71de31257e0 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -13115,7 +13115,9 @@ let printrun = callPackage ../applications/misc/printrun { }; - sddm = qt5Libs.callPackage ../applications/display-managers/sddm { }; + sddm = qt5Libs.callPackage ../applications/display-managers/sddm { + themes = []; # extra themes, etc. + }; slim = callPackage ../applications/display-managers/slim { libpng = libpng12;