I WILL make music great again. (My next project)
2022-12-20
Finally something worth your time?
Time for something a little different than usual. Today I'm going to talk about my next project that I am working on as we speak. It usually starts with 'boo this program sucks, let's write something that does what I need it to do better than the current options and this time, it's no exception.
As you know, I've been working rather heavily on my dwm build; speedwm. I've been trying to iron out bugs with it and generally make it the window manager (or computer setup in general) of my dreams. After I reached 800 commits just a few days on the new speedwm repository alone, not to mention the many more on the old repositories, which adds up to over a thousand commits, I realized that I am trying to improve something that doesn't really desperately need improvement.
Now that I'm fairly happy with it, I am going to start a new project. I might work slowly on speedwm, and hope to have a 1.9 release out soon but I don't plan on making any more massive changes to it. So as usual when it's new project time, what happens is I think of a piece of software that sucks and then I try to make something that fixes the flaws. What is it this time?
Make music great again
Yes, you heard me right. I am going to write a music player. Or rather a mpd frontend, because it would be stupid to reimplement something that already works well, right?
Now, I am listening to music through cmus as I am writing this blog post for you, and I have to say it's generally a great music player. It's light, fast, Vim-like and fairly polished and clean. Unlike the mocp I was using earlier, it has a UI more like.. you know, a music player than a file manager which is one of the reasons why I much, much prefer cmus. So why does this need change then?
cmus is not built for window managers
Yeah, I said it. One of the problems with cmus is how difficult it is to manage it through the command-line. There is cmus-remote, however even with this you often have to use lots of slow awk commands to get the format you want.
I plan on solving this by adding window manager/status friendly syntax which allows the user to specify a format, no slow awks or seds in your status script.
Lack of extensibility
None of the music players/mpd frontends I've looked at are extensible enough for my taste. I want to be able to make it extremely minimal or command-line Spotify without any delay or external programs.
It doesn't help that cmus and a lot of other music players don't seem to be maintained very much. Most of them seem to be written for TTY users, and don't have a lot of fancy features. This is not great when you want a light (but feature rich) music experience.
I plan to solve this by keeping the base small and clean, as well as a very well documented codebase unlike suckless software. While I for the most part like their philosophy, I am not a fan of how they refuse to add any meaningful comments to their code.
Cool planned features
None of these have been implemented yet but I might end up implementing them. Some as modules, some built into it.
- Vim-like default keybinds but of course ones that can be changed. Extensibility is one of my goals for this project and is one problem I have with cmus and the countless other players.
- FLAC support. This is an absolute must and I will not release it before FLACs play perfectly. I am a sucker for lossless music and those mp3s can go back to history.
- Cover art previews. This is not an absolute must, but it would be really nice to have sixel/ueberzug/w3m previews for this player.
- Different approach. Instead of using patches like I do for most of my software, I plan on providing a simple base with a plugin system. If I end up writing it in POSIX shell, I could simply
.
plugins in the config file. This would be easy to configure and very customizable. - macOS and BSD compatibility. I want support for many operating systems, and a mpd frontend has no reason not to work on macOS and BSD. That said, I may need some help implementing macOS stuff, please contact me if you're willing to help and test it for me.
- Usage of ncurses?
- Maybe this could've been mentioned earlier, but I want wide image support. I won't implement stuff like Kitty image previews, but feel free to PR for it :)
- External piping. This could for example allow anything to be piped into programs like fzf, dmenu or rofi.
- Playlists. Simple as, I suppose.
- Auto downloading metadata using something like Musicbrainz.
- Few dependencies. This is not a requirement because the target userbase is window manager users like myself, not TTY minimalist LFS users, but it would be nice to save Gentoo users like myself some compile times.
- Perhaps ability to download a music video or something similar. This is really just for show and probably wouldn't be very useful in practice so I don't think this will happen.
Ideas
If you have any ideas for this project, please consider emailing me it. I want to make this project as good as it can be.
Naming?
I have no idea what to name this mpd frontend, if you have any suggestions feel free to send me a suggestion.
End.
Going to end the blog post here as I've already rambled on and on about how music players suck and what I want it to do. Thank you for reading and have a great rest of your day!