# User Documentation
## Installation Instructions
[![Packaging status](https://repology.org/badge/vertical-allrepos/ncspot.svg)](https://repology.org/project/ncspot/versions)
### On macOS
`ncspot` is available via [Homebrew](https://brew.sh/):
```zsh
brew install ncspot
```
### On Windows
`ncspot` is available via [Scoop](https://scoop.sh/):
```powershell
scoop install ncspot
```
or via [winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/):
```powershell
winget install hrkfdn.ncspot
```
### On Linux
Your distribution may have packaged `ncspot` in its package repository.
If so, simply install using your distribution's package manager - it
is by far the easiest way. If not, you can build from source instead.
See [Compiling](/doc/developers.md).
In case your package manager does not perform dependency resolution,
here are the runtime dependencies:
- `dbus`, `libncurses`, `libssl`
- `libpulse` (or `portaudio`, if built using the PortAudio backend)
- `libxcb` (if built with the `clipboard` feature)
- `ueberzug` or a compatible implementation (e.g. `ueberzugpp`) (if built with the `cover` feature)
### On BSD's
Your distribution may have packaged `ncspot` in its package repository.
If so, simply install using your distribution's package manager - it
is by far the easiest way. If not, you can build from source instead.
See [Compiling](/doc/developers.md).
### From [crates.io](https://crates.io/crates/ncspot)
`ncspot` can be installed with `cargo`. The `cargo` documentation recommends against installing
software with it. If another option is available from the ones above, it should be preferred. If no
recent version is available for your OS, you can use the following command to install `ncspot` from
[crates.io](https://crates.io/crates/ncspot).
```zsh
# The --locked option is important and the compilation process might fail without it
cargo install --locked ncspot
```
## Key Bindings
The keybindings listed below are configured by default. Additionally, if you
built `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](#configuration) if you want to set custom bindings.
### Navigation
| Key | Command |
|-------------------|-------------------------------------------------------------------------------|
| ? | Show help screen. |
| F1 | Queue (See [specific commands](#queue)). |
| F2 | Search. |
| F3 | Library (See [specific commands](#library)). |
| F8 | Album Art (if built with the `cover` feature). |
| / | Open a Vim-like search bar (See [specific commands](#vim-like-search-bar)). |
| : | Open a Vim-like command prompt (See [specific commands](#vim-like-commands)). |
| Escape | Close Vim-like search bar or command prompt. |
| Q | Quit `ncspot`. |
### Playback
| Key | Command |
|-------------------------------|----------------------------------------------------------------|
| Return | Play track or playlist. |
| Space | Queue track or playlist. |
| . | Play the selected item after the currently playing track. |
| P | Move to the currently playing track in the queue. |
| S | Save the currently playing item to your library. |
| D | Remove the currently playing item from your library. |
| Shift+P | Toggle playback (i.e. Play/Pause). |
| Shift+S | Stop playback. |
| Shift+U | Update the library cache (tracks, artists, albums, playlists). |
| < | Play the previous track. |
| > | Play the next track. |
| F | Seek forward by 1 second. |
| Shift+F | Seek forward by 10 seconds. |
| B | Seek backward by 1 second. |
| Shift+B | Seek backward by 10 seconds. |
| - | Decrease volume by 1%. |
| + | Increase volume by 1%. |
| [ | Decrease volume by 5%. |
| ] | Increase volume by 5%. |
| R | Toggle _Repeat_ mode. |
| Z | Toggle _Shuffle_ state. |
### Context Menus
| Key | Command |
|-------------------------------|-----------------------------------------------------------------------------------------------------------|
| O | Open a detail view or context for the **selected item**. |
| Shift+O | Open a context menu for the **currently playing track**. |
| A | Open the **album view** for the selected item. |
| Shift+A | Open the **artist view** for the selected item. |
| M | Open the **recommendations view** for the **selected item**. |
| Shift+M | Open the **recommendations view** for the **currently playing track**. |
| Ctrl+V | Open the context menu for a Spotify link in your clipboard (if built with the `share_clipboard` feature). |
| Backspace | Close the current view. |
When pressing O:
- If the _selected item_ is **not** a track, it opens a detail view.
- If the _selected item_ **is** a track, it opens a context menu with:
- "Artist(s)" (let's you show or (un)follow a track's artist(s))
- "Show Album"
- "Share" (if built with the `share_clipboard` feature)
- "Add to playlist"
- "Similar tracks"
### Sharing
(if built with the `share_clipboard` feature)
| Key | Command |
|-------------------------------|--------------------------------------------------------------------------|
| X | Copy the URL to the **currently selected item** to the system clipboard. |
| Shift+X | Copy the URL to the **currently playing track** to the system clipboard. |
### Queue
| Key | Command |
|------------------------------|--------------------------------------|
| C | Clear the entire queue. |
| D | Delete the currently selected track. |
| Ctrl+S | Save the current queue. |
### Library
| Key | Command |
|--------------|-----------------------------------------|
| D | Delete the currently selected playlist. |
### Vim-Like Search Bar
| Key | Command |
|--------------|-----------------------------|
| n | Previous search occurrence. |
| N | Next search occurrence. |
### Vim-Like Commands
You can open a Vim-style command prompt using :, and close it at any
time with Escape.
The following is an abridged list of the more useful commands. For the full list, see [source code](/src/command.rs).
Note: \ - mandatory arg; [BAR] - optional arg
| Command | Action |
|------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `help` | Show current key bindings. |
| `quit` Aliases: `q`, `x` | Quit `ncspot`. |
| `logout` | Remove any cached credentials from disk and quit `ncspot`. |
| `playpause` Aliases: `pause`, `toggleplay`, `toggleplayback` | Toggle playback. |
| `stop` | Stop playback. |
| `seek` [`+`\|`-`]\