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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
{ 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 ];
};
}
|