Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / applications / window-managers / dwl / default.nix
blobe4578319ee07728e82fd52bae7407e36ea0592aa
1 { lib
2 , stdenv
3 , fetchFromGitHub
4 , installShellFiles
5 , libX11
6 , libinput
7 , libxcb
8 , libxkbcommon
9 , pixman
10 , pkg-config
11 , substituteAll
12 , wayland-scanner
13 , wayland
14 , wayland-protocols
15 , wlroots
16 , writeText
17 , xcbutilwm
18 , xwayland
19 , enableXWayland ? true
20 , conf ? null
23 stdenv.mkDerivation (finalAttrs: {
24   pname = "dwl";
25   version = "0.4";
27   src = fetchFromGitHub {
28     owner = "djpohly";
29     repo = "dwl";
30     rev = "v${finalAttrs.version}";
31     hash = "sha256-OW7K7yMYSzqZWpQ9Vmpy8EgdWvyv3q1uh8A40f6AQF4=";
32   };
34   nativeBuildInputs = [
35     installShellFiles
36     pkg-config
37     wayland-scanner
38   ];
40   buildInputs = [
41     libinput
42     libxcb
43     libxkbcommon
44     pixman
45     wayland
46     wayland-protocols
47     wlroots
48   ] ++ lib.optionals enableXWayland [
49     libX11
50     xcbutilwm
51     xwayland
52   ];
54   outputs = [ "out" "man" ];
56   # Allow users to set an alternative config.def.h
57   postPatch = let
58     configFile = if lib.isDerivation conf || builtins.isPath conf
59                  then conf
60                  else writeText "config.def.h" conf;
61   in lib.optionalString (conf != null) "cp ${configFile} config.def.h";
63   makeFlags = [
64     "PKG_CONFIG=${stdenv.cc.targetPrefix}pkg-config"
65     "WAYLAND_SCANNER=wayland-scanner"
66     "PREFIX=$(out)"
67     "MANDIR=$(man)/share/man"
68   ];
70   preBuild = ''
71     makeFlagsArray+=(
72       XWAYLAND=${lib.optionalString enableXWayland "-DXWAYLAND"}
73       XLIBS=${lib.optionalString enableXWayland "xcb\\ xcb-icccm"}
74     )
75   '';
77   meta = {
78     homepage = "https://github.com/djpohly/dwl/";
79     description = "Dynamic window manager for Wayland";
80     longDescription = ''
81       dwl is a compact, hackable compositor for Wayland based on wlroots. It is
82       intended to fill the same space in the Wayland world that dwm does in X11,
83       primarily in terms of philosophy, and secondarily in terms of
84       functionality. Like dwm, dwl is:
86       - Easy to understand, hack on, and extend with patches
87       - One C source file (or a very small number) configurable via config.h
88       - Limited to 2000 SLOC to promote hackability
89       - Tied to as few external dependencies as possible
90     '';
91     changelog = "https://github.com/djpohly/dwl/releases/tag/v${finalAttrs.version}";
92     license = lib.licenses.gpl3Only;
93     maintainers = [ lib.maintainers.AndersonTorres ];
94     inherit (wayland.meta) platforms;
95   };
97 # TODO: custom patches from upstream website