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
|
{ stdenv
, alsa-lib
, addOpenGLRunpath
, autoPatchelfHook
, cairo
, fetchurl
, flac
, gcc11
, gnome
, gssdp
, lame
, lib
, libgmpris
, llvmPackages_10
, mpg123
, rpmextract
, wavpack
, gupnp
, gupnp-av
, meson
, ninja
}:
let
# hqplayerd relies on some package versions available for the fc34 release,
# which has out-of-date pkgs compared to nixpkgs. The following drvs
# can/should be removed when the fc35 hqplayer rpm is made available.
gupnp_1_2 = gupnp.overrideAttrs (old: rec {
pname = "gupnp";
version = "1.2.7";
src = fetchurl {
url = "mirror://gnome/sources/gupnp/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "sha256-hEEnbxr9AXbm9ZUCajpQfu0YCav6BAJrrT8hYis1I+w=";
};
});
gupnp-av_0_12 = gupnp-av.overrideAttrs (old: rec {
pname = "gupnp-av";
version = "0.12.11";
src = fetchurl {
url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "sha256-aJ3PFJKriZHa6ikTZaMlSKd9GiKU2FszYitVzKnOb9w=";
};
nativeBuildInputs = lib.subtractLists [ meson ninja ] old.nativeBuildInputs;
});
in
stdenv.mkDerivation rec {
pname = "hqplayerd";
version = "4.29.1-80";
src = fetchurl {
url = "https://www.signalyst.eu/bins/${pname}/fc34/${pname}-${version}sse42.fc34.x86_64.rpm";
sha256 = "sha256-TL5zq7fu7tLoWadmVDMXrE8oiVhHbggpmwWrIGRuAnI=";
};
unpackPhase = ''
${rpmextract}/bin/rpmextract $src
'';
nativeBuildInputs = [ addOpenGLRunpath autoPatchelfHook rpmextract ];
buildInputs = [
alsa-lib
cairo
flac
gcc11.cc.lib
gnome.rygel
gssdp
gupnp_1_2
gupnp-av_0_12
lame
libgmpris
llvmPackages_10.openmp
mpg123
wavpack
];
dontConfigure = true;
dontBuild = true;
installPhase = ''
runHook preInstall
# main executable
mkdir -p $out/bin
cp ./usr/bin/hqplayerd $out/bin
# main configuration
mkdir -p $out/etc/hqplayer
cp ./etc/hqplayer/hqplayerd.xml $out/etc/hqplayer/
# udev rules
mkdir -p $out/etc/udev/rules.d
cp ./etc/udev/rules.d/50-taudio2.rules $out/etc/udev/rules.d/
# kernel module cfgs
mkdir -p $out/etc/modules-load.d
cp ./etc/modules-load.d/taudio2.conf $out/etc/modules-load.d/
# systemd service file
mkdir -p $out/lib/systemd/system
cp ./usr/lib/systemd/system/hqplayerd.service $out/lib/systemd/system/
# documentation
mkdir -p $out/share/doc/hqplayerd
cp ./usr/share/doc/hqplayerd/* $out/share/doc/hqplayerd/
# misc service support files
mkdir -p $out/var/lib/hqplayer
cp -r ./var/lib/hqplayer/web $out/var/lib/hqplayer
runHook postInstall
'';
postInstall = ''
substituteInPlace $out/lib/systemd/system/hqplayerd.service \
--replace /usr/bin/hqplayerd $out/bin/hqplayerd \
--replace "NetworkManager-wait-online.service" ""
'';
# NB: addOpenGLRunpath needs to run _after_ autoPatchelfHook, which runs in
# postFixup, so we tack it on here.
doInstallCheck = true;
installCheckPhase = ''
addOpenGLRunpath $out/bin/hqplayerd
$out/bin/hqplayerd --version
'';
meta = with lib; {
homepage = "https://www.signalyst.com/custom.html";
description = "High-end upsampling multichannel software embedded HD-audio player";
license = licenses.unfree;
maintainers = with maintainers; [ lovesegfault ];
};
}
|