~chrono/archive/
My spectrwm setup

Released: 2021-02-08

I found out about tiling window managers as soon as I started to get into the Linux rabbit hole. I really loved how they allowed the user to create their own environment from scratch, or with a really minimal yet expansible base.

A bit of back story

The first one I tried was Awesome, back when I was using Pop OS, which was my first distro. I used it for months, and I really liked it, but I didn’t really understand it. The config file of this WM is written in Lua, and is extremely customizable, allowing for theming, widgets creation and so much more. But, since I didn’t know the language, I copy-pasted code from the internet until I got something I liked. However, loading times got huge, and I did not know how to troubleshoot it, maybe a missing library or some code that was too resource heavy. The point is, that only the default themes worked fast enough for my liking. Ultimately, I decided to try something else.

Making the change

I had heard about Spectrwm for a while, and tried it a couple of times, but I never managed to customize my bar panel successfully. But after watching Distrotube’s video on Spectrwm, I noticed that I made a pretty dumb mistake, I did not make the bar script an executable (yeah, I know, pretty obvious once you realize).

Customizing my bar

The bar can be configured in different ways, I just use a bash script, I named it baraction.sh and it is located in ~/.config/spectrwm/, I followed Distrotube’s config, and took some ideas from r/unixporn I had to setup some colors inside my .spectrwm.conf file, which looks something like this:

# Bar Settings
bar_enabled         = 1
bar_action          = ~/.config/spectrwm/baraction.sh
bar_action_expand           = 1
bar_border_width            = 1
bar_border[1]               = rgb:18/18/18
bar_border_unfocus[1]       = rgb:18/18/18
bar_color[1]                = rgb:2e/34/40,rgb:eb/cb/8b,rgb:a3/be/8c,rgb:bf/61/6a,rgb:b4/8e/ad,rgb:88/c0/d0,rgb:d0/87/70,rgb:3b/42/52,rgb:4c/56/6a
bar_color_selected[1]       = rgb:88/c0/d0
bar_font_color[1]       = rgb:ec/ef/f4,rgb:2e/34/40
bar_font            = mononoki Nerd Font:pixelsize=15:antialias=true
bar_justify         = right
bar_format          = +|L +@bg=0;+S +L +@bg=0; +@bg=8; +C +@fg=0; +|2R +A +@bg=0;+@fg=0; %a, %b %d %R +<    +<

Scripts with wmctrl and other configurations

Spectrwm is can be controlled with a little program named wmctrl, wich interacts with EWMH compatible X window managers, and I can use it to make some interesting things. For example, Spectrwm does not play nice with polybar, trayer and similar tools. Since I use the default bar, I dont really have a problem with this for the most part. Nonetheless, I made a script that moves my systray to my current workspace, it looks like this:

#!/bin/bash
current_ws="$(wmctrl -d | grep '*' | awk '{print $1}')"
wmctrl -r panel -t $current_ws

I just run it inside of the bar script, so it updates at the same time.

My current setup (constantly evolving)

I really love how spectrwm is so easy to configure in general, as you saw with the little snippet I shared, Spectrwm does not need any specific programming language to understand what is going on, just a bit of text formatting and some help from the manpage, and everything ends up working out. In the end, I have this is my current setup.

spectrwm setup
Typora, alacritty, pcmanfm
spectrwm setup
Firefox, htop, kristall

There is still work to do, but I am really happy with the results, I am stilll playing around with other scripts and things. If you wanna get my current dotfiles, you can do so here.

Day 4 of #100DaystoOffload