diff --git a/home-manager/fred.nix b/home-manager/fred.nix index c1f44df..9b8ef88 100644 --- a/home-manager/fred.nix +++ b/home-manager/fred.nix @@ -110,21 +110,22 @@ in }); settings = { enable_audio_visualization = true; - # Our own Spotify app rather than the bundled default (ncspot's client ID, - # shared by every spotify-player/ncspot install). Upstream recommends the - # default because it has extended quota mode, but its rate-limit bucket is - # shared across every user of it, and we hit 429s on it just adjusting the - # volume. Our own app gets a private bucket. + # No client_id: use the bundled default (ncspot's), as upstream + # recommends. It predates Spotify's 2024-11-27 Web API change and is in + # extended quota mode, so it still gets the editorial/algorithmic + # playlists — Discover Weekly, Made-For-You, browse categories. Any app + # registered today is stuck in restricted quota and Spotify returns those + # as null, which is what left Made-For-You empty while we ran our own. + # + # We did briefly run our own app (private rate-limit bucket) because the + # bundled one's bucket is shared with every other spotify-player/ncspot + # user and we hit 429s. But that burst came from scroll-to-set-volume and + # the post-action confirmation reads, both cut below — so the private + # bucket is no longer worth losing half the library over. + # + # Changing client ID invalidates the cached Web API token: run + # `spotify_player authenticate` once after deploying this. # - # The cost of a post-2024-11-27 app is restricted quota: Spotify returns - # its own editorial/algorithmic playlists as null, so Discover Weekly, - # Made-For-You and browse categories are missing. That used to break - # *search* outright (upstream #617/#621) because one null sank the whole - # deserialization, but rspotify 0.15.3 — pinned by 0.24.1 — drops null - # page items instead (`vec_without_nulls`), so search works again. - # Public PKCE client, no secret involved, so it's fine in the repo. - # Redirect URI registered: http://127.0.0.1:8989/login - client_id = "265506bc7bbd4032bf0fee708b321d3e"; # Scroll-to-set-volume is a rate-limit trap: playback runs through a local # librespot softmixer, but the mixer is only set once at session start, so # every later change is a Web API PUT /me/player/volume round-trip (plus