I’ve taken the weekend to really chill out (partly hangover enforced on Saturday) and it’s worked out well, because I’ve been feeling really chill and I’ve also just completely revamped my desktop environment by building and installing niri.

Core to understanding my rationale in all of this is that I’m using my MNT Pocket Reform which has a small screen, and I’m very much geared toward avoiding using a pointing device, especially since I built the Pocket Deck prototype which I’ve totally failed to write about yet:

Pocket Deck housing an MNT Pocket Reform and a Totem BLE keyboard with Gamma keycaps

I’m now using a sizeably different stack that feels like it’s honed in on what it was aiming for:

Caution: This post is probably kind of useless without animations but I could barely get myself to add screenshots so consider yourselves lucky or something

Niri as WM

I feel like this is a more spacious and (to create an awkward turn of phrase) spaceful. That is to say that I can find where I’ve put all of my shit because everything sits relative to everything else. I feel less inclined to break things into workspaces unless I feel I have dedicated workstreams going on, because I’m not going to run out of space. Focus seems easier because you can have less on your screen but edge it with some relevant context that helps you remember why you were in this window in the first place.

Niri as wm showing the partial overflow windows

It all just seems to flow a little better, and it’s somehow keeping me on the keyboard better. This is actually potentially due to the fact that I’m learning a new keyboard layout and having to translate workspace numbers into keypresses is probably just meaning I break focus less, but equally I find myself spending less time clicking for icons due to the mental load of the contortions.

I think the keyboard-based application switching of other platforms just leaves me feeling like the important thing was not where I put a window but which window I selected last, requiring me to remember that which is really not the point. My mind now is keeping a good enough map, and when it doesn’t it just doesn’t take long to find out (especially if I can learn cmd+o) .

Fuzzel as an application launcher

Fuzzel with some color changes

I think I was using wofi before using the shipped Pocket Reform setup, and honestly I wasn’t much of a fan of it. Fuzzel is fast and looks nice with just a couple of colour changes.

It’s more compact which is nice.

Alacritty as terminal

I’d previously been using foot and that was fine, but I’d found with the new WM I really wanted to consider not using a completely integrated multiplexer that meant I was always using a mixed paradigm and often causing friction, but I didn’t want to lose the vim-style copy mode. Well Alacritty supports this well enough for the features I need and allowed me to duplicate the behaviour I’d set up here in tmux, and I happen to be using it on my work Mac too for reasons I can’t really remember so this seemed like a portable solution.

Alacritty in vim mode visually selecting some stuff in /dev

It doesn’t answer the question of persistence (i.e. I’d like to excise it entirely if I can) so I’m looking at shpool right now, I just want to figure out how I can integrate into Alacritty window titles such that I can duplicate terminals in both ssh connection and current directory from a keybinding to the window manager.

I haven’t done that bit yet.

The other thing I apparently still need to do is fix up my keybindings a little because I’ve mapped return to effectively yank text and drop out of copy mode, which means I don’t have a way of completing a text search without dropping out of copy mode! I’m sure I’ll get there.

The same waybar config and widgets

If it ain’t broke etc… I might make this smaller but I really like what MNT shipped. Before I found that I would sometimes click the application icons to switch because my mental map of which window was on which desktop was shot, now I find that I just use it to keep track of how many of which window I have open which typically has me cleaning up and reusing open terminals a lot better than when I was using tmux. This was something of an unexpected side-effect!

Stuff along the way

In the end I also set up a new color scheme for neovim (with a patch to remove it’s background color) and also set up tree-sitter to have syntax highlighting for niri’s .kdl configuration format. I also exclusively used qutebrowser during all of this which meant that my hands were almost exclusively on the keyboard. It lends itself well!

Some syntax highlighting of kdl in nvim

There were a whole bunch of config hacks to niri and alacritty to get them how I like them, but I was really impressed with niri’s live config auto-reloading. There are a couple of implementation quirks that shine through like the choice of syntax, the mandatory splitting of command arguments and the way that special configuration is needed to clean up rendering especially when using transparent windows, but those configuration options exist as minimal implementation safe defaults - you don’t need all these bells and whistles so why put them in the code path for people who don’t need the sugar?

Up next

I’m really into implemenging this shpool integration. I’m not entirely sure I know what it’s going to look like yet… I think I could probably do something using ssh session sockets, fzf and installing shpool on all my remotes (which I can currently do for all my personal stuff).

Essentially the idea is that I should be able to spawn a shell to any of my usual remotes directly from my gui without needing to jump through any of the usual hoops in a terminal first, so e.g. press a keybinding, fuzzy match a host and session name and then jump straight into e.g. my remote weechat session as if it’s native. This is obviously pretty trivial to do with a bit of shell, but the real magic piece I want is to be able to have a keybinding for spawining a new session on the same host as the currently selected windows, which involves fucking around with alacritty window titles.

I do wonder if I can figure out an implementation I can ship as part of my work homedir config though… The issue I face whenever I remove a bunch of the friction from my personal setup is that it the exacerbates the issue of using my work macbook - coercing macOS into doing user interface stuff that it thinks you don’t need is straight up irritating and always leaves unhammered nails that you snag yourself on.