Published: July 19, 2020
Note from the future (Dec 2023)
Looking back, I had way too much time in highschool : )
About a year ago, when I still didn’t even know about the existence of Rust (I know, dark times), I was browsing reddit, when I laid my eyes on a comment under a screenshot of an OpenBSD desktop.
The content of that comment isn’t that important, all I remember is that the commenter was saying that OP should post his screenshot on another subreddit: r/unixporn.
I was intrigued by the name, so I decided to take a look at it. My life hasn’t been the same since.
If you have no idea what that sub is about, click on this link, trust me, you will not regret it.
Unixporn, as the name suggests, is a subreddit about the customization, and ricing of *nix operating systems. (Linux, Unix, Bsd, MacOS, and everything Unix-like).
Some of them are awesome, pun intended, some of them will burn your eyes, but are different, so they still get 3k+ upvotes.
Of course, the customization doesn’t stop on the desktop, and sometimes people share entirely new tools that they coded themselves.
After spending all night watching other people’s rices, I decided to nuke my lame Manjaro-KDE setup, and install glorious ArchLinux. I started by installing I3WM, like some normie. After about a month of being an i3 scrub, I decided to switch to bspwm, because it’s based on a binary tree(which makes it more rational then i3, which is based on a normal tree), and because the keybinds are completely handled by another program, sxhkd, which I was already using because it’s waaaay better than the default i3 keybinds.
I also made a post on unixporn myself, but I didn’t get reddit famous.
After looking at these pristine screenshots you might be wondering how fun I am at parties, but don’t worry, keep reading and your desktop will soon look just like mine, so you will be able to answer that question by yourself.
The first thing of is the OS, as you could probably tell by those neofetch screenshots(and by the title), I am using Arch Linux. I chose this distro because it is a rolling release, and it’s extremely lightweight, without being too hard to setup, I am looking at you Gentoo.
Of course this tools will work on any unix-like OS.
I use bspwm, a tiling window manager, which means that I don’t have to drag and resize windows around, they just place themselves in an organized grid. Here is what I mean (sorry for the bad quality, as I said in a previous article having a 21:9 3440x1440 monitor is hard):
I use sxhkd to manage keybinds. It works very well and it’s highly configurable. It was created by the same creator of bspwm, baskerville, and he recommends to use it with bspwm.
I use polybar as my bar, it’s highly configurable and very lightweight. I have a whole article on some of my custom polybar widgets.
This is what my bar looks like right now. I chose to break it in half because it was too big, did I mention that it’s hard to have a big monitor?.
As you may have noticed from the screenshots, my colorschemes are always based on the colors of my wallpaper. I achieved this by using pywal, a tool written in python to generate colorschemes based on a given image. Pywal changes your Xresources, which means that every application that uses Xresources(Like your terminal), gets updated automatically.
In order to change the colorscheme of other applications you have to follow the instructions for the particular application in the pywal wiki.
On top of that people wrote some external tools to convert pywal generated colorschemes to colorschemes that are compatible with apps such as Discord, and Spotify.
In order to turn my desktop into a rice field, I couldn’t stop to generated colorschemes for bspwm, polybar, and every single terminal application, I had to go beyond that.
After spending a couple more days restlessly scrolling through r/unixporn I came across this post. I had finally found the final tools that would make everything on my system color coordinated. And it’s all open source.
I instantly download Betterdiscord and Spicetify, which are needed in order to use custom css for Discord and Spotify. I then used pywal-discord to generate colorschemes for discord, and this spicetify theme for spotify.
The setup was tedious and the tools are not very well documented but I finally figured it out, thus making every application that I use on a daily basis use the same colorscheme.
Here is my Spotify:
And here is my Discord:
As you can see they use the same base colors.
I use termite as my terminal because it has extremely good unicode support and it’s very lightweight. I would really like to switch to alacritty because it’s written in pure rust, but it doesn’t support unicode nearly as well, and as much as I like Rust, functionality comes before pristine code and memory safe applications.
It also supports tabs and a “visual mode”, which are cool features to have.
I use ZSh as my shell, because of the awesome plugins, such as zsh-syntax-highlighting and autosuggestions.
I also have this:
# vi mode
bindkey -v
export KEYTIMEOUT=1
# Use vim keys in tab complete menu:
bindkey -M menuselect 'h' vi-backward-char
bindkey -M menuselect 'k' vi-up-line-or-history
bindkey -M menuselect 'l' vi-forward-char
bindkey -M menuselect 'j' vi-down-line-or-history
bindkey -v '^?' backward-delete-char
In my config, to have vim keybinds in my shell too, such as Shift + i
to go to the start of the line, dd
to delete line, etc.
I also put pfetch
and fortune
in my zsh, so that I get cool graphics every time that I launch a new terminal it looks like this:
As you may have grasped by my obsession to have vim keybinds everywhere that I can, I am a Vim user(actually NeoVim, but they are basically the same thing). Simply because, if you are willing to learn the keybinds, it’s the best text editor, without exceptions. I tried Emacs, but it’s too slow and bloated. When I need to edit some text, I don’t want to wait a minute for my text editor to start up. And if I really need to spin up a full IDE, I’ll just start VSCode
I will be making another article only on my NeoVim setup, because it really revolutionized the way that I code.
Here is what it looks like now:
This are my dotfiles, I don’t update them very often, but when I update them it’s because I found something new that needs to be backed up. Feel free to use them, but don’t try to sell them as yours!