Make Linux Works

Originally published at Medium

This is a continuation of my previous writing. I am currently running Manjaro Linux with bspwm. This setup might not be for everyone, but for my own sanity, I need to write my current setup so I can review it later — and hopefully others can learn something from it or give me input, instead of just relying on my dotfiles backup. This setup is mostly keyboard-oriented.

Manjaro Architect

I installed Manjaro Architect because I want (semi) total control of my setup. It was not a walk in the park, but the installation process was clear enough to make sense out of it. I also watched some tutorial videos on YouTube just to be sure.

HiDPI

HiDPI aka. 4K monitor is a challenge to setup outside major desktop environment — KDE, GNOME or XFCE. It takes a couple of failed experiment but thanks to HiDPI entry at ArchWiki, everything is correctly pixel sized.

My current setup is depend on 2 files: .Xresources and .profile

1
2
3
#.Xresources
Xft.dpi: 192
Xcursor.size: 64
1
2
3
4
#.profile
export QT_AUTO_SCREEN_SCALE_FACTOR=1
export GDK_SCALE=2
export GDK_DPI_SCALE=0.5

bspwm

binary space partitioning window manager” was interesting and challenging enough to beat i3 — i3-gaps if on Manjaro, at least for me. Its website is a Github page — not event the Github page. The documentation is sparse, its man page is extensive enough. I really do not recommend reading the manpage directly from man bspmwm, there is bspwm mankier for that.

As I stated previously, bspwm is simple to understand but extensive and challenging enough to make it work the way I want it. Its integration with another tool — sxhkd, for keybinding purpose add into its simplicity — or complexity depends on point of view. The way I put it is, bspwm responsible to manage window components (hence, “window manager”) only and use other tools for everything else. This paradigm helped me a lot in customizing it.

Manjaro bspwm comes with plenty of useful custom scripts, so it add another major point. While they are great, they are also inconsistent with one another and could create confusion.

sxhkd

This is a no-nonsense tool for keybinding. It can do fancy stuff but its basic function is straight forward. Put super + z to call a terminal — bspc exec default-terminal and that’s it. It can also get really fancy:

1
2
3
super + {_,shift +,ctrl +} x
bspc exec {default-terminal, default-editor, default-browser}
# Yes, this is a bad example

Polybar

By default, Manjaro bspwm use limepanel — derivative from lemonpanel, to create status bar. It served its purpose a simple status bar — like i3bar on i3, but also like i3bar, I found it quite limited. I tried bumblebee and loved it except I need want more modules.

Polybar is more heavy on resources — I stated ‘heavy’ here but it was more like breath-filled balloons are ‘heavier’ than helium-filled ballons. It also pywal — wal successor, friendly. It has bspwm module built-in which is nice.

Rofi

Now this one is an amazing tool. It is — as its website stated: “A window switcher, Application launcher and dmenu replacement”, but to say that is actually limiting itself. Let’s just say, if something need to be accessed and it need a panel to do it, I use Rofi. Use it as popup menu, application search, ssh access, file search, WiFi selector or whatever. It is that flexible.

Rofi

mygtkmenui

As much as I want to use Rofi for everything that popup, Manjaro bspwm has this nifty tool that utilize GTKMenu to create quick menu. I use this for right click menu on desktop and window.

mygtkui

pywal

Fancy eye candy, I set pywal to change my background wallpaper differently everytime I login and also create the similar color palette for Polybar and terminal based on the wallpaper image.

wal

asdf

My work (and occasional spare time) involve programming — mostly JavaScript, and often need multiple runtime versions. Tools like nvm or rvm exists for specific runtime while asdf is agnostic and rely on plugin for specific runtime. Currently use it to maintain multiple version of nodejs and ruby.

zsh

My choice of shell. Previously I used bash for everything, I never even thought of using other shell, bash served its purpose: as a shell. However, since this setup is practically a new setup, why not try something new? Hence, new shell: zsh. Add Oh My ZSH’s plugins like git and npm, I have a ‘super’ shell with some nice themes to work on.


These applications are mostly for my convenience. This setup made my workflow easier and hopefully more productive. I also manage my setup — also known as dotfiles in UNIX world, with stow and upload them on Github for backup.