summary refs log tree commit diff
path: root/pkgs/applications/display-managers/sddm/default.nix
blob: b7bf5ee56640f8b4907e3d2be67f08b0975b379a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
{ 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;

    postInstall = ''
      # remove empty scripts
      rm "$out/share/sddm/scripts/Xsetup" "$out/share/sddm/scripts/Xstop"
    '';

    meta = with stdenv.lib; {
      description = "QML based X11 display manager";
      homepage = https://github.com/sddm/sddm;
      platforms = platforms.linux;
      maintainers = with maintainers; [ abbradar ttuegel ];
    };
  };

in

stdenv.mkDerivation {
  name = "sddm-${version}";
  phases = "installPhase";

  nativeBuildInputs = [ lndir makeQtWrapper ];
  buildInputs = [ unwrapped ] ++ themes;
  inherit themes;
  inherit unwrapped;

  installPhase = ''
    makeQtWrapper "$unwrapped/bin/sddm" "$out/bin/sddm"

    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
  '';

  inherit (unwrapped) meta;
}