Pushing Minimalism
Today, I will share the current state of the computer I'm using. There's good things and also bad things, as well as ideas to improve on the bad things. Let's dive in!
Without any surprise, I'm still using linux. You cannot have a minimal setup when you use WindOS (windows) or Openly Sarcasm eXclusive. I'm interested in BSD and other kernels, but I find that the ones I'm aware of (BSD and redox) are trying to be both kernels and distributions at the same time. I don't want a rendering server or a full desktop packaged with the kernel. I don't want packages to be centralized in the same repository as the kernel. There might be a kernel I'm not aware of that corresponds more to what I'm looking for. If you think there is, feel free to email me at jojolepro [at] jojolepro [dot] com. Through the rest of this post, you'll see that while my use cases are limited in depth, there's a lot of them.
I'm using wyverkiss, a fork of kiss linux. My primary metric for complexity is the total number of lines of code needed to run my system. I try to minimize the number of lines of code while still being able to do everything I need to do. As such, wyverkiss made a lot of sense: - I can compile the kernel linux with just the things I need. - There's no GCC or other gnu utilities, which tend to be absolutely massive. - The package manager is simple but also good enough for everything I need. - Creating packages is pretty fast and only involves plain text files. - Modifying packages is even faster. - I don't use that many programs, so it would be possible for me to maintain most of the packages myself.
Display Server
I don't have one. I'm running everything in the linux console.
Disk Encryption
That's one of my main requirements: my data partition has to be encrypted. I do not care about the root partition being unencrypted. For this, I use cryptsetup. This is not a minimal program by any means, especially since it requires lvm2, but I'm not aware of another way.
I use aerc-git. It does the job fine.
I'm using tmux. It's a must have for a terminal-only system. Technically it would be feasible to use the terminal without and use C-z, fg and bg, but that sounds very inconvenient.
Gemini Browser
I use amfora to browse gemini websites. I like the colors and how easy it is to use.
I have asciinema installed, but I never actually used it outside of quick tests.
Core Utils
Busybox is installed by default, has everything I need and is reasonnable with the number of lines of code. I might try suckless sbase one day, but I'm afraid most package build scripts or the init scripts will break due to missing options.
Music Player
I use cmus. It has almost no dependencies and works just fine.
Boot Manager
Simply using efibootmgr to edit the efi boot table directly.
I use fzf in some scripts, it's convenient.
I don't currently have one. In my previous kiss linux install, I used fbi for images and fbv for pdfs. However, I'm more strict with this installation on what dependencies I want to avoid. For images, I'm considering the option of converting my .png and .jpg into farbfeld files (.ff), compressing them with gzip and writing a program to view .ff files in the framebuffer. For pdfs, I don't have a good solution yet. One solution would be to convert pdfs into .ff on my data server. Another would be to install fbv and the ton of dependencies required to render pdfs on the framebuffer, then just look at pdfs. Finally, I could convert pdfs into a less complex format, like postscript, to maintain text quality. None of those solutions are ideal and it's not clear which one is best. I guess I really like overthinking things :)
I'm currently using mplayer. As far as I know, it's the only video players supporting playing .mp4 into the framebuffer and outputting sound directly to alsa without having a billion dependencies. It has the ffmpeg code checked out into the repository, however.
Build System
GNU make is installed. I would have used the provided bsd make if I could, but lots of packages break because bsd and gnu use two different and incompatible syntax for if statements. There's also rust's build system: cargo. There's also zig's build system. No cmake, no autogen, no ninja.
I use the provided /bin/sh for now.
Text Editor
I used to use neovim. Now I'm using kakoune. It has less dependencies and does the job fine for most things. I have not yet configured it to use language servers or to display programming errors inline; That's something I plan on doing soon. Most of the daily editing I do is in plain text files, however.
File Management
I use git. I did try fossil for a while but didn't really like the approach of having everything bundled into one big program. As for more minimal programs doing the same thing as git, I don't currently see a point in moving to those. I'll need git anyway for the package manager and to interact with the rest of the world.
Configurations Management
All my configurations are in a folder under ~/share/config/ In there, there's a setup.sh script which will symlink the config files to their proper location.
Keyboard Layout
I use a slightly modified version of kbd to change my keyboard layout. Recently, I have noticed that there's a program doing something similar in busybox's repository. I'll have to look at that.
Wyverkiss is based on clang, which is based on LLVM, so that's installed by default. It is a big dependency, but I require it because my preferred programming languages are rust and zig, both depending on LLVM. Zig also depends on clang to compile C code. Finally, a C compiler is necessary to compile most programs. Even if all programs were written in something else (self hosted zig for example), the linux kernel would still need to be compiled using C.
Man Pages
I use mandoc. I haven't really looked into man page viewers or alternatives. Maybe it would be nice to convert man pages to plain text eventually and use fzf (or just find, grep or rg) to find what you need. I used to write documents using groff, but nowadays I write everything in plain text files. Technically groff isn't installed on this system, but I assume it is packaged inside of mandoc. Also, I have scdoc (man page generator) installed as a build dependency of aerc. It is very small, but I would still like to remove it since there's only one program using it.
Rust is massive. It requires LLVM and sqlite and python and pkgconf and xz and zlib and openssl and curl and cmake. Some of these can be uninstalled after building rust (cmake for example), but that's still a bit annoying to have to install build dependencies and then remove them.
Video Downloader
I use youtube-dl to download videos I find on my phone. I have been considering returning to rss feeds to find youtube videos, but more and more I'm instead watching videos that I downloaded in batches on my file server using torrents instead. For anime, I currently use ani-cli to download videos that I found using my phone.
Web Browser
I don't have one installed. Terminal web browsers are way too limited. Even thing like browsh and framebuffer browser supporting javascript can't run the websites I need to use (like accessing my bank account). I just use my phone as my web browser. It's far from ideal and I really wish I didn't have to. I do have some plans to download the data sources I care about the most to my file server and doing searches through that instead. For example, getting all stackoverflow questions and answers. Wikipedia in plain text. Arch, gentoo, LFS and other wikis. Maybe even linux mailing lists for when I have issues with the linux kernel. I have experience in hoarding websites, but not so much in keeping them up to date and searchable. That will be something I spend a lot of time improving over the years.
Counting Lines of Code
I use tokei. I'm aware of other programs like cloc and the simple wc -l, but I like tokei. Also it's written in rust and I already have it installed.
Managing Tasks
I use a single text file, one task per line, organized by project.
I use calcurse, but right now it segfaults (probably because I'm using bsd-curses instead of ncurses.) I'll fix it, eventually.
I use bc right now, but I really want to reinstall libqalculate. It's an awesome calculator and I miss it.
Right now I only have emails. I'm considering the option of installing an IRC client. I'm also installing ejabberd on a server and considering installing profanity. Whether I want to keep my instant messaging communications located only on my phone or if I want to bring them back to the desktop is an open question for now. On my phone I use discord. I'm currently testing xmpp clients and servers. I highly doubt I'll be able to make the people I care about move to that, however.
File Browser
I use the core utils commands ls, cd, mv, cp, rm and sometimes rsync. Find is also useful from time to time. I'm not sure I would gain much by using a terminal file browser. Anyway, I like having the exact same way of manipulating files between my desktop and the three servers I'm running.
Video Editing
I don't currently edit videos. I like watching videos and I used to create some, but I don't really need to do that at all currently. If I was playing games, I could be interested in making videos, but I don't really do that anymore. If I wanted to give information, I would do it by text. In some very specific contexts, I might add a picture if it really helps with comprehension.
Audio Editing/DAW
I do still want to create music. I'm not aware of any decent digital audio workstation that can run in a terminal however. I'm also not familiar enough with alsa to know if I would need to install a sound server like jack or pipewire or if I could do something without them. I'm also not sure if I would prefer a DAW or using individual programs to manipulate individual audio files, before combining them into the final file at the end. DAWs are hard to customize and automate. Using individual programs could make it very hard to do things like live monitoring your changes. In any case, I think that your ears (and a good enough audio output device) should be enough to evaluate your music without the need for programs like graphical equalizers and spectrometers. There's still a lot of open questions here. I'm interested in knowing your thoughts! Shoot me an email. :)
Languages are big contributors to lines of code. The following languages are installed on my system: - shell - C - C++ - go - rust - zig - python - groff (mandoc and manpages) - flex and byacc, if you want to count those. - make
What I Like
There's no distractions in this setup. No muscle memory to open a browser and go on youtube. No notifications of any kind. Almost no games (I'll talk about this more in a following post.) This makes me very bored when I'm at my computer for long periods of time. Good. That was exactly the goal when I setup the system this way. I started spending more time doing other things than being at my computer. When I am, I tend to be more productive (programming, writing the blog, looking at my task list) or to relax better (looking at anime without being distracted by messages as much). I also like that I spend less time looking at instant messages that I receive. I spend a significant amount of time doing that and replying. However, when I'm at my computer and since my messages are on my phone, I tend to forget to check my phone. That's a good thing, since I ultimately spend less time going back and forth between some task and talking to someone. Also, my phone battery lasts until the end of the day only if I don't look at it too much. If I use it too much, I'm forced to charge it and stop using it (I charge it in another room on purpose.) As for the computer itself, I really enjoy knowing how much of my system works. It's incredibly stable, boots in a second (if you don't count the bios firmware which takes ~5 seconds) and shuts down really fast. I only have to write a single password (the disk encryption key) and then I'm dropped directly into a shell with tmux running, logged in into my account without having to type my password. Since everything runs in the terminal, I can automate almost anything by writing quick shell scripts or aliases. I also spend a lot less time gaming (which is my primary coping mechanism for stress) and instead have to sit with my feelings until I process them. I can still distract myself with my computer in other ways that are less about coping and more about enjoying.
Using my phone to talk to people is annoying. I keep typoing when using the small keyboard. Using my phone to browse the internet. Earlier in this post, I proposed ways to reduce that, but it is very clear that reducing browsing usage by more than 75% would be hard and by 100% would be impossible in the modern world while continuing to do everything I want to be doing. Another limitation is that installing programs is hard. Most of the time, I have to package them myself. Often, they end up having dependencies they don't mention anywhere but are actually hard requirements and that I don't want on my system. There's also issues caused by wyverkiss changes. For example, cmus would segfault because I'm using netbsd-curses instead of ncurses and cmus was not always initializing curses (which apparently isn't an issue when using ncurses.) I suspect that my current issues running calcurse and C:DDA are caused by something similar, since I was able to run both of those on a regular kiss linux installation. Finally, I have an issue not related to the actual setup but with myself. The short story is that I'm always conflicted between doing big and complex projects and doing very small, manageable and perfect projects. I cannot do very complex things while on a minimal setup (raytracing 3d universe simulation anyone?) At the same time, I know the way my motivation works wouldn't allow me to actually do such a project. In the end, when I feel like doing a really big project, I forge myself to stay on the current setup until the feeling passes. I'll talk more about that in another post.
I really like this setup. I'm getting criticism and incomprehension often when I talk about it, but I'm convinced enough that it's better for me to be doing this than to continue doing what I was. If you have improvement ideas or comments, feel free to write me an email. jojolepro [at] jojolepro [dot] com Until then, baiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii!