nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 stdenv,
3 alsa-lib,
4 autoPatchelfHook,
5 dpkg,
6 evince,
7 fetchurl,
8 flac,
9 lib,
10 libmicrohttpd,
11 libogg,
12 libusb-compat-0_1,
13 llvmPackages,
14 mpfr,
15 wavpack,
16 kdePackages,
17}:
18
19let
20 version = "5.16.2-43";
21 srcs = {
22 aarch64-linux = fetchurl {
23 url = "https://signalyst.com/bins/trixie/hqplayer5desktop_${version}_arm64.deb";
24 hash = "sha256-dmnDbFf1obuBvKSMIGFiI7fXi/5YRP23625Y+UEj+Wo=";
25 };
26 x86_64-linux = fetchurl {
27 url = "https://signalyst.com/bins/noble/hqplayer5desktop_${version}_amd64.deb";
28 hash = "sha256-WUqfMUQSVb+MSc0GyhuEMM9H6fJP/NcmpFAX46BCiPI=";
29 };
30 };
31in
32stdenv.mkDerivation {
33 pname = "hqplayer-desktop";
34 inherit version;
35
36 src =
37 srcs.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
38
39 nativeBuildInputs = [
40 autoPatchelfHook
41 dpkg
42 kdePackages.wrapQtAppsHook
43 ];
44
45 buildInputs = [
46 alsa-lib
47 flac
48 stdenv.cc.cc.lib
49 libmicrohttpd
50 libogg
51 libusb-compat-0_1
52 llvmPackages.openmp
53 mpfr
54 kdePackages.qtcharts
55 kdePackages.qtdeclarative
56 kdePackages.qtwayland
57 kdePackages.qtwebengine
58 kdePackages.qtwebview
59 wavpack
60 ];
61
62 dontPatch = true;
63 dontConfigure = true;
64 dontBuild = true;
65
66 installPhase = ''
67 runHook preInstall
68
69 # main executable
70 mkdir -p "$out"/bin
71 mv ./usr/bin/* "$out"/bin
72
73 # documentation
74 mkdir -p "$doc/share/doc/hqplayer-desktop" "$doc/share/applications"
75 mv ./usr/share/doc/hqplayer5desktop/* "$doc/share/doc/hqplayer-desktop"
76 mv ./usr/share/applications/hqplayer5desktop-manual.desktop "$doc/share/applications"
77
78 # desktop files
79 mkdir -p "$out/share/applications"
80 mv ./usr/share/applications/* "$out/share/applications"
81
82 # pixmaps
83 mkdir -p "$out/share/pixmaps"
84 mv ./usr/share/pixmaps/* "$out/share/pixmaps"
85
86 runHook postInstall
87 '';
88
89 # doc has dependencies on evince that is not required by main app
90 outputs = [
91 "out"
92 "doc"
93 ];
94
95 postInstall = ''
96 for desktopFile in $out/share/applications/hqplayer5{client,desktop}.desktop; do
97 substituteInPlace "$desktopFile" \
98 --replace /usr/bin "$out"/bin
99 done
100 substituteInPlace "$doc/share/applications/hqplayer5desktop-manual.desktop" \
101 --replace /usr/share/doc/hqplayer5desktop "$doc/share/doc/hqplayer-desktop" \
102 --replace evince "${evince}/bin/evince"
103 '';
104
105 postFixup = ''
106 patchelf --replace-needed libomp.so.5 libomp.so $out/bin/.hqplayer5*-wrapped
107 '';
108
109 meta = {
110 homepage = "https://www.signalyst.com";
111 description = "High-end upsampling multichannel software HD-audio player";
112 license = lib.licenses.unfree;
113 sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
114 platforms = builtins.attrNames srcs;
115 maintainers = with lib.maintainers; [ lovesegfault ];
116 };
117}