nixpkgs/pkgs/applications/audio/soundux/default.nix
2022-11-19 08:42:07 +13:00

143 lines
3.3 KiB
Nix

{ lib
, stdenv
, fetchFromGitHub
, cmake
, pkg-config
, makeBinaryWrapper
, pipewire
, libpulseaudio
, libappindicator
, libstartup_notification
, openssl
, libwnck
, pcre
, util-linux
, libselinux
, libsepol
, libthai
, libdatrie
, xorg
, libxkbcommon
, libepoxy
, dbus
, at-spi2-core
, nlohmann_json
, fancypp
, httplib
, semver-cpp
, webkitgtk
, yt-dlp
, ffmpeg
, lsb-release
}:
stdenv.mkDerivation rec {
pname = "soundux";
version = "0.2.7";
src = fetchFromGitHub {
owner = "Soundux";
repo = "Soundux";
rev = version;
sha256 = "sha256-aSCsg6nJt6F+6O7UeXnvYva0vllTfsxK/cjaeOhObZY=";
fetchSubmodules = true;
};
nativeBuildInputs = [
cmake
pkg-config
makeBinaryWrapper
];
buildInputs = [
pipewire
libpulseaudio
libappindicator
openssl
libwnck
pcre
util-linux
libselinux
libsepol
libthai
libdatrie
xorg.libXdmcp
xorg.libXtst
xorg.libXres
libxkbcommon
libepoxy
dbus
at-spi2-core
nlohmann_json
fancypp
httplib
semver-cpp
libstartup_notification
webkitgtk
yt-dlp
ffmpeg
];
postPatch = ''
# cannot be overwritten with variables
substituteInPlace CMakeLists.txt \
--replace "set(CMAKE_INSTALL_PREFIX \"/opt/soundux\" CACHE PATH \"Install path prefix, prepended onto install directories.\" FORCE)" "" \
--replace "/usr/share" "$out/usr/share"
substituteInPlace src/ui/impl/webview/webview.cpp \
--replace "/usr/share/pixmaps/soundux.png" "$out/share/pixmaps/soundux.png"
'';
# We need to append /opt to our CMAKE_INSTALL_PREFIX
dontAddPrefix = true;
preConfigure = ''
# This needs to be set in preConfigure to access the $prefix variable
export cmakeFlags="-DCMAKE_INSTALL_PREFIX=$prefix/opt $cmakeFlags"
# Replace some fetched submodules with symlinks nix packages.
rm -rf \
lib/json \
lib/fancypp \
lib/lib-httplib \
lib/semver
ln -s ${nlohmann_json} lib/json
ln -s ${fancypp} lib/fancypp
ln -s ${httplib} lib/lib-httplib
ln -s ${semver-cpp} lib/semver
'';
# Somehow some of the install destination paths in the build system still
# gets transformed to point to /var/empty/share, even though they are at least
# relative to the nix output directory with our earlier patching.
postInstall = ''
mv "$out/var/empty/share" "$out"
rm -rf "$out/var"
mkdir "$out/bin"
ln -s "$out/opt/soundux" "$out/bin"
substituteInPlace "$out/share/applications/soundux.desktop" \
--replace "/opt/soundux/soundux" "soundux"
'';
postFixup = let
rpaths = lib.makeLibraryPath [libwnck pipewire libpulseaudio];
in ''
# Wnck, PipeWire, and PulseAudio are dlopen-ed by Soundux, so they do
# not end up on the RPATH during the build process.
patchelf --add-rpath "${rpaths}" "$out/opt/soundux-${version}"
# Work around upstream bug https://github.com/Soundux/Soundux/issues/435
wrapProgram "$out/bin/soundux" \
--set WEBKIT_DISABLE_COMPOSITING_MODE 1 \
--prefix PATH : ${lib.makeBinPath [ yt-dlp ffmpeg lsb-release ]} \
'';
meta = with lib; {
description = "A cross-platform soundboard.";
homepage = "https://soundux.rocks/";
license = licenses.gpl3Plus;
platforms = platforms.linux;
maintainers = with maintainers; [ aidalgol ];
};
}