nncmpp(1)
=========
:doctype: manpage
:manmanual: nncmpp Manual
:mansource: nncmpp {release-version}

Name
----
nncmpp - MPD client

Synopsis
--------
*nncmpp* [_OPTION_]... [_URL_ | _PATH_]...

Description
-----------
*nncmpp* is a hybrid terminal/X11/AppKit MPD client.  On start up it will
welcome you with an overview of all key bindings and the actions they're
assigned to.  Individual tabs can be switched to either using the mouse
or by pressing *M-1* through *M-9*, corresponding to the order they appear in.

As a convenience utility, any program arguments are added to the MPD queue.
Note that to add files outside the database, you need to connect to MPD using
a socket file.

Options
-------
*-d*, *--debug*::
	Adds a "Debug" tab showing all MPD communication and other information
	that help debug various issues.

*-g*, *--gui*::
	Use a graphical interface even when run from a terminal.
	Note that the application may be built with this feature disabled.

*-h*, *--help*::
	Display a help message and exit.

*-V*, *--version*::
	Output version information and exit.

Configuration
-------------
Unless you run MPD on a remote machine, on an unusual port, protected by
a password, or only accessible through a Unix socket, the client doesn't need
a configuration file to work.  It is, however, likely that you'll want to
customize the looks or add some streams.  You can start off with the following
snippet:

....
settings = {
  address    = "~/.mpd/mpd.socket"
  password   = "<your password>"
  pulseaudio = on
  x11_font   = "sans\\-serif-11"
}
colors = {
  normal      = ""
  highlight   = "bold"
  elapsed     = "reverse"
  remains     = "ul"
  tab_bar     = "reverse"
  tab_active  = "ul"
  even        = ""
  odd         = ""
  selection   = "reverse"
  multiselect = "-1 6"
  defocused   = "ul"
  scrollbar   = ""
}
streams = {
  "dnbradio.com" = "https://dnbradio.com/hi.pls"
  "BassDrive.com" = "http://bassdrive.com/v2/streams/BassDrive.pls"
}
....

Terminal attributes also apply to the GUI, and are accepted in a format similar
to that of *git-config*(1), only named colours aren't supported.
The distribution contains example colour schemes in the _contrib_ directory.

// TODO: it seems like liberty should contain an includable snippet about
//   the format, which could form a part of nncmpp.conf(5).

To adjust key bindings, put them within a *normal* or *editor* object.
Run *nncmpp* with the *--debug* option to find out key combinations names.
Press *?* in the help tab to learn the action identifiers to use.

You may also define and bind your own actions, launching arbitrary
shell commands.  Note that you cannot override internal actions in this manner.

....
actions = {
  "pioneer-on-off" = {
    description = "Pioneer amplifier: turn on/off"
    command = "elksmart-comm --nec A538"
  }
}
....

Spectrum visualiser
-------------------
When built against the FFTW library, *nncmpp* can make use of MPD's "fifo"
output plugin to show the audio spectrum.  This has some caveats, namely that
it may not be properly synchronized, only one instance of a client can read from
a given named pipe at a time, it will cost you some CPU time, and finally you'll
need to set it up manually to match your MPD configuration, e.g.:

....
settings = {
  ...
  spectrum_path = "~/.mpd/mpd.fifo"  # "path"
  spectrum_format = "44100:16:2"     # "format" (samplerate:bits:channels)
  spectrum_bars = 8                  # beware of exponential complexity
  ...
}
....

The sample rate should be greater than 40 kHz, the number of bits 8 or 16,
and the number of channels doesn't matter, as they're simply averaged together.

PulseAudio
----------
If you find standard MPD volume control useless, you may instead configure
*nncmpp* to show and control the volume of any PulseAudio sink MPD is currently
connected to.

This feature may be enabled with the *settings.pulseaudio* configuration option,
as in the snippet above.  To replace the default volume control bindings, use:

....
normal = {
  "+" = "pulse-volume-up"
  "-" = "pulse-volume-down"
}
....

The respective actions may also be invoked from the help tab directly.

For this to work, *nncmpp* needs to access the right PulseAudio daemon--in case
your setup is unusual, consult the list of environment variables in
*pulseaudio*(1).  MPD-compatibles are currently unsupported.

Info plugins
------------
You can invoke various plugins from the Info tab, for example to look up
song lyrics.

Plugins can be arbitrary scripts or binaries.  When run without command line
arguments, a plugin outputs a user interface description of what it does.
When invoked by a user, it receives the following self-explanatory arguments:
_TITLE_ _ARTIST_ [_ALBUM_], and anything it writes to its standard output
or standard error stream is presented back to the user.  Here, bold and italic
formatting can be toggled with ASCII control characters 1 (SOH) and 2 (STX),
respectively.  Otherwise, all input and output makes use of the UTF-8 encoding.

Files
-----
*nncmpp* follows the XDG Base Directory Specification.

_~/.config/nncmpp/nncmpp.conf_::
	The configuration file.

_~/.local/share/nncmpp/info/_::
_/usr/local/share/nncmpp/info/_::
_/usr/share/nncmpp/info/_::
	Info plugins are loaded from these directories, in order,
	then listed lexicographically.
	Only the first occurence of a particular filename is used,
	and empty files act as silent disablers.

Reporting bugs
--------------
Use https://git.janouch.name/p/nncmpp to report bugs, request features,
or submit pull requests.

See also
--------
*mpd*(1), *pulseaudio*(1)
