Posted: May 23rd, 2019
All the computer-computers I use (my laptop and desktop) now run Linux. The desktop has Manjaro, i3wm edition. The laptop, Arch. This is a change that's been occuring slowly over the past 8 or so months and I'm very happy with it, having come from Windows 10. This is my experience making the transition, and I would recommend a person who is new to Linux/Unix wanting to make it their daily driver do the same thing. It's fairly gradual, easing into some of the "deeper" corners of Linux slowly.
Windows -> Windows Subsystem for Linux -> Ubuntu -> Kubuntu -> Manjaro KDE -> Manjaro i3 -> Arch
First off, my reasoning for moving to Linux in the first place: I wanted a better dev environment. Don't get me wrong; Windows has the tools available for doing development, but it's often more difficult than doing the same on any given Linux distro. My go-to example is trying to install C compiler. In my second semester of undergrad, a class I took was C programming with some Unix emphasiss. Having a local compiler would be much more convenient than my normal workflow, which was writing code in Notepad++ (because it has syntax highlighting), and then using WinSCP to transfer files to my CS department's grading machine, and then SSHing in with PuTTY to compile with
gcc. I don't remember what went wrong with trying to install MinGW, but I do remember how I felt, futilely struggling with the installer and dependencies and
cmd only to get some arcane error that second-semester me couldn't figure out. Yes, I could have learned to use
vim to do my programming directly on the server, but its somewhat steep learning curve discouraged me frome using it, even with a couple attempts at
vimtutor. I used my Notepad++/WinSCP/PuTTY protocol for the whole semester.
A year later I "learned" Git in an object oriented programming class. I say "learned" with quotes, because there was no requirement beyond using the EGit plugin in Eclipse to push, pull, branch, and merge with GitHub. No cli
git, just EGit, one of my most dearly hated Eclipse plugins (I later became an undergraduate TA for this specific class and expressed my complaints to the professor and some people in the department with not emphasizing the command line, but that's another story). However, all the tutorials for Git were written for cli
git, and around this time I conveniently discovered Windows Subsystem for Linux. I installed WSL Ubuntu, and was amazed at simply how much easier it made programming on Windows. I didn't have to bother with MinGW and weird integrations with Windows, and simple
sudo apt install <package> commands could get me literally any package I wanted. This would have been very helpful a year previous when I was still writing C, but it was still immensely helpful just for using Git. At one point, a few months before learning of WSL, I fiddled with Git for Windows (AKA Git Bash, as far as I know), but came across some weird problems where executing simple commands like
ls would take 10-15 seconds to finish, which is unacceptably slow, so I went back to EGit which was sufficient for the time being.
The summer immediately after I started a software development internship at a local astronomical observatory. I was tasked with writing simple Python services for Raspberry Pis to log some data to various databases. I had no Python experience previously, but WSL made it easy to install a Python interpreter, and paired with my recent discovery of Visual Studio Code, I was unstoppable. I played around with using Ubuntu as my actual operating system instead of Windows + WSL, but it didn't stick for some reason or another.
My next discovery was of /r/UnixPorn (safe for work, it's just cool looking Linux setups). I had long been a fan of ricing my Windows computer with Rainmeter, but saw the flexibility I could have if I switched to using Linux. I installed Linux on my laptop, distrohopping Ubuntu to Xubuntu to Mint before landing on Kubuntu. Kubuntu was a turning point for me; I fell in love with KDE and spent hours fiddling with themes and icon sets and decorators. At some point I switched to Manjaro KDE, which was a relatively small change on the surface but served as a very gentle entry into the Arch world. I can't remember why I decided to switch from Kubuntu to Manjaro, but it was probably so that I could join the "arch btw" bandwagon without actually having to install Arch. Plus, I heard good things about it on Reddit, and it was in first place on DistroWatch.
At this point my laptop ran Manjaro KDE full-time, and I had tried it out on my desktop as well, but experienced poor performance when playing games like CS:GO and Rocket League. There seemed to be input lag at all times, even if framerates were fine, so I stayed on Windows. I spent most of my time on my laptop anyway, since I had gotten into the habit of being out of the house in order to get work done. I got more and more involved in Linux tools, including become slightly more proficient with
vim over time. It was my go-to small editor, when I didn't already have VS Code open. I also learned to love
pacman. I still don't know how
apt does it's thing. Why do I need to
sudo apt update first, why can't it just always get the updated one?
sudo pacman -Syu will upgrade all the packages. Good enough for me. Why should I add extra repositories on
pacman, if it's not already in core, extra, or community, it's probably on AUR.
/r/UnixPorn had always had a fascination with i3wm, and I slowly developed a sort of jealousy over these gorgeous transulecent terminals and perfectly tiled windows. I attempted to try out i3 by changing the window manager within KDE configs, but it only managed to do exactly nothing. I could not for the life of me get KDE to use i3 as the window manager. Another attempt was booting up a Manjaro-i3 VM on my desktop, and spending a few minutes opening and closing windows. What really got the ball rolling, however, was just installing Manjaro-i3 on my laptop, throwing myself into the i3 deep end. Trial by fire, so to speak. After installing it, I sat in a coffeeshop and spent 6 hours non-stop configuring. Most of my tweaks were small, such as rebinding the default
jkl; keys (the same as
hjkl, shifted over by one) to
ijkl, like the
wasd directional keys (this was later changed to match vim bindings, and I rebound
$mod+h for horizontal tiling to
$mod+z for horiZontal). I also installed polybar and use the example bar with minor changes as my statusbar. For colors, I have pywal. Pywal in particular is one of my favorite applications of all time, because I can't seem to stick with the same wallpaper for more than a couple weeks, and changing colorschemes is simply too easy with pywal. Speaking of things that are easy, trying to get unicode glyphs to work properly is not. They work with polybar, but not
urxvt. Who knows. I'll probably switch to
alacritty in the future, anyway.
Digging around i3wm and polybar and GTK configs was how I finally learned
vim. And when things inevitably weren't working the way I wanted, I learned to adopt the Arch Wiki as a sacred religious text. Here I also installed Manjaro-i3 on my desktop (and the performance issues seem to have gone away, apparently a KDE issue), and kept my laptop and desktop in sync with a dotfiles repo on GitHub that is managed by yadm: yet another dotfiles manager. Both my laptop and desktop still push and pull to this repo whenever I make a change to my config. I even have different wallpapers and themes on both laptops, but the way my dotfiles are set up, this doesn't cause any conflicts. Well, it probably does, but not in a way that I notice.
yadm status doesn't show any changes on either computer, and both are up to date, so hopefully not.
In my time using Manjaro, I noticed a bunch of packages installed that I wasn't sure where they came from, or whether I even needed them. At some point I got curious: how minimal could I get? Arch is the obvious stepping stone after Manjaro, since both are Arch based. I installed Arch on my laptop after a fun hour of attempting to connect to my apartment complex's weird wifi situation;
iw would simply refuse to connect, and
NetworkManager was the saving grace. I install things as I need em, but I'm not stingy about it. I'm probably still missing many obvious things. USB drives don't automatically mount, but I don't use them enough to have invested the time to set that up. While I was writing this I realized I have no idea how my laptop is set up to use my discrete GPU and my integrated Intel GPU, but that's something I'll get to when I need to. It's hard to measure whether Arch is any more performant than Manjaro, but my memory usage on idle is now around 370 MB, versus 450 MB on Manjaro. So that must count for something. Also on the bright side, I can still use all of my dotfiles!
I became much, much more proficient with Linux in general from this experience. I wasn't actually even trying to learn anything, I simply had an end goal and there was no other way to reach it than by teaching myself all of this. I feel the path I took was a very gentle introduction into Arch; there was never a huge leap anywhere in the timeline.
Also Java is basically the only thing that sucks to install and use on Arch more than Windows. But it sucks on both. They shOuld stReamline thAt proCess a Little morE.