about summary refs log tree commit diff
path: root/pkgs/applications/misc/polybar/default.nix
blob: c324a3f8be40c2913531f2b2f9e5d7c50ed2e709 (plain) (blame)
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
{ cairo, cmake, fetchFromGitHub, libXdmcp, libpthreadstubs, libxcb, pcre, pkgconfig
, python3, stdenv, xcbproto, xcbutil, xcbutilcursor, xcbutilimage
, xcbutilrenderutil, xcbutilwm, xcbutilxrm, makeWrapper
, removeReferencesTo

# optional packages-- override the variables ending in 'Support' to enable or
# disable modules
, alsaSupport   ? true,  alsaLib       ? null
, githubSupport ? false, curl          ? null
, mpdSupport    ? false, mpd_clientlib ? null
, pulseSupport  ? false, libpulseaudio ? null
, iwSupport     ? false, wirelesstools ? null
, nlSupport     ? true,  libnl         ? null
, i3Support ? false, i3GapsSupport ? false, i3 ? null, i3-gaps ? null, jsoncpp ? null
}:

assert alsaSupport   -> alsaLib       != null;
assert githubSupport -> curl          != null;
assert mpdSupport    -> mpd_clientlib != null;
assert pulseSupport  -> libpulseaudio != null;

assert iwSupport     -> ! nlSupport && wirelesstools != null;
assert nlSupport     -> ! iwSupport && libnl         != null;

assert i3Support     -> ! i3GapsSupport && jsoncpp != null && i3      != null;
assert i3GapsSupport -> ! i3Support     && jsoncpp != null && i3-gaps != null;

stdenv.mkDerivation rec {
    pname = "polybar";
    version = "3.4.3";

    src = fetchFromGitHub {
      owner = pname;
      repo = pname;
      rev = version;
      sha256 = "0fsfh3xv0c0hz10xqzvd01c0p0wvzcnanbyczi45zhaxfrisb39w";
      fetchSubmodules = true;
    };

    meta = with stdenv.lib; {
      homepage = "https://polybar.github.io/";
      description = "A fast and easy-to-use tool for creating status bars";
      longDescription = ''
        Polybar aims to help users build beautiful and highly customizable
        status bars for their desktop environment, without the need of
        having a black belt in shell scripting.
      '';
      license = licenses.mit;
      maintainers = with maintainers; [ afldcr filalex77 ];
      platforms = platforms.linux;
    };

    buildInputs = [
      cairo libXdmcp libpthreadstubs libxcb pcre python3 xcbproto xcbutil
      xcbutilcursor xcbutilimage xcbutilrenderutil xcbutilwm xcbutilxrm

      (if alsaSupport   then alsaLib       else null)
      (if githubSupport then curl          else null)
      (if mpdSupport    then mpd_clientlib else null)
      (if pulseSupport  then libpulseaudio else null)

      (if iwSupport     then wirelesstools else null)
      (if nlSupport     then libnl         else null)

      (if i3Support || i3GapsSupport then jsoncpp else null)
      (if i3Support then i3 else null)
      (if i3GapsSupport then i3-gaps else null)

      (if i3Support || i3GapsSupport then makeWrapper else null)
    ];

    postInstall = if (i3Support || i3GapsSupport) then ''
      wrapProgram $out/bin/polybar \
        --prefix PATH : "${if i3Support then i3 else i3-gaps}/bin"
    '' else "";

    nativeBuildInputs = [
      cmake pkgconfig removeReferencesTo
    ];

    postFixup = ''
        remove-references-to -t ${stdenv.cc} $out/bin/polybar
    '';
}