I made a built-from scratch Wayland Compositor to display any GUI app* in the terminal! I think there is a lot of unexplored potential in custom Wayland compositors, a lot of really cool things you can embed existing applications into! So, I started with embedding apps into the terminal because that is the easiest input/output (output is just utf-8 and I use the great `chafa` library for that, and I just read from stdin for the input).
If you have any other ideas for cool Wayland compositors, let me know. I purposedly wrote 80% the app in Typescript to appeal to the most developers and attract cool contributions (I do all drawing with the familiar Canvas2D api, so if there is interest, I can also fork this out into a cool Terminal canvas, let me know!)
I have a blog post here about how I did it, but it’s pretty high level and non technical, so please ask if you have any questions.
[How I Did It](<https://github.com/mmulet/term.everything/blob/main/resource...>)
*technically only Wayland apps and x11 apps with Xwayland. But on Linux that’s mostly everything.
I am sure it was a great and fun learning experience.
Well done !
EDIT: nevermind, doing this with Docker seems much easier than I expected [0]. I'll try it tomorrow, I'm curious to see if the proposed solution works on Windows as well.
[0] https://medium.com/@priyamsanodiya340/running-gui-applicatio...
[1] https://www.brow.sh/
I run a ttyd server to get terminal over https, and I have used carbonyl over that to get work done. That's limited to a web browser (to get access to resources not exposed via the public internet), so having full GUI support is very useful
But can it run doom?
I had the change a couple of line to make it work because term.everything takes input only from stdin (this way it works of ssh and is pretty broadly compatible across terminals).
1. I had to remap another key to the control key (which is usually used to send signals like sigterm)
2. Then I had to change the timeout in which keys are pressed. When using stdin, you get a keydown event, but you don't get a key up event (ever). So I have to guess when you want to key up. Most of the time, I can send key up right away. But, it looks like doom has some sort of key debounce, so I had to wait 50-100 ms for keyup. Then there is the problem of if you want to walk forward in games you usually hold down up arrow, but now you have to rapidly press it! Not ideal, but it does work, and it it playable.
I used to write telnet games so I know all about keypress up never coming through. Even with immediate mode (so repeated keys will send repeated key codes while held down) it never tells you when it stops. You have to read the buffer ascii byte by byte. Still, awesome to see. Great work!!!
http://zemljanka.sourceforge.net/cursed/screenshots/
This is pretty much that but supercharged. Definitely really cool to see. Good work!