Software I Wish Existed

by on 2024-06-06 | License Permalink

This post came about because I’ve spotted some places in my life where I want to be able to use alternative software that better meets my values and how I like to work, and I wanted to get these thoughts out in the wild to force myself to organise them.

I’m at a place in my life where I don’t possess the skills to implement a lot of the things I want to see in this list, and I don’t currently have the time to invest in developing these skills. I’d love to learn Rust and then use it to develop some neat ebook-management tools, or use it to build a game engine which lets me rebuild Pokémon Emerald but with the maps and Pokémon from Pokémon Silver available for me to play too. But that’s just where I am now. Maybe in a few years.

Please enjoy this ranting-and-fantasising post.

An mpd-style calendar daemon with CalDAV support, and some CLI or TUI clients

This is one of my holy grails of software-I-wished-existed.

I self-host my personal calendar via Baïkal, which provides me with a Google-free calendar to use for my personal life. I pretty much access it solely on my phone via DAVx5 for Android.

I also have to use Google Calendar for work things. For this I mostly have to open up the browser, which I hate doing, because I have not yet found a single solution which works for me in the terminal.

I would truly adore an mpd-style daemon called something like cald whose entire job it was, was to manage local and remote calendars and keep them in sync, and provide an API for me to do some basic things like viewing the calendar and managing the events.

I’ve tried using a stack of UNIX-style tools before but it didn’t work well for me in this case. Taking inspiration from my email stack which uses neomutt, imapfilter, isync, and msmtp as separate components – I used vdirsyncer to grab remote files representing my remote calendars and displayed them using khal. This was OK, but it often failed to synchronise and I found that khal wasn’t displaying things how I wanted them. I also couldn’t create events very easily.

I’ve also tried using calcurse and I may end up giving it another go as I’ve read that it has some experimental CalDAV features but I’m not sure it will stick since these are limited to syncing a single calendar. What I want is a simple native daemon which provides a local calendar backend and can sync multiple remote CalDAV calendars. This would give me the ability to use different clients and interfaces to the application as I see fit.

A suite of independent tools to replace Calibre

Like many people, I use Calibre to manage my ebook library. On the whole, the software really is great and everything most people would need to manage ebooks and more on their computer. This is going to be a long section, and I’m going to come off as very anti-Calibre but I promise my complaints are pretty much just pointing out how the way that Calibre’s architecture no longer matches the way I like to interact with my computer. All I’m saying is that I wish that there were some decent alternatives out there for people like me. Calibre continues to be a shining example of FLOSS which I will continue to promote to anyone who isn’t actively trying to achieve a lightweight, UNIX-style, and keyboard-driven experience of computing.

My main issues with Calibre can be summed up as the following:

  1. It’s a GUI and I can’t use the keyboard to navigate effectively, so it breaks my workflow
  2. It is monolithic in design and integrates lots of features that I believe would be better suited as independent libraries or tools

The first of these is pretty self-explanatory. Calibre is a GUI which is fine and for the most part I find it a very good GUI. However, I find it really jarring to interact with Calibre because when I open it, it rips me out of my regular computing environment and into a new paradigm and this context switch is often quite uncomfortable for me. The majority of my work can be done without the mouse and most of the applications I use can be configured to use the same keys for navigation and various tasks; so I’m very often in a cosy environment where I can interact with my machine in the way that is most suited for me. Opening Calibre tears me out of that and into Calibre’s paradigm.

Calibre does provide some keyboard shortcuts which I do use, and it does provide a graphical configuration menu to allow me to change these shortcuts but I have to reach for the mouse more often than not to get somewhere I want to be. Calibre’s metadata editing interface doesn’t have the ability for me to use link or form highlighting, or navigate between fields using a key combo. This makes it tough to get things done in the way that I want.

Oh, and as a final gripe about the GUI – it doesn’t use the GTK framework so has a different theme to the rest of my interface.

A lot of the other issues I have with Calibre stem from the fact that it has a very monolithic design. What I mean by this is that Calibre packs a lot of features in there that I think would be better suited as independent programs. It also has some undesirable behaviour and side-effects. Calibre does provide some tools which I think are quite neat and effective, however they’re very tightly integrated into the program and I can’t just install the components that I want.

The most egregious of these by far, for me, is the Self Updater. Kovid Goyal maintains Calibre pretty actively, and there is often an update to the software. Instead of this coming through my package manager, Calibre has its own built in updater, sort of. On GNU/Linux systems it actually directs you to a web page with a “wget to bash” pipe which fetches and installs the latest version of the software. I imagine this is great on Windows and probably macOS systems but systems like GNU/Linux and the BSDs generally use package managers or systems like Ports. I tend to lean the same way as Drew DeVault and believe that developers should not distribute their own software on systems with package managers beyond providing a source tarball and perhaps a Makefile to let a single user install it. Let the package maintainers, and package managers, do their jobs!

On systems like Arch which are more “bleeding edge”, and have access to the AUR, this would be incredibly easy to set up. On systems like Debian Stable and its derivatives which freeze packages for a release… the users of these systems actually expect — sometimes even actively value — that the software won’t change until the next distro release.

After the self-updater, the Calibre’s monolithic design irks me most by installing a bunch of cruft on my system that I don’t want and acting inflexibly when I want to use alternative software for some tasks. Calibre rolls several of its own solutions for various tasks. By installing Calibre, one ends up with a plethora of additional tools on their system:

Taken independently, each of these tools appears utterly fantastic and I do not take any issue with any one individually. It would also be understandable if they were installed on my system from a meta package.

Although I’ve never used any of them, the CLI tools look very very useful. If I managed to replace Calibre’s interface with an alternative tool – I’d honestly probably want to use these tools to help me manage my ebook library! The issue I have is that they’re not installable separate to Calibre. I’d love just to install ebook-convert, ebook-meta, and maybe ebook-device and be on my way. But alas no.

This also works the other way, affecting my experience within Calibre itself. Calibre will open ebooks in ebook-viewer and will also open ebook-edit if you want to edit the book from within your library. There’s no way to swap these out for other tools. I use Zathura as a document reader on my machine since it’s light and keyboard-driven, and I used to edit ebooks in Sigil. I prefer both of these to Calibre’s built in tools, and only stopped using Sigil when I decided to put up with ebook-edit as I didn’t want redundancy on my system.

This isn’t to say that I think Calibre’s built in tools shouldn’t exist. ebook-edit can handle multiple different kinds of ebook files whereas Sigil can only handle EPub. This is inherently useful, so I do understand. It’s just that I only use EPub as my canonical library, and only convert to other formats for reading on my e-reader. I only need the ability to edit EPub files.

Similarly, ebook-viewer isn’t bad. It’s just that I don’t need it when I have zathura installed and it’s my preferred application, and I should be able to use zathura from within Calibre. Basically, I think Calibre should just be calling xdg-open to complete various tasks.

There is also a bunch of miscellaneous functionality that Calibre bundles which I don’t really need integrating. Calibre includes functions for things such as reading news and converting/sending that news to e-reader devices. Again, this is really neat but I really don’t need it bundled with my ebook management software.

My final outright complaint about Calibre is that it actively manages my library for me. I add books from within Calibre and it manipulates my file system to match. To some — likely most — this will be a useful and positive feature and I understand that. I’d still prefer to manage my ebook files using other tools which I feel are better suited to the job… such as my file manager.

Calibre’s enforced file organisation scheme is fine and I can just-about ignore it; but it results in files that are named differently to every other convention in my system, making it difficult to navigate in the command line since there are spaces in the file names and folders. It also means that whenever I use Calibre’s interface to send an ebook to my e-reader (an Amazon Kindle 4), it results in an additional Mobi file being placed in the book’s folder. Again this makes sense but can result in large portions of my library being duplicated and this has implications for managing my backups. I’d much prefer it if Calibre would dump the Mobi file directly on the device without storing it on my filesystem first, although I do understand the current behaviour as a somewhat sensible default.

So what is it that I actually want?

I want a few small tools that I can use to string together a lightweight, keyboard-driven, ebook management experience. I think I could get the experience I want with the following:

I like mpd’s approach to managing files. It doesn’t. mpd lets you use other tools at your disposal to manage and organise your music collection i.e. your file manager and terminal. For my music library, I tell mpd which folder to look in to find my music and then, on command, it builds its own database independent of the file and folder structure in my library. This means that I can do things such give my own naming conventions for artists (all lowercase, no spaces), and for albums (prefixed with their year). For artists with large catalogues, I can further sort albums into “studio”, “live”, and “ep” folders if I so choose. mpd doesn’t care about any of that; it just scans the entire music directory and builds its database. To add new files I use file management tools to add the music to an appropriate folder underneath where mpd is looking, edit the tags using a dedicated tag editor, and then tell mpd to update the database either directly or via ncmpcpp’s interface.

I’d very much like to interact with my ebooks in a similar manner to how mpd allows me to interact with my music library. I doubt it’d need to run as a daemon, but I’d like there to be a CLI program which can be configured to watch a folder for ebooks and then update a local database based on what it finds there. Other programs can act as clients and interact with the database to provide other functionality. I’d really like an ncmpcpp-style TUI to replace Calibre’s browsing function, with keyboard shortcuts to open up readers which respected my system-defined default programs. I could use another key to invoke a command or a script to send the book to my e-reader, or convert the book to a new format in-place.

If I had these two components set up, the only missing piece is a way to convert between formats. A simple CLI tool should do it, and I would be able to call it from the TUI client as part of a command which sent a book to a device, or manually from the terminal.

I understand that there are complexities to navigate around. What about a single book stored in multiple formats? Calibre can navigate this by ensuring that a book is represented by a single folder, and that all files in this folder are the same book in different formats. This new tool would need to accommodate libraries organised this way, libraries organised in format first, or language first etc. I’d also need to investigate some of the abstraction that Calibre’s ebook-device provides, in case that would become a missing component. I currently see that my Kindle 4 gets mounted on my system as a USB mass storage device so I’m under the impression I can sideload books using simple file operations but perhaps this isn’t the case.

I’m sure this all can be done with some careful design and planning. Once again, I haven’t the time to develop the skills necessary to produce such a suite of tools.

A TUI equivalent of EasyTAG

I use an application called EasyTag to manage ID3 tags on my music and podcasts. My mpd client technically has a tag editor built into it, but I don’t find it intuitive at all and prefer to rely on a dedicated tag editor.

I also make use of a CLI application called id3v2 to manage some tags from the terminal but I’ve seen mixed results when from using it. I’m not sure how or why, but sometimes id3v2 doesn’t overwrite the existing tag and simply adds a new one, and my mpd client displays both of these. In these cases the only fix is to use EasyTAG.

I think that the underlying problem is that I’ve never really explored how ID3 tags actually work in practice and perhaps this behaviour is expected. In any case, I often find myself using EasyTAG. The application itself is fine; it’s really a great tag editor; interface is intuitive, it runs quickly, and it’s effective at its job. My only real issue is that it breaks my workflow because it requires a lot of mouse input and this slows me down and is quite jarring to me when about 80% of my regular workflow is keyboard-driven.

So I’d really like a TUI equivalent. To be honest I’d settle for id3v2 behaving how I’d expect and overwriting tags properly, because at least that way I’d be able to script some behaviour or use globbing properly.

A Minetest-style Pokémon clone

I don’t play a lot of video games any more but I sometimes carve out some time to play Minetest. Minetest is a FLOSS game engine which can be used to create Voxel games (i.e. Minecraft-like games). I really love it because I absolutely adored playing Minecraft but I lost my sign in details from 2011 and my PlayStation has been broken for some years now.

Playing Minetest is different experience than just firing up and playing Minecraft because it’s not just a straight-up clone. It’s an entire engine and you can use it to build or play any number of games. Minecraft is a commercial game and you get the experience and features that the game developers want you to have. Minetest is a lot more flexible, and you can either roll your own experience by downloading or writing “mods” — which I’ve taken to mean module rather than modification in this case — or download one of the pre-built “games” to have a more curated experience. Under the hood, Minetest game are simply collections of mods and other resources such as sounds and textures which have been curated or purpose-built to provide a more internally coherent experience.

The end result is much more impressive than I’ve made it sound. There are straight-up Minecraft clones such as “VoxeLibre” and “Mineclonia” which attempt very explicitly to provide a FLOSS equivalent of Minecraft with the goal of feature-parity. There are also games such as “NodeCore” which provide similar experiences to Minecraft but go off in their own direction.

There are also games which use Minetest’s engine to build totally new games with their own loops, design, and features. I’ve not played any of these but the most prominent ones I see discussed are “The Velvet Crystal”, “Exile”, and “Hades Revisited”

I tend to play “Minetest Game”, which is provided as a sort of lightweight game which is very sparse on features. If you ever played Alpha or early Beta builds of Minecraft, it sort of has that feel to it. There are no included mobs, only a few crops, etc. because “Minetest Game” is mostly intended as a platform from which to start modding; either developing your own or throwing together pre-built mods. I’ve done both on my game to create for myself something approaching a Tekkit-like experience in Minetest.

I’d really like to see something similar to Minetest but for Pokémon.

I grew up with 90’s Pokémania and I loved playing Pokémon Silver and Pokémon Sapphire when I was growing up. I never really played any of the games after that which means I have cosy rose-tinted nostalgia glasses for the franchise and don’t have any experience of the more contemporary games. I’m also very ignorant of what may be seen as regressions going from the Generation II games (Gold, Silver, Crystal) to those of Generation III (Ruby, Sapphire, Fire Red, Leaf Green, Emerald). I really love the look and feel of all of these titles, and I find that I can comfortably hold the mechanics and number of Pokémon in these games in my head.

Every few years I will indulge in firing up a GBA Emulator and play through one of the games (usually Pokémon Emerald) until I get bored. I always wish that there was a FLOSS equivalent to Pokémon though, in the same way that Minetest is a FLOSS equivalent to Minecraft.

I should mention that I have seen a few “Pokémon-but-open-source” efforts around the internet in the past. The most memorable of these for me has been “OpMon”, and I check in on its development every so often but it doesn’t yet appear to be in a place where it’s playable and I don’t have any nostalgia for it since I didn’t grow up with it!

I fantasise about something that would let me roll my own Pokémon-like experience — or play a coherent FLOSS Pokémon-like game written by others — in the same way that Minetest allows me to roll my own Minecraft-like experience. I understand that you can’t just build an equivalent because Minetest/Minecraft are fundamentally different styles of game to Pokémon and that affords a flexibility for building a FLOSS engine for the former. Minetest/Minecraft benefit from having open and procedurally generated sandbox worlds where the player is expected to run about making their own fun whereas Pokémon is a narrative RPG adventure with some really cool mechanics that are designed to interact with each other and the setting.

Even Minetest can suffer from a lack of internal coherence. If you’re just throwing mods into a base-game like I do you can end up with “mod soup”. In vanilla and commercial Minecraft all of the systems are designed to interact: crafting leads to exploring, you need to craft things to explore further, and you hunt down specific mobs or beat a boss to gain access to these resources which will help you with the thing you’re building. In my Minetest game which is a collection mods from different authors — other than the aesthetic consequences of having different mod authors with different art styles looking a bit jarring — I end up with a game with lots of different little loops which aren’t tightly integrated. I have mobs installed, but none of them give me drops that I need to gather to achieve another goal. I spend time building things and exploring or engaging in the Technic mod loop of building new and better machines, but there’s very little in the game driving me to those loops since it’s a loose collection of features that I’ve assembled into a cosy time-killer.

This would be even more pronounced in an engine trying to provide a set of Pokémon-like features since it can’t naturally fall back on an open sandbox style world.

Minetest addresses this issue by letting people publish Games, which I’ve noted are simply collections of mods and resources such as textures and sounds under the hood. This feature, however, allows for people to engage in Game Design by curating and bringing components together — or writing their own — to craft a more integrated experience. Playing “Mineclonia” would be a very tightly integrated experience which is provided by assembling reusable and purpose-built components under a common direction. The same is true of “The Velvet Crystal” or “Exile”.

So I think something which provides a platform on which to share and remix common components of Pokémon-like games would be really interesting. Maybe it’d be tough to provide a totally modular experience, but we could at least see the development of modules which can be assembled into cohesive games. Minetest players can download texture packs, mods, sound packs, and entire games. Imagine firing up a platform and downloading a FLOSS Pokémon-like game which has been assembled and built using re-usable maps, packs of creatures and items, character sprites etc. One could even imagine “texture packs” working in this scenario where two people could be playing the exact same game but one person makes theirs looks like an old-school Pokémon Emerald game whereas another uses a totally different art style.

Of all of the things in this article that I know I do not have the skill to create, it’s this. Games programming is very foreign to me and I wouldn’t even know where to start. My few dozen hours of writing Mods for Minetest in Lua will definitely not translate to the engine-level building required to pull this off. Even if this magically appeared, I’d lack the game design skills to create an effective new experience without just defaulting back onto cloning and splicing the Pokémon games I grew up with.

Summary

This post contained a list of software that I wished existed, and that I’d love to write myself if I had the time and skill to do so. If you know of something similar to anything I’ve discussed please feel free to reach out and let me know of it, I’d love to hear about it!