summaryrefslogtreecommitdiff
path: root/posts/workflow_9years.md
blob: 9a4c24d8cabacc1acf8ff46458df7134c805c942 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
title: *nix workflow after nearly a decade (raw braindump)
date: 2026-04-13 12:00
---

I was asked a few times from members of my university's cybersecurity
club (I was a former e-board member and it's my main club) over the
past months of how I use a computer since apparently how I use it is
different from how others do it. They also found it fascinating that I
used Linux/*BSD for as long as I did, and I'm probably among very few
others if any at my university that used it for like 9.5 years. It's
organized in what got me into this in the first place, my OS-hopping,
my editor-hopping, what my current workflow is, and my (maybe lack of
meaningful) thought process behind each switch. The TL;DR of that is
I'm like a purist (primarily with the UNIX philosophy) and minimalist
(reducing "bloat" as much as possible) and that guided a lot of my
decisions up till now at the end of college. Any mistakes I made or
any "cringe" I did like being a 4chan `/g/` kid can be blamed on me
being 12/13 at the time. The following is the raw braindump before I
condensed it into point form.

---

I was introduced to Linux via Luke Smith's early video on why use
terminal programs. Then by watching his other videos, I got introduced
to stuff like different kinds of distros (he used Parabola at the time
and Parabola's wiki in 2017 hadn't removed the beginners guide page
unlike Arch wiki, though in hindsight they're basically the same),
tiling window managers (i3, dwm), suckless movement and minimalism
(was the start of me obsessing over purism even to my detriment
sometimes as in spending too much time that I miss deadlines), using
LaTeX for documents and presentations, etc. This was during his early
days back in 2017 and 2018, before he quit being a linguist professor
in Georgia and moved to a cabin in Florida and now complains about les
youths. I didn't watch other Linux-related channels until more
recently with David Wilson's System Crafters for Emacs and Guix (more
on this at the very end, it's a recent change that fundamentally
changed how I do stuff, this will come up a lot).

This put me on the path of both distro-hopping and
WM-hopping. Reminder that I started this journey when I was 12
(now 21) so I had lots of time on my hands. I started with Parabola
and then switched to Arch shortly after for wifi drivers, then setup
Gentoo through reading its handbook to learn about Linux more, and
then later did a full LFS+BLFS twice, then CRUX, Sabotage, KISS,
Alpine, and then switched between them depending on what little thing
annoyed me at the time. Of these, CRUX really made me feel at "home"
with giving me just enough packages for a minimal base and I liked
being a package maintainer for a short while. I found CRUX through
z3bra on the nixers.net forum talking about the differences between it
and Gentoo. Sabotage (the way it did stuff was unique and interesting
to me at the time but only used for one hop) and KISS (what I wished
CRUX was but because it didn't have the drunk tux mascot I didn't use
it much beyond a couple hops) from people on IRC and XMPP. I learned a
lot about system administration and writing my own packages through
distro-hopping. Eventually, the choices converged to Arch (if I wanted
something easy), CRUX (because it made me feel fuzzy inside), Gentoo
(USE flags put me further on the path of purism, not as much need to
maintain so many packages in my overlay unlike CRUX). I later also
found out about the BSDs in my goal of more minimalism and purism. It
being direct descendants of the venerable Bell Labs's Research
UNIX. FreeBSD was what I wished Linux was and I liked its better
documentation and integrated first-class ZFS support. OpenBSD I loved
for its documentation, focus on security above all else, tight-knit
and knowledgeable mature community (unlike with most of Linux),
package management feeling more similar to CRUX, mascot, and being
Canadian (patriotism I guess). Among the OSes I used the longest
without hopping, CRUX, Gentoo, and OpenBSD are the ones I really
used. I usually switched away from CRUX due to power user burnout from
maintaining packages for adding and making them more minimal, same
from Gentoo but to lesser extent due to many other overlays, and from
OpenBSD for Windows virtualization at the time and gaming (though I
did find out more about FOSS engines and did more retro emulation
under OpenBSD). I also had a phase in high school grade 12 with
plan9/9front. Really loved the simplicity and elegance of it. Its
windowing manager rio/8.5 and acme editor also showed me that mice
aren't an inherently bad thing for computer use when designed
properly. I couldn't go further with dailying it because my i219-v and
r8168 driver wasn't working properly even after I tried patching it
with my then meager C skills. Later in college around junior year, I
was peer pressured into NixOS from my functional programming
friends. I liked the idea behind it and it made systemd somewhat
usable, but I disliked the special snowflake DSL (they should have
used something else as a base like Haskell or anything else they took
inspiration from) and it liked pulling in all sorts of transient
dependencies, the exact opposite of what I wanted in Linux since I
started using it years ago. What really put me off more than transient
deps was poor and inconsistent documentation (like pretty much nothing
about flakes: there was a disconnect in documentation of what the
broader community used and what upstream deemed stable). But, it had
advantages like helping organize my system+home configs and dotfiles
all in one place which was very nice. So I briefly tried Guix, but
once again without knowing its language was hard to use and also
trying to mould my existing suckless+vi non-emacs worklow into it was
hard at the time. So I once again switched back and forth between
Arch, CRUX, Gentoo, and NixOS despite their shortcomings I detailed
earlier: my power user burnout or getting bored. Continuing later for
recent switch to Guix+Emacs.

So now about window manager choice. I started with i3 since that's
what Luke Smith used and I was curious about how a keyboard-only
workflow would look like. It's also what the most popular WM on
r/unixporn was. Back in the day when pretty much every post there was
either a close-to-default i3-gaps setup or bspwm instead of sway and
hyprland now. I then switched to bspwm because it was more minimal and
UNIX philosophy like where it split keybind handling into separate
program sxhkd. I also used herbstluftwm, the manual tiling was
nice. Then comes dwm, my main WM of choice for a long time since it
blended minimalism with functionality and also by suckless so was
elegant. However, I still did end up switching to spectrwm since it
looked similar visually but I found it easier to config. According to
my screenshots though, that didn't last for long. I think I only
stayed on it for a few months before switching back to dwm. I did
briefly try out sway to see if Wayland was really all that great, but
ultimately switched back to dwm again, and only really used it when I
felt too lazy to setup Xorg on a new system and not using my
pre-existing configs. Again, continuing later for my recent switch to
Guix+Emacs.

Missing what editor I used is criminal for this kind of topic. Going
back to before Linux, I used Eclipse for Java and Notepad++ for
regular stuff, and then I think I used Atom for a brief period of time
(VS Code wasn't out yet or something in 2016/17). I didn't do much
programming back then, partly because getting dependencies and
compiling anything is a pain if my experience with compiling aseprite
(sprite editor with cmake buildsystem) was anything to go off of. When
I started using Linux, I also started with Vim. Programs like it were
what got me to switch in the first place. Turns out learning your
tools is important (and that comes up a lot). Even back then I didn't
like using much of the pre-made configs, they were bloated and harder
to reason about as a new user since defaults were changed. Also had a
brief stint with Emacs, but not knowing basic Lisp made it hard to
"know" it and it was bloated (common joke is it's an operating system
that lacks a good editor) and also not optimized on Windows (same
config from Linux) where it was just noticeably more sluggish on muh
gamin' laptop when running Win10 instead of like Arch or Gentoo. After
learning Vim enough like how to move easily and basic ex commands, I
of course wanted more minimalism. Had a nice time with vis and nvi,
used them for a while. In my plan9 phase, I used acme briefly and
learned a lot about sam through its manual, which also taught me how
to use ed the standard text editor, which also taught me (basic) regex
which I can't overstate how much better it made editing files in
addition to vi motions.

Finally, my current workflow and choices. It's now all based around
Lisp and Scheme because they make me feel all fuzzy inside when
learning it, just like I did when learning to use Linux in middle
school and how to program in C. The propaganda that got me into using
this now was when I heard about the Lispy Gopher Show when I was
briefly on the Fediverse through Prahou (the author/artist of
unix_surrealism from analog_nowhere). While I did briefly use Emacs in
the past, I did not learn it properly. As in, not knowing Lisp meant I
needed to look a lot of things up instead of just writing them
myself. Technically with the vi-like editors, I also didn't write
scripts in them nor needed to touch their config due to how minimal
they already were by default and that regex+vi-motions going a long
way and there being packages to bridge the remaining gap for
integrations. But with Emacs, the parentheses I guess made it more
daunting or something. This sort of mirrors what I did when I first
got into Linux (well Arch) as I read a lot through its wiki. But
compared to just regular system administration where you run a bunch
of commands or even making your own distro via LFS, I guess properly
learning an editor and its programming language was too much for me at
the time. For new Emacs users, it was also recommended a lot that they
use a pre-made opinionated config like Doom-Emacs or Spacemacs (neovim
has a similar situation) and that really put me off since that felt
like I would be learning instead how those work instead of the editor
itself. Now that I know some functional programming through OCaml and
to some extent Nix from a couple summers ago, learning Lisp and Scheme
was actually much easier. Compared to using a vi-like editor, using
Emacs seemed nicer for working with these kinds of languages since I
can selectively execute parts of a program, simliar to something like
Jupyter notebook without it being so web- and Python-focused and being
an inefficient use of system resources. The main reason why I did not
want to use Emacs previously was that it seemed like a monolithic
kitchen sink of everything. I think it being described as an operating
system within an operating system isn't too much of an inaccurate
description. However, compared to Linux and Xorg proper where I tried
following minimalism and the UNIX philosophy as much as I could
(i.e. small, minimal, self-contained programs for a specific task),
there was not much cohesion between them. At most, they'll have
vi-keybinds and happen to use ncurses but the layout of everything
looks different and configured with different syntaxes (e.g. mutt the
mail client looks different from newsboat the RSS reader and different
from lynx and links2). Meanwhile with Emacs, yes there are multiple
packages and yes I'm not necessarily using POSIX shell scripts for
connecting things together, but Lisp is a more powerful language than
something like shell that depends on other programs (written in other
languages) to do even simple stuff. With Emacs, I now have everything
integrated into a single program, everything properly goes through
text-based buffers, and as a result is even easier to integrate around
because everything is primarily text. Also previously, some popular
packages that people use also seemed like it may have contributed to
Emacs's bloat in my point of view at that time like /needing/
something like ivy or helm. There's better packages available that do
the same thing now, like orderless (for fuzzy searching) combined with
vertico (for the vertical complete menu that ivy gave), and consult
for better autocomplete for various existing Emacs functions, among
other stuff. Now it's my main editor since like last summerish, and I
configured it to be my editor, Scheme programming via Geiser, Lisp via
just Emacs (since for now I'm mainly using Emacs Lisp and not Common
Lisp+SLIME) and using the eval-* functions a lot (for both Lisp and
Scheme), document editing and task planning and habit tracking through
org-mode (some people use Emacs just for org-mode since it's much more
than just a markup language), email through notmuch+mbsync+msmtp
(stayed pretty much the same except I'm using notmuch.el directly
instead of through like mutt or aerc), RSS through elfeed, browsing
primarily through eww (though I have to use qutebrowser for js-heavy
sites like Canvas), document viewing through pdftools and docview
instead of through mupdf (though for some larger PDFs like textbooks,
mupdf is just faster but not needed for most of my PDFs), backgrounded
programs through dtach and its associated emacs management package
instead of tmux, gptel for interacting with my local LLMs running on
my desktop through vllm, and finally as my X window manager via EXWM
instead of dwm or any other WM I used to use in the past. Works well
when playing games too like Elite Dangerous, Emacs doesn't get in the
way.

I know this was very ramble-y. I just braindumped since there's so
much to cover and a lot of stuff to remember over the past 9 years
that I couldn't think in a more organized way without having all of it
written down. I probably missed some stuff, so any questions?

---

In the actual presentation, I missed mentioning my peripherals (a
Ferris Sweep with Kailh Choc Ambient Nocturnal switches for laptop,
Corne with Zealios Zilent v2 switches for my desktop, and a Ploopy
Adept as my mouse for both) as well since that's also different from
how most people use it, as well as my current project "X380", a modded
stripped-down X280 (I'll make a post when it's more finalized after
fixing my 3D printer).