e875678f8e
The purpose of this update (or downgrade?) is to switch the spotify source to one more reliable. The current source only contains the last few releases, while the new source retains all old releases.
151 lines
4.6 KiB
Nix
151 lines
4.6 KiB
Nix
{ fetchurl, stdenv, squashfsTools, xorg, alsaLib, makeWrapper, openssl, freetype
|
|
, glib, pango, cairo, atk, gdk_pixbuf, gtk2, cups, nspr, nss, libpng
|
|
, libgcrypt, systemd, fontconfig, dbus, expat, ffmpeg_0_10, curl, zlib, gnome3 }:
|
|
|
|
let
|
|
# "rev" decides what is actually being downloaded
|
|
version = "1.0.80.474.gef6b503e-7";
|
|
# To get the latest stable revision:
|
|
# curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/spotify?channel=stable' | jq '.download_url,.version,.last_updated'
|
|
# To get general information:
|
|
# curl -H 'Snap-Device-Series: 16' 'https://api.snapcraft.io/v2/snaps/info/spotify' | jq '.'
|
|
# More exapmles of api usage:
|
|
# https://github.com/canonical-websites/snapcraft.io/blob/master/webapp/publisher/snaps/views.py
|
|
rev = "16";
|
|
|
|
|
|
deps = [
|
|
alsaLib
|
|
atk
|
|
cairo
|
|
cups
|
|
curl
|
|
dbus
|
|
expat
|
|
ffmpeg_0_10
|
|
fontconfig
|
|
freetype
|
|
gdk_pixbuf
|
|
glib
|
|
gtk2
|
|
libgcrypt
|
|
libpng
|
|
nss
|
|
pango
|
|
stdenv.cc.cc
|
|
systemd
|
|
xorg.libX11
|
|
xorg.libXcomposite
|
|
xorg.libXcursor
|
|
xorg.libXdamage
|
|
xorg.libXext
|
|
xorg.libXfixes
|
|
xorg.libXi
|
|
xorg.libXrandr
|
|
xorg.libXrender
|
|
xorg.libXScrnSaver
|
|
xorg.libXtst
|
|
xorg.libxcb
|
|
zlib
|
|
];
|
|
|
|
in
|
|
|
|
stdenv.mkDerivation {
|
|
name = "spotify-${version}";
|
|
|
|
# fetch from snapcraft instead of the debian repository most repos fetch from.
|
|
# That is a bit more cumbersome. But the debian repository only keeps the last
|
|
# two versions, while snapcraft should provide versions indefinately:
|
|
# https://forum.snapcraft.io/t/how-can-a-developer-remove-her-his-app-from-snap-store/512
|
|
|
|
# This is the next-best thing, since we're not allowed to re-distribute
|
|
# spotify ourselves:
|
|
# https://community.spotify.com/t5/Desktop-Linux/Redistribute-Spotify-on-Linux-Distributions/td-p/1695334
|
|
src = fetchurl {
|
|
url = "https://api.snapcraft.io/api/v1/snaps/download/pOBIoZ2LrCB3rDohMxoYGnbN14EHOgD7_${rev}.snap";
|
|
sha512 = "45b7ab574b30fb368e0b6f4dd60addbfd1ddc02173b4f98b31c524eed49073432352a361e75959ce8e2f752231e93c79ca1b538c4bd295c935d1e2e0585d147f";
|
|
};
|
|
|
|
buildInputs = [ squashfsTools makeWrapper ];
|
|
|
|
doConfigure = false;
|
|
doBuild = false;
|
|
dontStrip = true;
|
|
dontPatchELF = true;
|
|
|
|
unpackPhase = ''
|
|
runHook preUnpack
|
|
unsquashfs "$src" '/usr/share/spotify' '/usr/bin/spotify' '/meta/snap.yaml'
|
|
cd squashfs-root
|
|
if ! grep -q 'grade: stable' meta/snap.yaml; then
|
|
# Unfortunately this check is not reliable: At the moment (2018-07-26) the
|
|
# latest version in the "edge" channel is also marked as stable.
|
|
echo "The snap package is marked as unstable:"
|
|
grep 'grade: ' meta/snap.yaml
|
|
echo "You probably chose the wrong revision."
|
|
exit 1
|
|
fi
|
|
if ! grep -q '${version}' meta/snap.yaml; then
|
|
echo "Package version differs from version found in snap metadata:"
|
|
grep 'version: ' meta/snap.yaml
|
|
echo "While the nix package specifies: ${version}."
|
|
echo "You probably chose the wrong revision or forgot to update the nix version."
|
|
exit 1
|
|
fi
|
|
runHook postUnpack
|
|
'';
|
|
|
|
installPhase =
|
|
''
|
|
runHook preInstall
|
|
|
|
libdir=$out/lib/spotify
|
|
mkdir -p $libdir
|
|
mv ./usr/* $out/
|
|
|
|
cp meta/snap.yaml $out
|
|
|
|
# Work around Spotify referring to a specific minor version of
|
|
# OpenSSL.
|
|
|
|
ln -s ${openssl.out}/lib/libssl.so $libdir/libssl.so.1.0.0
|
|
ln -s ${openssl.out}/lib/libcrypto.so $libdir/libcrypto.so.1.0.0
|
|
ln -s ${nspr.out}/lib/libnspr4.so $libdir/libnspr4.so
|
|
ln -s ${nspr.out}/lib/libplc4.so $libdir/libplc4.so
|
|
|
|
rpath="$out/share/spotify:$libdir"
|
|
|
|
patchelf \
|
|
--interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
|
|
--set-rpath $rpath $out/share/spotify/spotify
|
|
|
|
librarypath="${stdenv.lib.makeLibraryPath deps}:$libdir"
|
|
wrapProgram $out/share/spotify/spotify \
|
|
--prefix LD_LIBRARY_PATH : "$librarypath" \
|
|
--prefix PATH : "${gnome3.zenity}/bin"
|
|
|
|
# Desktop file
|
|
mkdir -p "$out/share/applications/"
|
|
cp "$out/share/spotify/spotify.desktop" "$out/share/applications/"
|
|
|
|
# Icons
|
|
for i in 16 22 24 32 48 64 128 256 512; do
|
|
ixi="$i"x"$i"
|
|
mkdir -p "$out/share/icons/hicolor/$ixi/apps"
|
|
ln -s "$out/share/spotify/icons/spotify-linux-$i.png" \
|
|
"$out/share/icons/hicolor/$ixi/apps/spotify-client.png"
|
|
done
|
|
|
|
runHook postInstall
|
|
'';
|
|
|
|
meta = with stdenv.lib; {
|
|
homepage = https://www.spotify.com/;
|
|
description = "Play music from the Spotify music service";
|
|
license = licenses.unfree;
|
|
maintainers = with maintainers; [ eelco ftrvxmtrx sheenobu mudri ];
|
|
platforms = [ "x86_64-linux" ];
|
|
};
|
|
}
|