1 unstable release

0.3.0 Mar 15, 2024

#1870 in Command line utilities

LGPL-3.0

4.5MB
10K SLoC

Linux build

MacOS build

dizi

Server-client music player written in Rust

The goal of this project is to create a modern version of mocp in Rust.

Alt text

Motivation

mocp currently interfaces with ALSA to play audio. This doesn't play well with pipewire's pipewire-alsa plugin; whenever mocp is playing music, other audio/video apps stop working and vice versa.

Dependencies

  • A system supporting UNIX sockets
  • cargo
  • rustc
  • Jack or Alsa or any other audio system cpal supports
  • file command for audio file detection

Building

~$ cargo build

Installation

For single user

~$ cargo install --path=. --force

System wide

~# cargo install --path=. --force --root=/usr/local     # /usr also works

Usage

~ $ dizi-server     # starts server
~ $ RUST_LOG=debug dizi-server      # starts server with debug messages enabled
~ $ dizi            # starts server if not already started, then starts frontend

Configuration

Check out docs for details and config for examples

client.toml

  • client configurations

keymap.toml

  • for keybindings for client

theme.toml

  • color customizations for client

server.toml

  • server configurations

Contributing

See docs

Features/Bugs

Please create an issue :)

TODOs

Server-side

  • play/pause support
  • get audio duration (requires rodio and symphonia to work together on this)
  • volume support
  • fast forward/rewind
  • directory playing
    • shuffle
    • repeat
    • next
    • sorting
  • playlist support
    • add/delete/update songs
    • recursively add songs in a directory
    • shuffle
    • repeat
    • next
    • loading
    • clearing
    • save on exit
  • show music progress
  • configurable audio system
  • querying
    • file name
    • file path
    • show audio metadata (title, artists, genre, album, etc)
    • playlist index and length
  • on song change hook

Client-side

  • show hidden files
  • searching
    • glob search
    • case-insensitive search
    • skim search (fzf)
  • show player progression
  • playlist support
    • show playlist
    • add/delete/update songs
    • shuffle
    • repeat
    • next
    • clearing
  • show audio metadata (artists, genre, album, etc)
  • theming support
  • custom layout support

Dependencies

~20–51MB
~1M SLoC