Tools
Philosophy on tools
Abraham Lincoln reportedly said that, given eight hours to chop down a tree, he'd spend six sharpening his axe.
If something is worth doing even once, it's worth building a tool to do it.
It's often said that a poor craftsman blames his tools. I like this phrase, but I think it's often misunderstood. Good craftsmen don't blame their tools not because they don't need good tools, but because they spend time to build or choose the right tools for the job. A good craftsman knows the worth of a good tool.
My tools
I have built an entire world around my own tools. They might seem quite alien to many, but for me, they are the best tools for the job.
Operating system: Gentoo Linux
My operating system of choice is Gentoo Linux.
Why do I use Gentoo Linux?
Most operating systems and distributions use pre-compiled
binaries as the primitive unit of
installable package. For example, if you want to install firefox
, your
operating system would have you download a bunch of pre-compiled object code
,
wrapped in a script that would move the executables and files to the right
locations. This is the typical flow to "install software" on your computer.
Gentoo, unlike most operating systems, uses a different primitive. Instead of downloading a pre-compiled binary, you actually download the source code. Then, the installation process actually compiles that source code into the build artifacts which are placed in the right locations.
For me, this is the most important reason as for why I've ultimately landed on Gentoo as my operating system of choice: Because it is a source-based distribution.
Why do I care if it is source-based?
It makes it extremely easy for me to inspect what my software is doing, and to make changes to it, and recompile, on the fly. In short, it is the ideal setup for a hacker and open-source enthusiast, because the ability to modify software that is running on my computer is inherently baked into the very DNA of the operating system itself! It is not a workaround or weird hack for me to make a change to Firefox and re-compile it. It is the standard installation flow. This makes the edit-compile-test loop for open-source software highly optimized for me, which makes it more likely that I will upstream fixes.
By the way, this also applies to the kernel itself, and not just user-land software. Gentoo installs the kernel from source as well, which makes such edits ~trivially accomplish-able.
Windowing system: i3
I use i3 as my windowing system. The short answer as to why is: I am a proponent of a mouse-less existence insofar as most applications are concerned.
A mouse is an interface best suited for continuous-shaped requirements, e.g. aiming a pointer in games, drawing, and other inherently 2-dimensional arbitrary precision input modalities.
Textual interfaces (e.g. code), reading, navigating filesystems, etc. is inherently discrete (folders have files, files have words, words have letters). For discrete applications such as these, I (and many others) prefer mouse-less modes of interaction. A mouse can point at many different precise points for a given character in a word, but it's still the same logical place.
Almost all of my modalities of interacting with my computer are inherently discrete, therefore, I optimize all of my tools to be a keyboard-only interaction modality.
i3wm (and tiling windowing managers in general) are the natural conclusion to the question, "How do we build a window manager in a mouseless world, optimized for keyboard interactions?"
As to why it's better:
- It's faster than mucking around with a mouse.
- I have a consistent layout and pattern of windows that I build expertise and muscle memory with.
- This window manager is simple, and written with performance in mind: In short, the performance is staggeringly better than floating-point business.
- Re-arranging windows side-by-side is one keystroke, and trivially arranged in an optimal layout.
Editor: Emacs
I use emacs, but with vim keybindings. Don't ask, it's a long story. I'm at home with either, but I prefer emacs for its extensibility and vim for its UX. I solved for this by extending emacs to have the same UX as vim, where it suited me. I don't like elisp, and emacs isn't as performant as I think it could be. That being said, I don't know of anything better.
Org-mode has been quite good to me, too.
Language: Rust
These days, I try to write most of my personal things in rust, because it aligns with my values, and I believe that it is one of the most important languages of this century. Its high caliber performance, reliability, safety, and API are what won me over.
Everything else
I do everything else in my web browser or in my terminal of choice. (These days, it's alacritty, but my terminal choices seem to be much less sticky than OS/editor, and often times I'm using one of the shells within emacs directly.)