nixpkgs/pkgs/applications/misc/waybar/default.nix
Patrick Steinhardt 6e3e40e68b waybar: fix build without cava support
With Waybar v0.10.0 a new "pipewire" module was added that will display
whether certain PipeWire features are certainly in use. Naturally, this
option requires libpipewire to be present. And by default it is getting
pulled in indeed via "cava" support flag. But when disabling that flag
then building Waybar will break due to the missing dependency.

Fix this by wiring up a new `pipewireSupport` flag. If either that flag
or the `cavaSupport` flag are set then we will pull in the "pipewire"
library.
2024-03-18 10:57:32 +01:00

197 lines
4.3 KiB
Nix

{ lib
, stdenv
, bash
, fetchFromGitHub
, SDL2
, alsa-lib
, catch2_3
, fftw
, glib
, gobject-introspection
, gtk-layer-shell
, gtkmm3
, howard-hinnant-date
, hyprland
, iniparser
, jsoncpp
, libdbusmenu-gtk3
, libevdev
, libinotify-kqueue
, libinput
, libjack2
, libmpdclient
, libnl
, libpulseaudio
, libsigcxx
, libxkbcommon
, meson
, ncurses
, ninja
, pipewire
, pkg-config
, playerctl
, portaudio
, python3
, scdoc
, sndio
, spdlog
, sway
, udev
, upower
, wayland
, wireplumber
, wrapGAppsHook
, cavaSupport ? true
, evdevSupport ? true
, experimentalPatches ? true
, hyprlandSupport ? true
, inputSupport ? true
, jackSupport ? true
, mpdSupport ? true
, mprisSupport ? stdenv.isLinux
, nlSupport ? true
, pipewireSupport ? true
, pulseSupport ? true
, rfkillSupport ? true
, runTests ? true
, sndioSupport ? true
, swaySupport ? true
, traySupport ? true
, udevSupport ? true
, upowerSupport ? true
, wireplumberSupport ? true
, withMediaPlayer ? mprisSupport && false
}:
let
# Derived from subprojects/cava.wrap
libcava.src = fetchFromGitHub {
owner = "LukashonakV";
repo = "cava";
rev = "0.10.1";
hash = "sha256-iIYKvpOWafPJB5XhDOSIW9Mb4I3A4pcgIIPQdQYEqUw=";
};
in
stdenv.mkDerivation (finalAttrs: {
pname = "waybar";
version = "0.10.0";
src = fetchFromGitHub {
owner = "Alexays";
repo = "Waybar";
rev = finalAttrs.version;
hash = "sha256-p1VRrKT2kTDy48gDXPMHlLbfcokAOFeTZXGzTeO1SAE=";
};
postUnpack = lib.optional cavaSupport ''
pushd "$sourceRoot"
cp -R --no-preserve=mode,ownership ${libcava.src} subprojects/cava-0.10.1
patchShebangs .
popd
'';
nativeBuildInputs = [
meson
ninja
pkg-config
scdoc
wrapGAppsHook
] ++ lib.optional withMediaPlayer gobject-introspection;
propagatedBuildInputs = lib.optionals withMediaPlayer [
glib
playerctl
python3.pkgs.pygobject3
];
strictDeps = false;
buildInputs = [
gtk-layer-shell
gtkmm3
howard-hinnant-date
jsoncpp
libsigcxx
libxkbcommon
spdlog
wayland
]
++ lib.optionals cavaSupport [
SDL2
alsa-lib
fftw
iniparser
ncurses
portaudio
]
++ lib.optional evdevSupport libevdev
++ lib.optional hyprlandSupport hyprland
++ lib.optional inputSupport libinput
++ lib.optional jackSupport libjack2
++ lib.optional mpdSupport libmpdclient
++ lib.optional mprisSupport playerctl
++ lib.optional nlSupport libnl
++ lib.optional pulseSupport libpulseaudio
++ lib.optional sndioSupport sndio
++ lib.optional swaySupport sway
++ lib.optional traySupport libdbusmenu-gtk3
++ lib.optional udevSupport udev
++ lib.optional upowerSupport upower
++ lib.optional wireplumberSupport wireplumber
++ lib.optional (cavaSupport || pipewireSupport) pipewire
++ lib.optional (!stdenv.isLinux) libinotify-kqueue;
nativeCheckInputs = [ catch2_3 ];
doCheck = runTests;
mesonFlags = (lib.mapAttrsToList lib.mesonEnable {
"cava" = cavaSupport;
"dbusmenu-gtk" = traySupport;
"jack" = jackSupport;
"libinput" = inputSupport;
"libnl" = nlSupport;
"libudev" = udevSupport;
"man-pages" = true;
"mpd" = mpdSupport;
"mpris" = mprisSupport;
"pipewire" = pipewireSupport;
"pulseaudio" = pulseSupport;
"rfkill" = rfkillSupport;
"sndio" = sndioSupport;
"systemd" = false;
"tests" = runTests;
"upower_glib" = upowerSupport;
"wireplumber" = wireplumberSupport;
}) ++ lib.optional experimentalPatches (lib.mesonBool "experimental" true);
postPatch = ''
substituteInPlace include/util/command.hpp \
--replace-fail /bin/sh ${lib.getExe' bash "sh"}
'';
preFixup = lib.optionalString withMediaPlayer ''
cp $src/resources/custom_modules/mediaplayer.py $out/bin/waybar-mediaplayer.py
wrapProgram $out/bin/waybar-mediaplayer.py \
--prefix PYTHONPATH : "$PYTHONPATH:$out/${python3.sitePackages}"
'';
meta = {
homepage = "https://github.com/alexays/waybar";
description = "Highly customizable Wayland bar for Sway and Wlroots based compositors";
changelog = "https://github.com/alexays/waybar/releases/tag/${finalAttrs.version}";
license = lib.licenses.mit;
mainProgram = "waybar";
maintainers = with lib.maintainers; [
FlorianFranzen
lovesegfault
minijackson
rodrgz
synthetica
khaneliman
];
platforms = lib.platforms.linux;
};
})