4.3 KiB
ncspot
ncurses Spotify client written in Rust using librespot. It is heavily inspired by ncurses MPD clients, such as ncmpc. My motivation was to provide a simple and resource friendly alternative to the official client as well as to support platforms that currently don't have a Spotify client, such as the *BSDs.
NOTE: ncspot is still in a very early development stage. Things will break and change. The feature set is still very limited. Also, as this is my first contact with Rust, some design decisions may need to be reworked in the future. Contributions welcome, but please be kind ;)
Requirements
- Rust
- Python 3 (needed for building
rust-xcbdependency) libasound2-dev(orportaudio-dev, if you want to use the PortAudio backend)libncurses-devandlibssl-devlibdbus-1-devlibxcb+ development headers (for clipboard access)- A Spotify premium account
- pkg-config
On Debian based systems you need following packages for libxcb developement headers:
sudo apt install libxcb1-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev
Usage
- Build using
cargo build --release - For debugging, pass a debug log filename, e.g.
ncspot -d debug.log
Key Bindings
These keybindings are hardcoded for now. In the future it may be desirable to have them configurable.
- Navigate through the screens using the F-keys:
F1: Queuecclears the entire queueddeletes the currently selected trackCtrl-sopens a dialog to save the queue to a playlist
F2: SearchF3: Libraryddeletes the currently selected playlist
- Tracks and playlists can be played using
Returnand queued usingSpace swill save or remove the currently selected track to your libraryowill open a detail view or context menu for the selected itemShift-owill open a context menu for the currently playing trackawill open the album view for the selected itemAwill open the artist view for the selected itemBackspacecloses the current viewShift-ptoggles playback of a trackShift-sstops a trackShift-rupdates the playlist cache<and>play the previous or next track,and.to rewind or skip forwardrto toggle repeat modezto toggle shuffle playbackqquits ncspotxcopies a sharable URL to the song to the system clipboardShift-xcopies a sharable URL to the currently selected item to the system clipboard
You can also open a Vim style commandprompt using :, the following commands
are supported:
quit: Quit ncspottoggle: Toggle playbackstop: Stop playbackprevious/next: Play previous/next trackclear: Clear playlistshare [current | selected]: Copies a sharable URL of either the selected item or the currernt song to the system clipboard
The screens can be opened with queue, search, playlists and log, whereas
search can be supplied with a search term that will be entered after opening
the search view.
Configuration
Configuration is saved to ~/.config/ncspot/config.toml.
Theming
The color palette can be modified in the configuration. For instance, to have ncspot match Spotify's official client, you can add the following entries to the configuration file:
[theme]
background = "black"
primary = "light white"
secondary = "light black"
title = "green"
playing = "green"
playing_bg = "black"
highlight = "light white"
highlight_bg = "#484848"
error = "light white"
error_bg = "red"
statusbar = "black"
statusbar_progress = "green"
statusbar_bg = "green"
cmdline = "light white"
cmdline_bg = "black"
More examples can be found in pull request https://github.com/hrkfdn/ncspot/pull/40.
Audio backends
By default ncspot is built using the Rodio backend. To make it use the
PortAudio backend (e.g. *BSD), you need to recompile ncspot with the
portaudio_backend feature:
cargo run --no-default-features --features portaudio_backend,cursive/pancurses-backend