Artificial truth

The more you see, the less you believe.

[archives] [latest] | [homepage] | [atom/rss/twitter]

My writing-code-from-home setup
Thu 11 February 2021 — download

There has been some flexing showcase of desks, both at work, amongst friends, and on the internet, so here is mine, inspired by Stapelberg's one.

Picture of my desktop

Desk setup

Before working from home, I had no desk at all: I was writing code either sitting on the bed or the sofa. But this isn't really a healthy setup for staring at a screen and typing on a keyboard for 8h+ a day. At work, I used to have a standing desk, and I liked to be able to stand for a while while working, so I got one for home as well, using a stickers-covered Ikea's 150x75cm Linnmon plank with an electric frame from Ergo. Amusingly, the desk's connectors are RJ45. Everything is wired up to a power-strip hanging on the right-leg of the desk with magnets, making it easy to turn everything off when not in use.

As for the chair, I have, like everybody else, an Ikea's Markus, except that I removed the arm rests to be able to sit (half) cross-legged on it.

Food and drink

I'm using a gigantic 0.7955658L (aka 28oz in freedom units) white mug, refilled twice a day (morning and afternoon) with tea, usually green gunpowder or lapsang souchong. As for the food, since I like to mindlessly stuff myself with snacks while I'm writing code, I settled for shelled almonds, bought in a 5kg batch: they're ~healthy, and they do not taste that good due to the shells, thus limiting my intake.

Monitor

For non-work things, I'm happy to code for hours in a full-screen terminal on a 12"5 laptop, but when I have to juggle with emails, chats, documentation, bugs, code, terminals, … it doesn't work very well on a small screen, so I went completely overkill and bought a curved 35", the Acer Predator Z35.

I used to have at least two screens, but I realised that I'm happier with a single huge one, with at least 3 windows arranged in columns.

Keyboard

At my previous job, almost everybody was super into mechanical keyboards: blinking LEDS, 60%, matrix layouts, ergo keyboards, ordering custom stuff on massdrop, soldering their own PCB, flashing their own backdoor firmware, and of course endless discussions about what is the best switch type. I let me completely unfazed, until I gave a try to a coworker's Das Keyboard 4 Professional: I saw the light, and immediately bought one with my favourite weird layout: QWERTY UK. As for the switches, I went with Cherry MX brown: tactile feeling without the clickityclick. No blacklight, forcing me to not stay in the dark while using it, which is I consider a feature.

I really like that it comes with two USB-ports on top of the media keys: one for my mouse so that I can plug them both to a computer with a single cable, and the other slot for a Yubikey. Speaking of the media keys, I didn't think that I would use them so much, but being able to change tracks/adjust the volume (with the big volume knob ♥) without having to do something like Fn+F12 is more than convenient.

I'm not using any kind of fancy layers except a compose key on AltGr.

Pointing device

I'm a huge fan of Thinkpads' trackpoints, but unfortunately, it's non-trivial to add one to my keyboard, and while Lenovo is selling keyboards with trackpoints, they're less comfortable my current one, so I have to resort to a mouse: Logitech M500S. The wheel has two scrolling mode: fast or click-to-click, which I really like, as well as previous/next buttons next to the thumb.

I really want to give Logitech's MX Ergo a try, but not enough to overcome my distaste for wireless input devices.

Microphone

My employer was kind enough to let me expense a fancy Yeticaster: the audio quality is really neat, much better than headsets or cheap microphones, and along with Google meet it is able to cancel footsteps, the clicking of my typing, my beloved roomba Dobby, and even the blender in my kitchen when it's working.

Webcam

Like everyone else, I'm using a Logitech Webcam C920 HD Pro: ~cheap-ish, 1080p and plug'n'play on Linux. The only (minor) issue is that the automatic white balance is a bit too enthusiastic, making me look paler than I actually am, especially when I have white windows on my screen.

Headphones

I previously wrote about my quest to find a pair of headphones for both work and travel. Now that there is a pandemic, I don't have to worry about travelling much, and since I'm not a student anymore, I can afford to carry a bigger bag around. So I gave my beloved AKG N60 away to a friend, and bought a Sony WH-1000XM3: better than the Bose QC35 noise-cancellation-wise, and while the bass are a bit more present that what I would like, it's nothing that can't be corrected via software. Apparently people aren't happy about the lack of support for bluetooth multipoint, but since I'm using the chord for everything, I don't really care.

I'm also using an Audioquest Dragonfly Red, following the good advices of a friend, and while the difference is subtle, it's noticeable.

I'm not using any sound system, partly because I prefer headphones, but also because it would be taking too much space on my desk.

Physical paper notebook for sketches

I'm keeping a bunch of notebooks on my desk, albeit I'm not using them a lot, except for sketching diagrams and doing maths. For writing, I really like Pilots G2 Medium tip 07, so much that I'm hoarding a batch of them and pay special attention to the can-I-borrow-your-pen-for-5-minutes-but-instead-it's-a-permanent-transfer-to-my-desk people.

Laptops

I'm riding a Thinkpad x230 since 2012, and I don't plan on getting something newer as long as it's working, and working it does: despite being nine years old and a couple of minor scratches, it still feels snappy and rock solid.

Now that I can't be at my work's workstation anymore, I'm relying on a Thinkpad X1 Carbon V5 to ssh to it, and while this might sound overkill, Google Meet is still somehow managing to eat all the CPU and RAM from time to time.

Desktop

I have a beefy desktop machine on a separate network, used mostly to:

To make the Windows experience less horrible, I'm relying on:

Switching peripherals between home and work computer

Because I only have space for one 35" monitor and peripherals on my desk, they are shared between my work computer and my personal ones: I expensed a Thinkpad USB-C Dock Gen 2 station, so that I just have one USB-C cable to plug my work laptop in and be ready to work. It's also where my rubber duck debugging device is sitting. Moreover, it has the nice side-effect of guaranteeing that both my webcam and microphone are turned off when I cut the power and leave my computer running.

To switch between my machine, I just have to replug my keyboard and headphones, and switch the input on my screen.

Software setup

Linux

I have been using Linux as my primary operating system since at least 2007. I went from Ubuntu to Debian, to Gentoo, to Hardened Gentoo, to ArchLinux, back to Debian, and finally to Xubuntu: it's fast, maintained, not ugly, and is based on well known distributions with security teams.

My next laptop will likely be running Qubes OS, to simplify my heap of sandbox-related bash scripts, but also of course because of North Korea,

Window manager

Screenshot of my wm setup

Previously, I've been using Openbox or Awesome, but I grew lazy, and nowadays I'm perfectly happy with XFWM4 shipped by default in Xubuntu: it's fast, customizable enough, and able to split my screen in two. The only program for which I need more than a half-screen tile is my terminal: Terminator used to be unmaintained at some point, so I switched over to Tilix. I've heard good things about Kitty, but unfortunately it's made by the same person behind calibre, and contains waaaaaaay too many lines of code for its own good, along with an embedded and heavily patched version of glfw, so big nope. An interesting quirk of my setup is that I'm not using window decorations at all, and that my status bar is thin and on the top of my screen. I'm also using 6 virtual desktops, usually organised like this:

  1. Communication: irc/signal/[matrix]/xmpp/…
  2. Web browsing
  3. Emails
  4. Terminal to run code
  5. Code editor
  6. Documentation/debugger

My wallpaper is a (slightly dimmed) picture from Jovan Cormac of a forest in Alsace, used on wikipedia for some articles about the word "Forest".

Editor: Vim

Screenshot of my vim setup

In my social circle, everyone used Vim, so that's what I learnt. I gave a try at other editors ( Emacs, Sublime text/Limetext, Atom, Geany, Kate, Lighttable, notepad++, SciTE, UltraEdit, …) but their vim mode isn't usually complete enough and I really like the modal approach too much to give it up. Moreover, vi is present everywhere, so I'm rarely lost on other machines. I gave a try at vis but it diverges too much from vim, and didn't find kakoune usable yet.

My vimrc is ~300 lines long, and the only plugins I'm using are fzf, gitgutter and vim-hybrid as my colourscheme.

I really like its window/buffers management, the absence of clutter on the screen, its thorough self-documentation, … but most of all, its shortcuts are so ingrained in my muscle-memory that I'm not thinking anymore about what to type to do a particular action/movement.

But of course, everything isn't perfect:

  • vimscript is horrible;
  • some syntax highlighting (like the yaml one) are über-slow, but I hope that neovim moving to Tree-sitter will impove the situation;
  • most operations could be snappier
  • a couple of its keybindings are weird, like g, and g;
  • the code is HUGE, and isn't really fuzzed (yet)

As for the font, nothing fancy: DejaVu Sans Mono.

Shell: bash

I've been using zsh for a dozen years, but recently went back to bash after realising that I didn't understand the crazy contraption that became my zshrc, nor needed any of its fancy features at all: bash is able to have proper autocompletion (including on git), a right-prompt, vcs status in the prompt, typo correction, shared history, … check my bashrc for details.

Web

For personal web usage, I'm using a custom-compiled Firefox with uBlock Origin, https everywhere, multi account container and uMatrix as my main browser, with a couple of features like JIT, WebGL, WASM, … disabled and no javascript by default. Chromium is used as well, also with some features off, only in incognito mode, mostly when websites are broken on Firefox or for a quick-throw-away browsing session. I'm also using the Tor Browser a lot.