With no introduction, here is my work station, used daily for both personal stuff and for work. Feel free to grab any interesting idea!

Picture of my desk

Hardware:

Desk and chair

The desk is a simple wooden plank, lying on two sawhorses. It’s quite wide, very resistant (I’m able to stand on it without fear), and the wood gives a nice warmth feeling that I love!

My chair is an IKEA Markus, mainly because I had the opportunity to try one at my job for more than a year, and found it satisfying enough to get one at home.

Machines

Towers

My personal machine is a big tower, running the following:

I also have a second tower provided by my job for my daily work.

Laptops

When travelling, I use an old Lenovo Thinkpad x201. It’s a nice old buddy that never let me down, even in desperate situation like bringing the student association’s website back online at 4AM, under the rain because I needed the school’s poor Wifi for local network access!

Outputs

Display

  • Some random old 27" ASUS monitor
  • A second random 24" Samsung monitor provided by my dayjob

Both displays are standing on an Arctic Z2 Pro (Gen 3). It’s a really awesome stand that provides me with both a USB-3 4 ports HUB and a great flexibility for quickly changing my setup, to either work, show something to someone, or play a video-game. In that last case, the 27" display is put in front of me, and the 24" is shifted aside as a support screen with a browser, some chat, and an access to a terminal.

Since I have two towers on two screens, my job provided me with a StarTech SV231HDMIUA KVM switch, which is very handy to quickly jump to my personal machine when the day is over.

Sound

Regarding the sound, I recently acquired a nice steelseries Arctis 3. It’s wired (no battery problem!), very comfortable to wear, even for many hours straight, which is probably the most important criteria for me: if I’m listening to music, that would ask for very high quality headphones, I do it on my amplified home speakers anyway, and if I need to wear my headphones a whole day long, that’s generally for online meetings that have very poor sound quality in the first place. As for gaming, I’m usually more absorbed by the game itself as a whole than by its sound only.
Those headphone have good enough sound in any case, and I just don’t really see the point in investing more money in some very high quality headphones for a barely noticeable difference in my use-cases.

Inputs

Keyboards and mouse

My mouse is a cheap vertical, ergonomic mouse that I’ve been using for years, and I can’t recommend this kind of mouse enough! The accuracy and sensation for me are basically the same as a normal mouse, but the physical comfort when using it really is better.

Still in the ergonomics, I use a BFO-9000 mechanical keyboard from Keebio. Here is a gallery of its making, and you can also find its layout or its firmware source code if you want to build the same.

A second cheap keyboard and a second cheap mouse are also available to ease the use of my VM with device passthrough (more on that in the software part).

Sound and video

While the Arctis 3 comes with a microphone, that has pretty good quality, but still uses the motherboard’s poor sound card, which generates noise even with no microphone plugged in.
Fortunately, I have an old Sony CMU-BR100 that came with an old Sony TV. It works pretty well for the sound, less well for the video (it’s old), and as it’s USB plugged, it provides a numeric sound input that has far less noise than the analog one.
But on the other side, it is sensible to far more ambient noises than the directional microphone of the headphone, so I tend to use one or the other regarding the usage (recording a video, or video conferencing/gaming).

Misc

I also happen to have two YubiKeys 5 NFC for storing GPG keys and using them as second authentication factor. One of them stays at home, as a backup, the other one is kept attached at my belt, and never physically leaves me. Therefore I never have to think about not forgetting the key plugged in a machine.
For my daily workstation, I even have a USB extension that brings a handy USB port right at my side.

Finally I have some various gamepads laying around, like a Nintendo Switch Pro Controller that work very well with Steam, or some generic PDP Xbox 360 controllers that work well with anything.

Oh, and did I mention that I use two homemade joysticks when I need to pilot spaceships?


And we’re done for the hardware part, let’s see about the software!

Software

First of all, so you won’t look for them, here are my dotfiles.

OS

Latest Fedora has been running fine on all my personal machine for about four years, and before that I’ve been switching from time to time between various flavours of Debian-like or Ubuntu-like distributions. I really like the stability that a non rolling-release distribution offers, with the freshness and innovation that Fedora pushes.

My work machine, on its side, runs Debian.

Window manager and compositor

Since I discovered tiling windows management, about ten years ago, with Openbox combined with an old script called pytile that doesn’t seem to exist any more, I’ve always felt uncomfortable when trying back more regular WM. I don’t think they don’t work, but for an efficient daily use, my heart always goes for tiling.

I had been using Awesome for years until the December 2020 holidays, where I definitely made to jump to the Wayland world with Sway. I had a blocker issue for some time, that I solved during those holidays, and I’m now a very happy user, with a bit more Rust in my stack!

My desktop

Shell and environment

Talking about Rust, I’ve recently adopted a lovely starship for my prompt, be it on bash or zsh. It really is wonderful to avoid the $PS1 hell while still having a ton of nice features and a shell that still feels snappy.

About bash and zsh, I have pretty simple configuration for them, but one interesting bit is my chain of source, starting from either .bashrc or .zshrc, continuing on .aliases which is versioned too, and finishing with .aliases.local, that is never included my home’s git repo, and that allows per-machine configuration.
The main features I like with zsh that makes me keep it on my main machines is its ability to autocomplete w/b/c/p/my/i into workspace/blog/content/posts/my-2021-home-workstation/index.md, which I find very convenient, and the nice, lazybones-friendly, selection UI for undecidable choice when spamming <Tab>. But bash remains my shell of choice for every other usages such as servers, VMs, containers, phone, etc…

As stated in the hardware part, I also use Yubikeys, thus my SSH_AUTH_SOCK variable points to the socket exposed by gpg-agent launched with the --enable-ssh-support flag.
That’s quite handy to basically don’t care about how I manage my SSH private keys, since they never really leave my pocket and are easy to use on any decently modern Linux machine.

Terminal emulator

I’ve gone a long way with Terminator but recently adopted Alacritty when switching to sway. I didn’t really used any of Terminator’s features anyway, and the vi mode of Alacritty allows pretty easy copy-paste without even touching the mouse!

Text editor

I’ve used vim and/or neovim for as long as I remember using Linux. It has some nice plugins in my comfortable home setup, but they are just fancy things to speed me up in the daily usage, and I don’t really mind not having them when I’m working on another machine that only provides a vanilla vim.

I’m not particularly involved in the great text editor war and I completely support people using IDE or other fancy graphical editors, but my personal usage of computers puts me in the need of a universal editor that I can find on almost every machine, with or without graphical display, and able to edit any text in a generic manner, be it a configuration file, or some unknown strange code.

Web browser

The situation is about the same as for the text editors: I’ve used Firefox for so much time that I’m completely used to it. Moreover, for the last few years, with the expansion of Chromium-based browsers, it’s also becoming a small contribution towards keeping some diversity in the web world.
I’ve mainly used nightly for the last couple of year, but I now tend not to reinstall it and keep a more stable Firefox since most of the new renderers and engines have landed.

I always have a few plugins: Dark Reader, uBlock Origin, NoScript, Bitwarden, and Shaarli Synchronizer.

Email and chat clients

Like Firefox, Thunderbird has been my main email client for years, and despite having some flaws like its thread-handling or the fact that it’s pretty unusable without a pointing device, it’s still the less worst email client that I’ve found. Rainloop is also not that bad, and I’m pretty happy having it as a backup client for when I’m not at home.

My less and less used IRC client is (was?) irssi, but with the rise of the Matrix protocol, I’ve been using Element and Mirage quite a lot, and I must say that some modern features, like media integration, reactions, or convergence, are more than welcome!

VM and gaming

Maybe the most unexpected part of my setup, but also one that works so well that I wouldn’t trade it for anything else! To play games without having to reboot, but with good performance, and without the random reliability of wine, I use a Windows 10 VM with PCI pass-through for the GPU. virt-manager does a very fine job, even if some parameters required manual XML editing. My keyboard and mouse are also passed-through, so this configuration requires having a second pair of input devices on my desktop if I want to access the host, but I have enough place, and switching physically is very convenient and intuitive.

The other subtlety is the disk management: the VM disk is a 40GB qcow2 image, as expected, but my second, physical, 1TB SATA SSD is again passed-through with VirtIO. It is formatted with Btrfs, which is nowadays probably the best solution to share content between Windows and Linux with the great help of WinBtrfs, in addition to all the positive aspects Btrfs provides in itself. This gives me great IO performance on both systems, and a nice way to have the games ready for play on Windows, or ready for trying to play with wine on Linux (when I’ll have a more suitable GPU)!