1{ lib, stdenv, fetchurl, pkg-config, meson, ninja
2, libevdev, mtdev, udev, libwacom
3, documentationSupport ? false, doxygen, graphviz # Documentation
4, eventGUISupport ? false, cairo, glib, gtk3 # GUI event viewer support
5, testsSupport ? false, check, valgrind, python3
6, nixosTests
7}:
8
9let
10 mkFlag = optSet: flag: "-D${flag}=${lib.boolToString optSet}";
11
12 sphinx-build = if documentationSupport then
13 python3.pkgs.sphinx.overrideAttrs (super: {
14 propagatedBuildInputs = super.propagatedBuildInputs ++ (with python3.pkgs; [ recommonmark sphinx_rtd_theme ]);
15
16 postFixup = super.postFixup or "" + ''
17 # Do not propagate Python
18 rm $out/nix-support/propagated-build-inputs
19 '';
20 })
21 else null;
22in
23
24stdenv.mkDerivation rec {
25 pname = "libinput";
26 version = "1.19.1";
27
28 src = fetchurl {
29 url = "https://www.freedesktop.org/software/libinput/libinput-${version}.tar.xz";
30 sha256 = "sha256-C9z1sXg7c3hUt68coi32e8Nqb+fJz6cfAekUn5IgRG0=";
31 };
32
33 outputs = [ "bin" "out" "dev" ];
34
35 mesonFlags = [
36 (mkFlag documentationSupport "documentation")
37 (mkFlag eventGUISupport "debug-gui")
38 (mkFlag testsSupport "tests")
39 "--sysconfdir=/etc"
40 "--libexecdir=${placeholder "bin"}/libexec"
41 ];
42
43 nativeBuildInputs = [ pkg-config meson ninja ]
44 ++ lib.optionals documentationSupport [ doxygen graphviz sphinx-build ];
45
46 buildInputs = [
47 libevdev
48 mtdev
49 libwacom
50 (python3.withPackages (pp: with pp; [
51 pp.libevdev # already in scope
52 pyudev
53 pyyaml
54 setuptools
55 ]))
56 ] ++ lib.optionals eventGUISupport [ cairo glib gtk3 ];
57
58 checkInputs = [
59 check
60 valgrind
61 ];
62
63 propagatedBuildInputs = [ udev ];
64
65 patches = [ ./udev-absolute-path.patch ];
66
67 postPatch = ''
68 patchShebangs \
69 tools/helper-copy-and-exec-from-tmp.sh \
70 test/symbols-leak-test \
71 test/check-leftover-udev-rules.sh \
72 test/helper-copy-and-exec-from-tmp.sh
73
74 # Don't create an empty /etc directory.
75 sed -i "/install_subdir('libinput', install_dir : dir_etc)/d" meson.build
76 '';
77
78 doCheck = testsSupport && stdenv.hostPlatform == stdenv.buildPlatform;
79
80 passthru.tests = {
81 libinput-module = nixosTests.libinput;
82 };
83
84 meta = with lib; {
85 description = "Handles input devices in Wayland compositors and provides a generic X.Org input driver";
86 homepage = "https://www.freedesktop.org/wiki/Software/libinput/";
87 license = licenses.mit;
88 platforms = platforms.unix;
89 maintainers = with maintainers; [ codyopel ];
90 };
91}