dizi
dizi copied to clipboard
Server-client music player written in Rust
dizi
Server-client music player written in Rust
The goal of this project is to create a modern version of mocp in Rust.
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