1{ config, lib, stdenv, fetchFromGitHub, pkg-config, cmake
2
3# dependencies
4, glib, libXinerama, catch2
5
6# optional features without extra dependencies
7, mpdSupport ? true
8, ibmSupport ? true # IBM/Lenovo notebooks
9
10# optional features with extra dependencies
11
12# ouch, this is ugly, but this gives the man page
13, docsSupport ? true, docbook2x, libxslt ? null
14 , man ? null, less ? null
15 , docbook_xsl ? null , docbook_xml_dtd_44 ? null
16
17, ncursesSupport ? true , ncurses ? null
18, x11Support ? true , freetype, xorg
19, waylandSupport ? true , pango, wayland, wayland-protocols, wayland-scanner
20, xdamageSupport ? x11Support, libXdamage ? null
21, doubleBufferSupport ? x11Support
22, imlib2Support ? x11Support, imlib2 ? null
23
24, luaSupport ? true , lua ? null
25, luaImlib2Support ? luaSupport && imlib2Support
26, luaCairoSupport ? luaSupport && (x11Support || waylandSupport), cairo ? null
27, toluapp ? null
28
29, wirelessSupport ? true , wirelesstools ? null
30, nvidiaSupport ? false , libXNVCtrl ? null
31, pulseSupport ? config.pulseaudio or false, libpulseaudio ? null
32
33, curlSupport ? true , curl ? null
34, rssSupport ? curlSupport
35, weatherMetarSupport ? curlSupport
36, weatherXoapSupport ? curlSupport
37, journalSupport ? true, systemd ? null
38, libxml2 ? null
39}:
40
41assert docsSupport -> docbook2x != null && libxslt != null
42 && man != null && less != null
43 && docbook_xsl != null && docbook_xml_dtd_44 != null;
44
45assert ncursesSupport -> ncurses != null;
46
47assert xdamageSupport -> x11Support && libXdamage != null;
48assert imlib2Support -> x11Support && imlib2 != null;
49assert luaSupport -> lua != null;
50assert luaImlib2Support -> luaSupport && imlib2Support
51 && toluapp != null;
52assert luaCairoSupport -> luaSupport && toluapp != null
53 && cairo != null;
54assert luaCairoSupport || luaImlib2Support
55 -> lua.luaversion == "5.4";
56
57assert wirelessSupport -> wirelesstools != null;
58assert nvidiaSupport -> libXNVCtrl != null;
59assert pulseSupport -> libpulseaudio != null;
60
61assert curlSupport -> curl != null;
62assert rssSupport -> curlSupport && libxml2 != null;
63assert weatherMetarSupport -> curlSupport;
64assert weatherXoapSupport -> curlSupport && libxml2 != null;
65assert journalSupport -> systemd != null;
66
67with lib;
68
69stdenv.mkDerivation rec {
70 pname = "conky";
71 version = "1.19.6";
72
73 src = fetchFromGitHub {
74 owner = "brndnmtthws";
75 repo = "conky";
76 rev = "v${version}";
77 hash = "sha256-L8YSbdk+qQl17L4IRajFD/AEWRXb2w7xH9sM9qPGrQo=";
78 };
79
80 postPatch = optionalString docsSupport ''
81 substituteInPlace cmake/Conky.cmake --replace "# set(RELEASE true)" "set(RELEASE true)"
82
83 cp ${catch2}/include/catch2/catch.hpp tests/catch2/catch.hpp
84 '' + optionalString waylandSupport ''
85 substituteInPlace src/CMakeLists.txt \
86 --replace 'COMMAND ''${Wayland_SCANNER}' 'COMMAND wayland-scanner'
87 '';
88
89 env = {
90 # For some reason -Werror is on by default, causing the project to fail compilation.
91 NIX_CFLAGS_COMPILE = "-Wno-error";
92 NIX_LDFLAGS = "-lgcc_s";
93 };
94
95 nativeBuildInputs = [ cmake pkg-config ]
96 ++ optionals docsSupport [ docbook2x docbook_xsl docbook_xml_dtd_44 libxslt man less ]
97 ++ optional waylandSupport wayland-scanner
98 ++ optional luaImlib2Support toluapp
99 ++ optional luaCairoSupport toluapp
100 ;
101 buildInputs = [ glib libXinerama ]
102 ++ optional ncursesSupport ncurses
103 ++ optionals x11Support [ freetype xorg.libICE xorg.libX11 xorg.libXext xorg.libXft xorg.libSM ]
104 ++ optionals waylandSupport [ pango wayland wayland-protocols ]
105 ++ optional xdamageSupport libXdamage
106 ++ optional imlib2Support imlib2
107 ++ optional luaSupport lua
108 ++ optional luaImlib2Support imlib2
109 ++ optional luaCairoSupport cairo
110 ++ optional wirelessSupport wirelesstools
111 ++ optional curlSupport curl
112 ++ optional rssSupport libxml2
113 ++ optional weatherXoapSupport libxml2
114 ++ optional nvidiaSupport libXNVCtrl
115 ++ optional pulseSupport libpulseaudio
116 ++ optional journalSupport systemd
117 ;
118
119 cmakeFlags = []
120 ++ optional docsSupport "-DMAINTAINER_MODE=ON"
121 ++ optional curlSupport "-DBUILD_CURL=ON"
122 ++ optional (!ibmSupport) "-DBUILD_IBM=OFF"
123 ++ optional imlib2Support "-DBUILD_IMLIB2=ON"
124 ++ optional luaCairoSupport "-DBUILD_LUA_CAIRO=ON"
125 ++ optional luaImlib2Support "-DBUILD_LUA_IMLIB2=ON"
126 ++ optional (!mpdSupport) "-DBUILD_MPD=OFF"
127 ++ optional (!ncursesSupport) "-DBUILD_NCURSES=OFF"
128 ++ optional rssSupport "-DBUILD_RSS=ON"
129 ++ optional (!x11Support) "-DBUILD_X11=OFF"
130 ++ optional waylandSupport "-DBUILD_WAYLAND=ON"
131 ++ optional xdamageSupport "-DBUILD_XDAMAGE=ON"
132 ++ optional doubleBufferSupport "-DBUILD_XDBE=ON"
133 ++ optional weatherMetarSupport "-DBUILD_WEATHER_METAR=ON"
134 ++ optional weatherXoapSupport "-DBUILD_WEATHER_XOAP=ON"
135 ++ optional wirelessSupport "-DBUILD_WLAN=ON"
136 ++ optional nvidiaSupport "-DBUILD_NVIDIA=ON"
137 ++ optional pulseSupport "-DBUILD_PULSEAUDIO=ON"
138 ++ optional journalSupport "-DBUILD_JOURNAL=ON"
139 ;
140
141 # `make -f src/CMakeFiles/conky.dir/build.make src/CMakeFiles/conky.dir/conky.cc.o`:
142 # src/conky.cc:137:23: fatal error: defconfig.h: No such file or directory
143 enableParallelBuilding = false;
144
145 doCheck = true;
146
147 meta = with lib; {
148 homepage = "https://conky.cc";
149 changelog = "https://github.com/brndnmtthws/conky/releases/tag/v${version}";
150 description = "Advanced, highly configurable system monitor based on torsmo";
151 mainProgram = "conky";
152 maintainers = [ maintainers.guibert ];
153 license = licenses.gpl3Plus;
154 platforms = platforms.linux;
155 };
156}