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
|
{
lib,
stdenv,
fetchurl,
autoPatchelfHook,
dpkg,
makeBinaryWrapper,
makeWrapper,
undmg,
wrapGAppsHook3,
glib-networking,
gtk3,
libappindicator,
libnotify,
libsoup_3,
mpv-unwrapped,
xdg-user-dirs,
webkitgtk_4_1,
}:
let
pname = "spotube";
version = "3.8.1";
meta = {
description = "Open source, cross-platform Spotify client compatible across multiple platforms";
longDescription = ''
Spotube is an open source, cross-platform Spotify client compatible across
multiple platforms utilizing Spotify's data API and YouTube (or Piped.video or JioSaavn)
as an audio source, eliminating the need for Spotify Premium
'';
downloadPage = "https://github.com/KRTirtho/spotube/releases";
homepage = "https://spotube.krtirtho.dev/";
license = lib.licenses.bsdOriginal;
mainProgram = "spotube";
maintainers = with lib.maintainers; [ tomasajt ];
platforms = [
"x86_64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
fetchArtifact =
{ filename, hash }:
fetchurl {
url = "https://github.com/KRTirtho/spotube/releases/download/v${version}/${filename}";
inherit hash;
};
darwin = stdenv.mkDerivation {
inherit pname version meta;
src = fetchArtifact {
filename = "Spotube-macos-universal.dmg";
hash = "sha256-NbKFvg50n/GByVU6/vNLmTTV9bhIhl3AxlwAcG60KVY=";
};
sourceRoot = ".";
nativeBuildInputs = [
undmg
makeBinaryWrapper
];
installPhase = ''
runHook preInstall
mkdir -p $out/Applications $out/bin
cp -r spotube.app $out/Applications
makeBinaryWrapper $out/Applications/spotube.app/Contents/MacOS/spotube $out/bin/spotube
runHook postInstall
'';
};
linux = stdenv.mkDerivation {
inherit pname version meta;
src = fetchArtifact {
filename = "Spotube-linux-x86_64.deb";
hash = "sha256-R/yHXx29T/7NNc1L1AmevzXp1k98qnmvOEd3cfSlJuA=";
};
nativeBuildInputs = [
autoPatchelfHook
dpkg
makeWrapper
wrapGAppsHook3
];
buildInputs = [
glib-networking
gtk3
libappindicator
libnotify
libsoup_3
mpv-unwrapped
webkitgtk_4_1
];
dontWrapGApps = true;
installPhase = ''
runHook preInstall
mkdir -p $out
cp -r usr/* $out
runHook postInstall
'';
preFixup = ''
patchelf $out/share/spotube/lib/libmedia_kit_native_event_loop.so \
--replace-needed libmpv.so.1 libmpv.so
'';
postFixup = ''
makeWrapper $out/share/spotube/spotube $out/bin/spotube \
"''${gappsWrapperArgs[@]}" \
--prefix LD_LIBRARY_PATH : $out/share/spotube/lib:${lib.makeLibraryPath [ mpv-unwrapped ]} \
--prefix PATH : ${lib.makeBinPath [ xdg-user-dirs ]}
'';
};
in
if stdenv.hostPlatform.isDarwin then darwin else linux
|