1{
2 lib,
3 buildPythonPackage,
4 fetchFromGitHub,
5 cairocffi,
6 dbus-next,
7 dbus-python,
8 glib,
9 iwlib,
10 libdrm,
11 libinput,
12 libxkbcommon,
13 mpd2,
14 pango,
15 pixman,
16 pkg-config,
17 psutil,
18 pulsectl-asyncio,
19 pygobject3,
20 python-dateutil,
21 pywayland,
22 pywlroots,
23 pyxdg,
24 setuptools,
25 setuptools-scm,
26 wayland,
27 wlroots,
28 xcbutilcursor,
29 xcbutilwm,
30 xcffib,
31 xkbcommon,
32 nixosTests,
33}:
34
35buildPythonPackage rec {
36 pname = "qtile";
37 version = "0.25.0";
38 pyproject = true;
39
40 src = fetchFromGitHub {
41 owner = "qtile";
42 repo = "qtile";
43 rev = "refs/tags/v${version}";
44 hash = "sha256-j5hpXfUSDUT9nBr6CafIzqdTYQxSWok+ZlQA7bGdVvk=";
45 };
46
47 patches = [
48 ./fix-restart.patch # https://github.com/NixOS/nixpkgs/issues/139568
49 ];
50
51 postPatch = ''
52 substituteInPlace libqtile/pangocffi.py \
53 --replace libgobject-2.0.so.0 ${glib.out}/lib/libgobject-2.0.so.0 \
54 --replace libpangocairo-1.0.so.0 ${pango.out}/lib/libpangocairo-1.0.so.0 \
55 --replace libpango-1.0.so.0 ${pango.out}/lib/libpango-1.0.so.0
56 substituteInPlace libqtile/backend/x11/xcursors.py \
57 --replace libxcb-cursor.so.0 ${xcbutilcursor.out}/lib/libxcb-cursor.so.0
58 substituteInPlace libqtile/backend/wayland/cffi/build.py \
59 --replace /usr/include/pixman-1 ${lib.getDev pixman}/include \
60 --replace /usr/include/libdrm ${lib.getDev libdrm}/include/libdrm
61 '';
62
63 build-system = [
64 setuptools
65 setuptools-scm
66 pkg-config
67 ];
68
69 dependencies = [
70 (cairocffi.override { withXcffib = true; })
71 dbus-next
72 dbus-python
73 iwlib
74 mpd2
75 psutil
76 pulsectl-asyncio
77 pygobject3
78 python-dateutil
79 pywayland
80 pywlroots
81 pyxdg
82 xcffib
83 xkbcommon
84 ];
85
86 buildInputs = [
87 libinput
88 libxkbcommon
89 wayland
90 wlroots
91 xcbutilwm
92 ];
93
94 doCheck = false;
95 passthru = {
96 tests.qtile = nixosTests.qtile;
97 providedSessions = [ "qtile" ];
98 };
99
100 meta = with lib; {
101 homepage = "http://www.qtile.org/";
102 license = licenses.mit;
103 description = "A small, flexible, scriptable tiling window manager written in Python";
104 mainProgram = "qtile";
105 platforms = platforms.linux;
106 maintainers = with maintainers; [
107 arjan-s
108 sigmanificient
109 ];
110 };
111}