New Package: Gomuks.el
For the past few months I've been on and off working on a new package for Emacs, which is my first attempt at a proper major mode "application".
It is a wrapper/frontend for Gomuks, which is a Matrix client written in Go. Typically, Gomuks runs a web app client for Matrix, which connects to the Gomuks backend via a websocket. My wrapper, gomuks.el, connects to the websocket and acts as a full (well, rudimentary) Matrix client inside Emacs.
Why make this?
Matrix/Element is the single chat platform I use, and not having it be in Emacs has been a pain for ages, especially because the official Element client keeps getting worse (subjectively).
I would rather use a client from the terminal, and previously Gomuks was a solely TUI app that did that for me. However, they've moved away from the old TUI to a new (and better architecture), and now the TUI breaks on home-servers for me. So it was essentially the straw the broke the camels back in terms of forcing me to fix something myself.
If you're across the wider Emacs package world, you may have heard of ement.el, and are probably wondering why I can't use it. The simple answer is that ement.el doesn't handle encryption natively, instead requiring pantalaimon. Now, I've already had mixed success with pantalaimon in the past (which is why I was using the Gomuks TUI), but the repo for it has been archived as of earlier this year so I don't think it's wise to rely on it. As a side note, I'm not actually sure why it was archived; I assume the matrix org just didn't want to maintain it anymore, which is fair enough, but I would have liked some explanation on the readme at least. Anyway, Gomuks already handles encryption, and so gomuks.el does as well.
What state is it in?
This client is VERY basic. I would say it's usable, in the sense that I will use it and add features to it as I need them, but it is far from the quality of ement.el or the myriad of IRC clients in Emacs.
Basically all I have at the moment is live state synchronisation (without handling edit/delete events) and sending messages (only textual). The GUI is horrible, because I don't know how to use EWOC so I'm not, and it smells of programmer design. If you intend to use this, expect lots of unexpected jank.
That being said, I think the code is fairly high quality and well documented, so it should be fairly easy to modify and understand.
Contributing
I'm self-hosting this on my own git server, so there's no easy fork->PR workflow, and I'm not opening public registration. Sorry.
I'm happy to accept contributions though, either in the form of git patches or snippets sent to my email at [email protected].