A shameless plug, but you may also like Quod Libet[1]. Although not for everyone, it has very advanced searching and the more unusual integrations and features all implemented as plugins.
> But then I've got some scripts that maintain a copy of that collection, except converted to MP3 at a variable bitrate
Yes. I have / had been doing this for years, and just want to sing high praises of mp3fs[1], assuming some kind of Linux or macOS machine. It solves this problem in a way that I think more people should know about!
By default this will mean that Stack will use Nix to download non-Haskell dependencies. E.g. GHC and external C libraries will be downloaded by Nix.
This allows you to pin all dependencies that you have, including the compiler and external libraries (make sure to pin a specific version of nixpkgs though). And it will give developers a reproducible build environment.
It is also possible to take this Nix integration even further and make Stack download all Haskell dependencies from Nix as well. However, this requires to write a custom `stack-shell.nix` file, so I would only recommend this for people who are already familiar with Nix.
This file must then be configured in `stack.yml`
Example `stack.yml`:
# Using a `ghc-*` resolver means that stack won't try to download and build any packages itself,
# instead it will only use the packages that are shipped with the compiler.
# In `./nix/stack-shell.nix`, we ensure that the compiler indeed ships all the packages we
# need.
resolver: ghc-9.0
packages:
- "."
# This makes stack pick up our nix environment for building by default.
nix:
enable: true
shell-file: nix/stack-shell.nix
path: ["nixpkgs=./nix/nixpkgs-pinned.nix"]
IMO it's because they've done very smart pivots / rebranding (VSCode, Github, NPM, even the Surfaces) and people who even know start thinking "new Microsoft"