Does anyone here have any ideas about how computer interfaces should work? Or, in other words what sort of features would you want in an ‘ideal’ (for you) computer system?
I’ve been thinking about this for awhile, and I have some wishes:
- A scrolling/tiling window manager like Niri.
- A rich / hypertext format that’s more powerful than markup but less powerful than HTML + CSS.
- A terminal that’s capable of outputting and rendering the above format: tables, collapsible sections, links, etc.
- Some sort of unified UI that combines a file explorer, document viewer / editor, and terminal.
- A terminal / scripting language that’s more discoverable than what we have. Perhaps by using a noun verb format instead of a verb noun format. Combine that with a ZSH-like (or IDE-like) autocomplete for command options, but add a small text description to each option and allow the user to do an incremental search of this text (with synonyms) by pressing a hotkey. These two things make interacting with files a little bit like right clicking (by listing valid operations for a given type of object) and a little like doing a text search on a settings menu, respectively. This could be accomplished without giving up the power of linguistic composition.
- A terminal / scripting language that’s better than bash (not a high bar), straightforward and simple, and somewhat fast to evaluate (as far as interpreted languages can be fast), but not super complicated under the hood like Python is.
- A series of linked wiki articles written in the above mentioned markup language, stored locally, that tells you how the OS works and how to use it. Instead of having to go to an external website to find out the steps your init process takes to start your computer, you read a plain english document describing them, with hyperlinks to the corresponding articles for the processes it interacts with. Like man pages but answers “how is it configured, and why that way”, rather than just “how do I configure it”. Some of these pages, or portions of them, might need to be dynamically generated depending on what packages you have installed. The pages should be organized such that the top level (or home page) give the most generalized and basic descriptions, with links to FAQs and how-tos, and the deeper you drill down the more specific and technical the articles get.
- A NixOS-like declarative configuration system that uses config files written in the above mentioned markup language. The various config files should link to the corresponding wiki articles and vice versa.
- An indexed full text search for the above mentioned documents (and any user generated documents).
- A BeOs-like database file system, with tags and attributes.
- File system level snapshots integrated into version control and the declarative configuration system mentioned earlier.
- A plan9-like ‘everything is a file’ philosophy, as well as plan9’s hierarchical namespaces.
- Containerized applications and permissions using the above mentioned namespaces.
A lot of the above already exists, but only in pieces instead of in a fully unified system. Or else in a unified system that does some of these things, but not all of them.
That was a good comment, thanks.
I’ll try to clarify a little bit more about what I was talking about and reply to some stuff.
example.mp4 ffmpeg
, instead offfmpeg example.mp4
. In the second case you need to know thatffmpeg
exists to begin trying to manipulate the video file, in the first case you could hypothetically typeexample.mp4 [tab]
then get a list of programs that are registered as being able to handle mp4 files, allowing you to discover ffmpeg’s existence. This discoverability is one of the big reasons that graphical interfaces are perceived as more user friendly than a terminal. That’s what I mean when I say using anoun verb
syntax would be more similar to right click (specifically right click --> open with). Of course you’d still want the ability to force a specific program to try to ingest a type of file its not associated with, but you can do that with [right click] --> [open with] too.cat /dev/screen | topng > screenshot.png
. Even other devices on the network are represented as (virtual) files in a folder, and everything is accomplished using file operations.