dizi icon indicating copy to clipboard operation
dizi copied to clipboard

Server-client music player written in Rust

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

  • [x] play/pause support
  • [x] get audio duration (requires rodio and symphonia to work together on this)
  • [x] volume support
  • [x] fast forward/rewind
  • [x] directory playing
    • [x] shuffle
    • [x] repeat
    • [x] next
    • [ ] sorting
  • [x] playlist support
    • [x] add/delete/update songs
    • [x] recursively add songs in a directory
    • [x] shuffle
    • [x] repeat
    • [x] next
    • [x] loading
    • [x] clearing
    • [x] save on exit
  • [x] show music progress
  • [x] configurable audio system
    • [x] ALSA support (current default)
    • [x] JACK support
    • [ ] Pulseaudio support (issue https://github.com/RustAudio/cpal/issues/259)
    • [ ] Pipewire support (issue https://github.com/RustAudio/cpal/issues/554)
  • [x] querying
    • [x] file name
    • [x] file path
    • [x] show audio metadata (title, artists, genre, album, etc)
    • [x] playlist index and length
  • [x] on song change hook

Client-side

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