diff options
author | Alyssa Ross <hi@alyssa.is> | 2019-01-07 02:18:36 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2019-01-07 02:18:47 +0000 |
commit | 36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2 (patch) | |
tree | b3faaf573407b32aa645237a4d16b82778a39a92 /nixpkgs/pkgs/applications/audio/spotify | |
parent | 4e31070265257dc67d120c27e0f75c2344fdfa9a (diff) | |
parent | abf060725d7614bd3b9f96764262dfbc2f9c2199 (diff) | |
download | nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.gz nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.bz2 nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.lz nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.xz nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.zst nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.zip |
Add 'nixpkgs/' from commit 'abf060725d7614bd3b9f96764262dfbc2f9c2199'
git-subtree-dir: nixpkgs git-subtree-mainline: 4e31070265257dc67d120c27e0f75c2344fdfa9a git-subtree-split: abf060725d7614bd3b9f96764262dfbc2f9c2199
Diffstat (limited to 'nixpkgs/pkgs/applications/audio/spotify')
-rw-r--r-- | nixpkgs/pkgs/applications/audio/spotify/default.nix | 154 | ||||
-rwxr-xr-x | nixpkgs/pkgs/applications/audio/spotify/update.sh | 96 |
2 files changed, 250 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/audio/spotify/default.nix b/nixpkgs/pkgs/applications/audio/spotify/default.nix new file mode 100644 index 000000000000..c5c3724df2ad --- /dev/null +++ b/nixpkgs/pkgs/applications/audio/spotify/default.nix @@ -0,0 +1,154 @@ +{ 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 + # TO UPDATE: just execute the ./update.sh script (won't do anything if there is no update) + # "rev" decides what is actually being downloaded + version = "1.0.94.262.g3d5c231c-9"; + # 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 examples of api usage: + # https://github.com/canonical-websites/snapcraft.io/blob/master/webapp/publisher/snaps/views.py + rev = "28"; + + + 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 = "ca8e2eb45ea7ef6396382298822969994aca86cca8ba122ec1521c593e621161267943fe5515bb8747037ecbbfbd05cffbbca017f8f4b1c9fbd216e1d6a9e8cb"; + }; + + 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" + + # fix Icon line in the desktop file (#48062) + sed -i "s:^Icon=.*:Icon=spotify-client:" "$out/share/spotify/spotify.desktop" + + # 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" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/audio/spotify/update.sh b/nixpkgs/pkgs/applications/audio/spotify/update.sh new file mode 100755 index 000000000000..0e19ca1920b4 --- /dev/null +++ b/nixpkgs/pkgs/applications/audio/spotify/update.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env nix-shell +#! nix-shell -i bash -p curl jq git gnused gnugrep + + +# executing this script without arguments will +# - find the newest stable spotify version avaiable on snapcraft (https://snapcraft.io/spotify) +# - read the current spotify version from the current nix expression +# - update the nix expression if the versions differ +# - try to build the updated version, exit if that fails +# - give instructions for upstreaming + +# Please test the update manually before pushing. There have been errors before +# and because the service is proprietary and a paid account is necessary to do +# anything with spotify automatic testing is not possible. + +# As an optional argument you can specify the snapcraft channel to update to. +# Default is `stable` and only stable updates should be pushed to nixpkgs. For +# testing you may specify `candidate` or `edge`. + + +channel="${1:-stable}" # stable/candidate/edge +nixpkgs="$(git rev-parse --show-toplevel)" +spotify_nix="$nixpkgs/pkgs/applications/audio/spotify/default.nix" + + +# +# find the newest stable spotify version avaiable on snapcraft +# + +# create bash array from snap info +snap_info=($( + curl -H 'X-Ubuntu-Series: 16' \ + "https://api.snapcraft.io/api/v1/snaps/details/spotify?channel=$channel" \ + | jq --raw-output \ + '.revision,.download_sha512,.version,.last_updated' +)) + +# "revision" is the actual version identifier on snapcraft, the "version" is +# just for human consumption. Revision is just an integer that gets increased +# by one every (stable or unstable) release. +revision="${snap_info[0]}" +sha512="${snap_info[1]}" +upstream_version="${snap_info[2]}" +last_updated="${snap_info[3]}" + +echo "Latest $channel release is $upstream_version from $last_updated." + +# +# read the current spotify version from the currently *committed* nix expression +# + +current_nix_version=$( + grep 'version\s*=' "$spotify_nix" \ + | sed -Ene 's/.*"(.*)".*/\1/p' +) + +echo "Current nix version: $current_nix_version" + +# +# update the nix expression if the versions differ +# + +if [[ "$current_nix_version" = "$upstream_version" ]]; then + echo "Spotify is already up ot date" + exit 0 +fi + +echo "Updating from ${current_nix_version} to ${upstream_version}, released on ${last_updated}" + +# search-and-replace revision, hash and version +sed --regexp-extended \ + -e 's/rev\s*=\s*"[0-9]+"\s*;/rev = "'"${revision}"'";/' \ + -e 's/sha512\s*=\s*"[^"]*"\s*;/sha512 = "'"${sha512}"'";/' \ + -e 's/version\s*=\s*".*"\s*;/version = "'"${upstream_version}"'";/' \ + -i "$spotify_nix" + +# +# try to build the updated version +# + +if ! nix-build -A spotify "$nixpkgs"; then + echo "The updated spotify failed to build." + exit 1 +fi + +# +# give instructions for upstreaming +# + +git add "$spotify_nix" +# show changes for review +git status +echo 'Please review and test the changes (./result/bin/spotify).' +echo 'Then stage the changes with `git add` and commit with:' +# prepare commit message +echo "git commit -m 'spotify: $current_nix_version -> $upstream_version'" |