Arch Linux Ricing
Tags: wj3ng, octograd2020, ricing, linux
Published: 2020-05-20 11:20:39

[Comment]: # (All of this is placeholder text. Use this format or any other format of your choosing to best describe your project and experience.)

[Note]: # (If you used the GitHub Student Developer Pack on your project, add the "#githubsdp" tag above. We’d also love to know which services you used and how you used it!)

## The Short Story
I designed my own desktop interface in Arch Linux. It looked cool. Then my laptop's Wifi adapter broke and then the monitor broke too. That wasn't so cool.

## The Long Story
I've always been obsessed with user interfaces and customization. Since I was a kid, I would spend a lot of time playing with settings, tweaking the window colors in Windows XP, changing my Google homepage background image, making custom heads-up displays in Team Fortress 2, etc. One of my nerdier fantasies was to be able to customize my computer user interface however I want, and this fantasy was realized when during the summer before tenth grade I learned about Arch Linux and the world of ricing. Arch Linux is a Linux distro that focuses on simplicity, which means it is pretty much empty after you install it (which you have to do manually, partitioning your drives and downloading core files through a command-line interface) and you have to install everything on your own, including a GUI and a sound server. Because you had to do everything by yourself, this also meant you got to design your system however you liked and install whichever programs you liked, which brings us to ricing, which is to make your interface as visually pleasing as possible.

I ended up spending more than a dozen months converting my freshly reset laptop from a black terminal to a wonderful, clean, and ａｅｓｔｈｅｔｉｃ interface. Plus, by using window managers such as i3, I was able to design my own workflow and made it so that I could navigate through my system with only a keyboard and no mouse. Every day that I worked on this ricing project, I found more cool programs from the Arch Wiki, learned new Bash scripting skills, and rebooted my laptop multiple times to change my settings. 

My journey of ricing was helped by the online community, including Youtubers such as Luke Smith, and most importantly, the subreddit r/unixp*rn (completely appropriate despite the name). On this subreddit, people shared screenshots or videos of their riced up Unix systems, showing off their beautiful designs or clever scripts. The best part was that many of them included their configurations, or dotfiles, in the comments, so I could easily learn from and copy their ideas. I was planning on making my own post, but before I felt like my system was ready to be shared with the world, my laptop's Wifi adapter broke, which made it kind of hard to communicate with the outside world on that laptop. A few weeks later the monitor also stopped working, and with other stuff coming up on my schedule, I had to take a break from ricing. Since my screenshots are stored on a laptop that I can't navigate because of a broken screen, the only footage of my system in action is from some phone recordings of questionable quality.

## "Screenshots"
The only "screenshot" I can easily access now is this poorly filmed video. It doesn't show any workflow either, but I guess the matrix screensaver and the audio visualizer look pretty cool.

{% youtube ZvjcPSDgC5c %}

## Link to Code
These are my dotfiles for most of the applications you can customize. They're slightly unorganized because I didn't really know how to manage dotfiles with git.
{% github https://github.com/wj3ng/dotfiles %}

[Note]: # (Our markdown editor supports pretty embeds. If you're sharing a GitHub repo, try this syntax: `{% github https://github.com/wj3ng/dotfiles %}`)

## How I built it
Instead of telling lengthy stories of how I tweaked my Spotify mini-player to have a pause symbol show up when you paused the music, I'm just gonna list out some programs that I chose to use and my experiences with them.

- **`i3-gaps`** for my windows manager: To be fair, the only other option I tried was AwesomeWM, which was too uncustomizable for my liking. `i3` did the job, as it's one of the most well supported and customizable windows managers. The `i3-gaps` fork allowed windows to have gaps between them because it looks good, but I also made a script that switched between gaps and no gaps if I felt like the gaps were taking up too much space.
- **`zsh`** for my shell: zsh has more cool features and stuff than bash, so I just went with it. The switch was pretty easy because everything written in bash works in zsh.
- **`vim`** for my text editor/IDE: My love for VIM is probably as big as my love for Arch Linux and ricing itself, so I'll try to keep it short. It allows for ultra-fast editing and navigation and you don't even have to move your hand to the arrow keys to move. Simply exit insert mode back to normal mode and use `h`, `j`, `k`, and `l` as arrow keys. The lightning fast navigation is just the beginning of VIM's magic, but you could get the rest from other VIM lovers on the Internet. VIM is also very customizable, and you bet I riced the heck out of mine (check out `.vimrc` in my repo).
- **`termite`** for my terminal emulator: I had some problems showing images in my terminal emulator (I know, not something you'd expect a terminal emulator to do but it makes it look cool), and when I solved that problem I would get other problems with text colors, so in the end, I settled with Termite, which had less of the problems over `urxvt` or `xterm`. I never fully fixed these issues though.
- **`polybar`** for my status bar: Highly customizable. I didn't have the need to try out anything else, so I can't say too much about it compared to other status bars.
- **`rofi`** for my window switcher: Basically a pop-up window that runs scripts that can do anything, including switching between windows or act as a power menu. Pretty nice, and of course, customizable.
- **`dunst`** for my notification daemon: This is the thing that pops up when I get a message on Messenger or the currently playing song changes. I didn't get to customize it enough before my laptop broke down.

## Reflection
There were many flaws and unfinished designs in my system. There were many small bugs with my scripts and the theming wasn't always consistent. There were many things that I never got to doing, including creating an actual power menu (I would use commands to do this), and setting up a display manager, a.k.a. the login screen (I also used commands to do this). These were some of the reasons I hesitated on making a public post with my screenshots.

Despite this, I learned a whole lot throughout this ricing process. Before all this, I was a fairly elementary Linux user, sticking to the default stuff they gave me on Ubuntu. After playing with the operating system so much, I became much more familiar with Linux, and also just how a computer and operating system works in general. Besides that, I also learned a lot about graphic design and interface design. 

I plan on starting a new ricing project on a new computer very soon, which will be partially based on my old project. As I won't be completely clueless this time, I will fix many problems I had in my old build and also be much more organized. I'll be sure to share my work when I think it's ready, so stay tuned!

[Final Note]: # (CONGRATULATIONS!!! You are amazing!)