A remote music player with MPRIS support. Perfect for those who enjoy owning their music.
Install from cargo with cargo install foksal-{TYPE} (where TYPE is one of local, remote or proxy, see below) or download the source code and build foksal locally.
Minimum supported Rust version (MSRV): 1.90.
In the descriptions below, music_root denotes the path (relative or absolute) to the root directory of your music collection.
If your music collection is stored locally, run foksal-local -m=<music_root>.
Set up a remote foksal instance by running foksal-remote -m=<music_root> on the server where your music is stored.
Then, on your local machine connect to the remote instance with foksal-proxy --remote-addr=<ip_address>.
To see all available options for a given binary, run it with the --help flag.
You will most likely want foksal to start at boot and run as a background process (as a systemd unit, for example).
Foksal reads its configuration from a TOML config file, by default ~/.config/foksal/foksal.toml (change the path with the -c flag if needed).
If the config file isn't there, it will be generated based on the default config and passed CLI arguments. All available options are listed below:
port- The port for clients to connect to (default:2137).music_root- The root directory of your music collection (default: foksal's working dir).audio_backend- The audio backend (alsa, pulse, pipewire, etc.) (default: well, 1default` - it should work just fine).allowed_exts- A list of extensions that foksal will treat as music files (default:mp3,m4aandflac).n_jobs- How many songs can be decoded in parallel (default: the number of available CPU cores). Careful: each decoded song requires a chunk of RAM.ignore_globset- A list of Unix glob patterns that foksal will ignore when searching for music (default: empty).
interface- The interface the remote instance will listen on (default:0.0.0.0(all interfaces)).port,music_root,allowed_exts,n_jobsandignore_globset- Same meaning as in local config (portis the port that proxy instances should connect to, make sure it's accessible).
remote_addr- The IP address of the remote foksal instance.remote_port- The port the remote instance is listening on.local_port- The port for clients to connect to.audio_backend- Same meaning as in local config.
Keep in mind that all foksal binaries read the same config file by default (meaning that, as an example, you don't need two almost-duplicated config file for local and proxy -
if proxy reads a config key it doesn't need, it will just silently ignore it).
Foksal isn't very useful all by itself, you will need an external client to control it.
For now, only a basic CLI-based client is available, install it with cargo install foksal-ctl. It's not very human-friendly, but can work well
as part of a scripting pipeline (for instance, to display the current song on your statusbar).
Another option is to control foksal with playerctl, just like any other MPRIS-compatible player.
A GUI client will be released soon.
Currently planned features:
- Data persistence between restarts.
- Support for user-specific data (ratings, comments, ...).
- Support for song lyrics.
- Support for frequency spectrum visualization.
Want to contribute? Create an issue on Codeberg (that's where foksal's development happens, the parallel GitHub repo is just a mirror).
Foksal (/ˈfɔk.sal/) is a street in my hometown. Also, it's no secret that software with foxes is the best.