vibox 0.2.0

a jukebox you exit with :q - a cli music player with vi motions, ex commands, and tmux manners
vibox-0.2.0 is not a library.

vibox

A jukebox you exit with :q

A cli music player with vi motions, ex commands, and tmux manners. Your library is a directory, a track is a file, and the last line of the screen is the command line.

vibox does not touch your files. It plays them, organizes them into playlists, and renames them when you ask. If you want it to move, copy and delete as well, that is :set danger, off by default and never saved for you. Either way nothing reaches the disk until you write it: :changes shows what a :w would do, u takes it back, and a force quit loses the lot on purpose.

 folders | playlists         │ everything │ roadtrip* │
friday                       │      file                       artist           album              time
late night                   │    4 Daft Punk - Around the Wo… Daft Punk        Homework           7:09
roadtrip                     │    3 Fleetwood Mac - Dreams     Fleetwood Mac    Rumours            4:17
                             │    2 Massive Attack - Teardrop  Massive Attack   Mezzanine          5:29
                             │    1 Nirvana - Smells Like Tee… Nirvana          Nevermind          5:01
                             │  5   Pink Floyd - Comfortably … Pink Floyd       The Wall           6:23
                             │>   1 Rick Astley - Never Gonna… Rick Astley      Whenever You Nee…  3:34
                             │    2 The Prodigy - Breathe      The Prodigy      The Fat of the L…  5:35
   1:58 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━───────────────────────────────────────   3:34
 NORMAL  Rick Astley - Never Gonna Give You Up                         vol 80%  artist rep:- shf  5/15
put 2 tracks into `roadtrip`, `:w` saves

Folders or playlists on the left, the open views as tabs across the top, the playing track marked with >, and relative line numbers in the gutter so 4j lands where you counted. The * on a tab means it has changes that :w has not written yet.

cargo install vibox   # that is the whole install: no system libraries, no headers
vibox ~/Music         # or just `vibox`, for your music directory
vibox rotation.m3u    # a playlist is a library too

Every dependency is pure rust, so the install cannot fail on a missing C header. Sound goes out over the pulseaudio socket, which pipewire serves as well. Linux only for now.

Keys

Motions are vi motions: j k, gg, G, 12G, ctrl-d, ctrl-u, H M L, zz zt zb. Counts work everywhere, so 8j moves eight rows and 30l seeks thirty seconds.

key does
enter space play the track under the cursor, pause
h l seek 5s back or forward
< > + - m previous, next, volume, mute
r s repeat off/all/one, shuffle
/ ? n N search filenames, artists, albums
c edit filenames in place, :w renames them
gt gT t switch tabs in the focused pane, open one in a new tab
gp jump to whatever is playing
tab ctrl-w h/l switch pane
:help every key, in sections

Nothing needs a leader key and nothing needs a ctrl-b first, so it keeps out of tmux's way.

Commands

:set root=~/Music is the library vibox opens on its own; vibox ~/other wins for that run. :e <path> opens one for now, :sort artist, :vol 70, :seek 1:30, :reload, :42 jumps to row 42, :q closes the tab.

:set works the way vim's does: :set noartist hides a column, :set artist! flips it, :set lyrics opens the lyrics pane, and :set on its own lists them. Volume, shuffle and repeat come back the way you left them; :mkrc writes your options to ~/.config/vibox/viboxrc for the ones you want pinned.

Playlists

Playlists are m3u files in ~/.local/share/vibox/playlists, and the left pane switches to them with gt. o starts an empty one, enter shows one in the track list, t opens it in a tab of its own.

Filling one is a yank and a put: t a folder into its own tab, V and j to select, y, gt back to the playlist, p. Then J and K reorder, dd takes a track out, and :w saves. A playlist is a view over your library, so the folders tab keeps browsing everything while one is open.

Nothing is written until :w. A [+] on the statusline means something is waiting, :changes lists exactly what :w would do, and :q refuses until you either write it or throw it away with :q!.

Danger mode

:set danger lets vibox change your library, and nothing else does. With it on, dd cuts tracks or a whole folder, d then p puts them in another folder as a move, y then p copies them, and :mkdir jazz makes a folder. It is off every time vibox starts, is never written by :mkrc, and has to be typed into ~/.config/vibox/viboxrc by hand to be there for you.

A cut is an edit, not an action: the rows leave the list at once, :changes lists every one, u and ctrl-r walk them, and only :w writes. Cut something and never put it back and :w deletes it, which is the whole point of :changes being there to read first. A batch is all or nothing, so one name that already exists stops the entire write rather than half applying it.

Renaming

c turns the list into a buffer of filenames. Edit them where they sit with the operators you already use (cw, x, A, dw), move between rows with j and k, then :w renames every changed file at once, or :e! throws the edits away. Nothing touches disk until you write, every name is checked before any rename runs, and tags are never modified.

Lyrics

:set lyrics fetches from lrclib and follows the song, highlighting the line being sung. It only follows when lrclib's recording matches yours within a couple of seconds, because timings from a different edit would drift; otherwise you get the words with no highlight. Off by default, cached on disk.

Media keys

vibox is an MPRIS player, so the media keys on your keyboard reach it from anywhere, and so does playerctl -p vibox play-pause.

License

AGPL-3.0-only.