default.nix 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. {
  2. lib,
  3. stdenv,
  4. fetchFromGitHub,
  5. SDL2,
  6. alsa-lib,
  7. catch2_3,
  8. fftw,
  9. glib,
  10. gobject-introspection,
  11. gtk-layer-shell,
  12. gtkmm3,
  13. howard-hinnant-date,
  14. hyprland,
  15. iniparser,
  16. jsoncpp,
  17. libdbusmenu-gtk3,
  18. libevdev,
  19. libinotify-kqueue,
  20. libinput,
  21. libjack2,
  22. libmpdclient,
  23. libnl,
  24. libpulseaudio,
  25. libsigcxx,
  26. libxkbcommon,
  27. meson,
  28. ncurses,
  29. ninja,
  30. pipewire,
  31. pkg-config,
  32. playerctl,
  33. portaudio,
  34. python3,
  35. scdoc,
  36. sndio,
  37. spdlog,
  38. sway,
  39. udev,
  40. upower,
  41. wayland,
  42. wireplumber,
  43. wlroots,
  44. wrapGAppsHook,
  45. cavaSupport ? false,
  46. evdevSupport ? true,
  47. experimentalPatches ? true,
  48. hyprlandSupport ? true,
  49. inputSupport ? true,
  50. jackSupport ? true,
  51. mpdSupport ? false,
  52. mprisSupport ? stdenv.isLinux,
  53. nlSupport ? true,
  54. pulseSupport ? true,
  55. rfkillSupport ? true,
  56. runTests ? false,
  57. sndioSupport ? true,
  58. swaySupport ? false,
  59. traySupport ? true,
  60. udevSupport ? true,
  61. upowerSupport ? true,
  62. wireplumberSupport ? true,
  63. withMediaPlayer ? mprisSupport && false,
  64. sources,
  65. }:
  66. let
  67. # Derived from subprojects/cava.wrap
  68. libcava.src = fetchFromGitHub {
  69. owner = "LukashonakV";
  70. repo = "cava";
  71. rev = "0.9.1";
  72. hash = "sha256-FnRJJV0poRmw+y4nt1X7Z0ipX86LRK1TJhNKHFk0rTw=";
  73. };
  74. in
  75. stdenv.mkDerivation (finalAttrs: {
  76. inherit (sources.waybar) pname version src;
  77. postUnpack = lib.optional cavaSupport ''
  78. pushd "$sourceRoot"
  79. cp -R --no-preserve=mode,ownership ${libcava.src} subprojects/cava-0.9.1
  80. patchShebangs .
  81. popd
  82. '';
  83. nativeBuildInputs = [
  84. meson
  85. ninja
  86. pkg-config
  87. scdoc
  88. wrapGAppsHook
  89. ] ++ lib.optional withMediaPlayer gobject-introspection;
  90. propagatedBuildInputs = lib.optionals withMediaPlayer [
  91. glib
  92. playerctl
  93. python3.pkgs.pygobject3
  94. ];
  95. strictDeps = false;
  96. buildInputs =
  97. [
  98. gtk-layer-shell
  99. gtkmm3
  100. howard-hinnant-date
  101. jsoncpp
  102. libsigcxx
  103. libxkbcommon
  104. pipewire
  105. spdlog
  106. wayland
  107. wlroots
  108. ]
  109. ++ lib.optionals cavaSupport [
  110. SDL2
  111. alsa-lib
  112. fftw
  113. iniparser
  114. ncurses
  115. portaudio
  116. ]
  117. ++ lib.optional evdevSupport libevdev
  118. ++ lib.optional hyprlandSupport hyprland
  119. ++ lib.optional inputSupport libinput
  120. ++ lib.optional jackSupport libjack2
  121. ++ lib.optional mpdSupport libmpdclient
  122. ++ lib.optional mprisSupport playerctl
  123. ++ lib.optional nlSupport libnl
  124. ++ lib.optional pulseSupport libpulseaudio
  125. ++ lib.optional sndioSupport sndio
  126. ++ lib.optional swaySupport sway
  127. ++ lib.optional traySupport libdbusmenu-gtk3
  128. ++ lib.optional udevSupport udev
  129. ++ lib.optional upowerSupport upower
  130. ++ lib.optional wireplumberSupport wireplumber
  131. ++ lib.optional (!stdenv.isLinux) libinotify-kqueue;
  132. nativeCheckInputs = [ catch2_3 ];
  133. doCheck = runTests;
  134. mesonFlags =
  135. (lib.mapAttrsToList lib.mesonEnable {
  136. "cava" = cavaSupport;
  137. "dbusmenu-gtk" = traySupport;
  138. "jack" = jackSupport;
  139. "libinput" = inputSupport;
  140. "libnl" = nlSupport;
  141. "libudev" = udevSupport;
  142. "man-pages" = true;
  143. "mpd" = mpdSupport;
  144. "mpris" = mprisSupport;
  145. "pulseaudio" = pulseSupport;
  146. "rfkill" = rfkillSupport;
  147. "sndio" = sndioSupport;
  148. "systemd" = false;
  149. "tests" = runTests;
  150. "upower_glib" = upowerSupport;
  151. "wireplumber" = wireplumberSupport;
  152. })
  153. ++ lib.optional experimentalPatches (lib.mesonBool "experimental" true);
  154. preFixup = lib.optionalString withMediaPlayer ''
  155. cp $src/resources/custom_modules/mediaplayer.py $out/bin/waybar-mediaplayer.py
  156. wrapProgram $out/bin/waybar-mediaplayer.py \
  157. --prefix PYTHONPATH : "$PYTHONPATH:$out/${python3.sitePackages}"
  158. '';
  159. meta = {
  160. homepage = "https://github.com/alexays/waybar";
  161. description = "Highly customizable Wayland bar for Sway and Wlroots based compositors";
  162. changelog = "https://github.com/alexays/waybar/releases/tag/${finalAttrs.version}";
  163. license = lib.licenses.mit;
  164. mainProgram = "waybar";
  165. maintainers = with lib.maintainers; [ ludovicopiero ];
  166. inherit (wlroots.meta) platforms;
  167. };
  168. })