ncspot

Crates.io Gitter Build

Packaging status

ncspot 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.

Search

Resource footprint comparison

Measured using ps_mem on Linux during playback:

| Client | Private Memory | Shared Memory | Total | | --- | --- | --- | --- | | ncspot | 22.1 MiB | 24.1 MiB | 46.2 MiB | | Spotify | 407.3 MiB | 592.7 MiB | 1000.0 MiB |

Requirements

On macOS

ncspot is available via Homebrew: brew install ncspot.

On Linux

On Debian based systems you need following packages for development headers: sudo apt install libncursesw5-dev libdbus-1-dev libpulse-dev libssl-dev libxcb1-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev

For Fedora, these dependencies are required: dnf install pulseaudio-libs-devel libxcb-devel openssl-devel ncurses-devel dbus-devel

Building a Debian Package

You can use cargo-deb create in order to build a Debian package from source. Install it by:

cargo install cargo-deb

Then you can build a Dabian package with:

cargo deb

You can find it under target/debian.

Usage

Audio backends

By default ncspot is built using the PulseAudio backend. To make it use the PortAudio backend (e.g. for *BSD or macOS), you need to recompile ncspot with the portaudio_backend feature:

Key Bindings

The keybindings listed below are configured by default. Additionally, if you run ncspot with MPRIS support, you may be able to use media keys to control playback depending on your desktop environment settings. Have a look at the configuration section if you want to set custom bindings.

Use / to open a Vim-like search bar, you can use n and N to go for the next/previous search occurrence, respectivly.

Commands

You can also open a Vim style commandprompt using :, the following commands are supported:

The screens can be opened with focus <queue|search|library>. The search command can be supplied with a search term that will be entered after opening the search view.

To close the commandprompt at any time, press esc.

Configuration

Configuration is saved to ~/.config/ncspot/config.toml. To reload the configuration during runtime use the reload statement in the command prompt :reload.

Possible configuration values are:

Keybindings can be configured in [keybindings] section in config.toml, e.g. as such:

[keybindings] "Shift+i" = "seek +10000"

See the help screen by pressing ? for a list of possible commands.

ncspot will respect system proxy settings defined via the http_proxy environment variable.

Theming

Theme generator by @vaarad.

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_selected = "light 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" search_match = "light red"

More examples can be found in pull request https://github.com/hrkfdn/ncspot/pull/40.

Cover Drawing

When compiled with the cover feature, ncspot can draw the album art of the current track in a dedicated view (:focus cover or F8 by default) using Überzug. For more information on installation and terminal compatibility, consult that repository.

To allow scaling the album art up beyond its resolution (640x640 for Spotify covers), use the config key cover_max_scale. This is especially useful for HiDPI displays:

cover_max_scale = 2

Authentication

ncspot prompts for a Spotify username and password on first launch, uses this to generate an OAuth token, and stores it to disk.

The credentials are stored in ~/.cache/ncspot/librespot/credentials.json (unless the base path has been changed with the --basepath option).

The :logout command can be used to programmatically remove cached credentials (see Commands above).