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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
{
lib,
buildPythonPackage,
fetchFromGitHub,
fetchpatch,
cairocffi,
dbus-fast,
aiohttp,
cairo,
cffi,
glib,
iwlib,
libcst,
libdrm,
libinput,
libxkbcommon,
mpd2,
pango,
pixman,
pkg-config,
psutil,
pulsectl-asyncio,
pygobject3,
pytz,
pyxdg,
setuptools,
setuptools-scm,
wayland,
wayland-protocols,
wayland-scanner,
wlroots,
xcbutilcursor,
xcbutilwm,
xcffib,
nixosTests,
extraPackages ? [ ],
}:
buildPythonPackage (finalAttrs: {
pname = "qtile";
version = "0.34.1";
# nixpkgs-update: no auto update
# should be updated alongside with `qtile-extras`
pyproject = true;
src = fetchFromGitHub {
owner = "qtile";
repo = "qtile";
tag = "v${finalAttrs.version}";
hash = "sha256-PPyI+IGvHBQusVmU3D26VjYjLaa9+94KUqNwbQSzeaI=";
};
patches = [
# The patch below makes upstream's build script search for wayland-scanner
# simply in $PATH, and not via `pkg-config`. This allows us to put
# wayland-scanner in nativeBuildInputs and keep using `strictDeps`. See:
#
# https://github.com/qtile/qtile/pull/5726
#
# Upstream has merged the PR directly - without creating a merge commit, so
# using a range is required.
(fetchpatch {
name = "qtile-PR5726-wayland-scanner-pkg-config.patch";
url = "https://github.com/qtile/qtile/compare/f0243abee5e6b94ef92b24e99d09037a4f40272b..553845bd17f38a6d1dee763a23c1b015df894794.patch";
hash = "sha256-hRArLC4nQMAbT//QhQeAUL1o7OCV0zvrlJztDavI0K0=";
})
];
build-system = [
setuptools
setuptools-scm
];
nativeBuildInputs = [
pkg-config
wayland-scanner
];
env = {
"QTILE_CAIRO_PATH" = "${lib.getDev cairo}/include/cairo";
"QTILE_PIXMAN_PATH" = "${lib.getDev pixman}/include/pixman-1";
"QTILE_LIBDRM_PATH" = "${lib.getDev libdrm}/include/libdrm";
"QTILE_WLROOTS_PATH" =
"${lib.getDev wlroots}/include/wlroots-${lib.versions.majorMinor wlroots.version}";
};
pypaBuildFlags = [
"--config-setting=backend=wayland"
"--config-setting=GOBJECT=${lib.getLib glib}/lib/libgobject-2.0.so"
"--config-setting=PANGO=${lib.getLib pango}/lib/libpango-1.0.so"
"--config-setting=PANGOCAIRO=${lib.getLib pango}/lib/libpangocairo-1.0.so"
"--config-setting=XCBCURSOR=${lib.getLib xcbutilcursor}/lib/libxcb-cursor.so"
];
dependencies = extraPackages ++ [
(cairocffi.override { withXcffib = true; })
dbus-fast
iwlib
libcst
mpd2
psutil
pulsectl-asyncio
pygobject3
pytz
pyxdg
xcffib
];
buildInputs = [
cairo
libinput
libxkbcommon
wayland
wlroots
xcbutilwm
];
propagatedBuildInputs = [
wayland-protocols
cffi
xcffib
aiohttp
];
doCheck = false;
passthru = {
tests.qtile = nixosTests.qtile;
providedSessions = [ "qtile" ];
};
postInstall = ''
install resources/qtile.desktop -Dt $out/share/xsessions
install resources/qtile-wayland.desktop -Dt $out/share/wayland-sessions
'';
meta = {
homepage = "http://www.qtile.org/";
license = lib.licenses.mit;
description = "Small, flexible, scriptable tiling window manager written in Python";
mainProgram = "qtile";
platforms = lib.platforms.linux;
maintainers = with lib.maintainers; [
arjan-s
sigmanificient
doronbehar
];
};
})
|