Contemplating My Perfect Gemini Client
November 5, 2022
Okay now that I've finished the bulk of Lasso, I'm currently pondering what features I absolutely want in a smallnet client I'd like to write. I've assembled an incomplete list, more for my reference than for anybody else. (although I'd love somebody backing me up that they want features like these as well!)
Must support:
- variable-width text, because I cannot comfortably read fixed-width prose for more than a few minutes
- an additional fixed-width mode, for Gopher pages that intermix ASCII art and text
- at minimum Gemini and Gopher
- multiple tabs
- opening images, either inline or by automatically opening an external image viewer
- forward and backward in tab history
- "go to parent" & "go to root" navigation
- client certificates, namely automatically sending them to specific domains and paths
- screen readers and other accessibility tools & options (YMMV depending on what pages you visit, but the client itself should be accessible)
Should support:
- opening other file formats than text/* and images
- restoring the previously-open tabs when launching the client
- being used in a keyboard-driven style (but **NOT** exclusively keyboard-only)
- "tour" navigation à la VF-1 and AV-98
Would be nice to support:
separate distinct "identities" for various Gemini services
verifying certificates with DANE or a CA as well as the standard TOFU
- non-UTF-8 encodings
- vim-style keybindings, for at least some of it
- both a GUI and TUI frontend sharing the same backend, so you can render fancy ANSI art pages in the terminal
I fully admit that of these are just features taken from other extant clients, many of them being features of my favorite client Lagrange. I'm not too creative at coming up with original ideas, but if there is one thing I'm good at its taking existing good ideas and mashing them together into a homunculus that does everything I want instead of just most of what I want. Combine that with a very strong case of Not Invented Here Syndrome and we've got a fresh new client in the works!
https://gmi.skyjake.fi/lagrange/
⁂
Right now I'm debating writing it in Ada or Common Lisp. It's 1000% narrowed down to those two programming languages because they're the only programming languages I ** really enjoy writing; and the ones I'd want to choose for a semi-large-ish project. Up until now I'd planned to use Ada and I've spent quite a bit of time writing various support libraries for a Gemini client in Ada. However, after writing Lasso in Common Lisp and having it be so quick, easy, and legitimately fun to write, it's really made me reconsider. I still feel like Ada will result in a better and more maintainable final product, just because it's explicitly designed to basically force writing well-organized and understandable code, with an emphasis on large codebases; while in CL even something as small-scale as Lasso requires a lot of genuine effort to keep the code organized and clean. But it's so hard to ignore the literal breeze that ** initially developing anything in Lisp is…
Requires a lot more thought.
Announcing the Lasso Read-it-Later Service
The only thing I know for sure is that I'm going to plan as much as possible in advance, as I typically do. Should write a post about that and the other programming ideals I practice sometime too…