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, xdamageSupport ? x11Support, libXdamage ? null
20, doubleBufferSupport ? x11Support
21, imlib2Support ? x11Support, imlib2 ? null
22
23, luaSupport ? true , lua ? null
24, luaImlib2Support ? luaSupport && imlib2Support
25, luaCairoSupport ? luaSupport && x11Support, cairo ? null
26, toluapp ? null
27
28, wirelessSupport ? true , wirelesstools ? null
29, nvidiaSupport ? false , libXNVCtrl ? null
30, pulseSupport ? config.pulseaudio or false, libpulseaudio ? null
31
32, curlSupport ? true , curl ? null
33, rssSupport ? curlSupport
34, weatherMetarSupport ? curlSupport
35, weatherXoapSupport ? curlSupport
36, journalSupport ? true, systemd ? null
37, libxml2 ? null
38}:
39
40assert docsSupport -> docbook2x != null && libxslt != null
41 && man != null && less != null
42 && docbook_xsl != null && docbook_xml_dtd_44 != null;
43
44assert ncursesSupport -> ncurses != null;
45
46assert xdamageSupport -> x11Support && libXdamage != null;
47assert imlib2Support -> x11Support && imlib2 != null;
48assert luaSupport -> lua != null;
49assert luaImlib2Support -> luaSupport && imlib2Support
50 && toluapp != null;
51assert luaCairoSupport -> luaSupport && toluapp != null
52 && cairo != null;
53assert luaCairoSupport || luaImlib2Support
54 -> lua.luaversion == "5.3";
55
56assert wirelessSupport -> wirelesstools != null;
57assert nvidiaSupport -> libXNVCtrl != null;
58assert pulseSupport -> libpulseaudio != null;
59
60assert curlSupport -> curl != null;
61assert rssSupport -> curlSupport && libxml2 != null;
62assert weatherMetarSupport -> curlSupport;
63assert weatherXoapSupport -> curlSupport && libxml2 != null;
64assert journalSupport -> systemd != null;
65
66with lib;
67
68stdenv.mkDerivation rec {
69 pname = "conky";
70 version = "1.13.1";
71
72 src = fetchFromGitHub {
73 owner = "brndnmtthws";
74 repo = "conky";
75 rev = "v${version}";
76 sha256 = "sha256-3eCRzjfHGFiKuxmRHvnzqAg/+ApUKnHhsumWnio/Qxg=";
77 };
78
79 postPatch = ''
80 sed -i -e '/include.*CheckIncludeFile)/i include(CheckIncludeFiles)' \
81 cmake/ConkyPlatformChecks.cmake
82 '' + optionalString docsSupport ''
83 # Drop examples, since they contain non-ASCII characters that break docbook2x :(
84 sed -i 's/ Example: .*$//' doc/config_settings.xml
85
86 substituteInPlace cmake/Conky.cmake --replace "# set(RELEASE true)" "set(RELEASE true)"
87
88 cp ${catch2}/include/catch2/catch.hpp tests/catch2/catch.hpp
89 '';
90
91 NIX_LDFLAGS = "-lgcc_s";
92
93 nativeBuildInputs = [ cmake pkg-config ];
94 buildInputs = [ glib libXinerama ]
95 ++ optionals docsSupport [ docbook2x docbook_xsl docbook_xml_dtd_44 libxslt man less ]
96 ++ optional ncursesSupport ncurses
97 ++ optionals x11Support [ freetype xorg.libICE xorg.libX11 xorg.libXext xorg.libXft xorg.libSM ]
98 ++ optional xdamageSupport libXdamage
99 ++ optional imlib2Support imlib2
100 ++ optional luaSupport lua
101 ++ optionals luaImlib2Support [ toluapp imlib2 ]
102 ++ optionals luaCairoSupport [ toluapp cairo ]
103 ++ optional wirelessSupport wirelesstools
104 ++ optional curlSupport curl
105 ++ optional rssSupport libxml2
106 ++ optional weatherXoapSupport libxml2
107 ++ optional nvidiaSupport libXNVCtrl
108 ++ optional pulseSupport libpulseaudio
109 ++ optional journalSupport systemd
110 ;
111
112 cmakeFlags = []
113 ++ optional docsSupport "-DMAINTAINER_MODE=ON"
114 ++ optional curlSupport "-DBUILD_CURL=ON"
115 ++ optional (!ibmSupport) "-DBUILD_IBM=OFF"
116 ++ optional imlib2Support "-DBUILD_IMLIB2=ON"
117 ++ optional luaCairoSupport "-DBUILD_LUA_CAIRO=ON"
118 ++ optional luaImlib2Support "-DBUILD_LUA_IMLIB2=ON"
119 ++ optional (!mpdSupport) "-DBUILD_MPD=OFF"
120 ++ optional (!ncursesSupport) "-DBUILD_NCURSES=OFF"
121 ++ optional rssSupport "-DBUILD_RSS=ON"
122 ++ optional (!x11Support) "-DBUILD_X11=OFF"
123 ++ optional xdamageSupport "-DBUILD_XDAMAGE=ON"
124 ++ optional doubleBufferSupport "-DBUILD_XDBE=ON"
125 ++ optional weatherMetarSupport "-DBUILD_WEATHER_METAR=ON"
126 ++ optional weatherXoapSupport "-DBUILD_WEATHER_XOAP=ON"
127 ++ optional wirelessSupport "-DBUILD_WLAN=ON"
128 ++ optional nvidiaSupport "-DBUILD_NVIDIA=ON"
129 ++ optional pulseSupport "-DBUILD_PULSEAUDIO=ON"
130 ++ optional journalSupport "-DBUILD_JOURNAL=ON"
131 ;
132
133 # `make -f src/CMakeFiles/conky.dir/build.make src/CMakeFiles/conky.dir/conky.cc.o`:
134 # src/conky.cc:137:23: fatal error: defconfig.h: No such file or directory
135 enableParallelBuilding = false;
136
137 doCheck = true;
138
139 meta = with lib; {
140 homepage = "http://conky.sourceforge.net/";
141 description = "Advanced, highly configurable system monitor based on torsmo";
142 maintainers = [ maintainers.guibert ];
143 license = licenses.gpl3Plus;
144 platforms = platforms.linux;
145 };
146}