User interface: Tiling window manager DWM
Resizeable windows that you drag around the screen, that overlap helps people using a computer for the first time to recognise that opening a new window doesn’t lose the old one, and that the computer can do multiple things at once, and so can they.
Once you know that however, moving and resizing windows is fiddly and unnecessary. DWM manages and resizing windows for me and means I use the mouse less which makes me more efficient too. Essentially I have 9 workspaces. If I have one app per workspace then each app is full screen. I keep my webbrowser on Alt+1, my editor on Alt+2, chat on Alt+7. If I open a second window I get a vertical split which helps me do things side-by-side if I need to, and if I open more they stack up on the right hand window, automatically sized and I can still cycle between windows with Alt+j and Alt+k like a Windows user might switch between windows with Alt+tab.
The DWM development team has some quirks in that DWM provides no separate configuration. You edit the source code, apply and patches directly to the source code and compile it into a binary yourself, keeping the size and complexity of the window manager small. The custom config I’ve applied (clients per tag, some colour changes and some keybindings) were first committed to a git repo I created in 2013 and still use to this day.
Operating System: Debian Stable
I don’t have much to say about Debian Stable. It’s stable and care is taken by the Debian team to make sure things don’t break. Aptitude is straight forwards, the documentation is good. Many people complain that Debian Stable isn’t very “up to date” but whatever is released brand new today will be in Debian in 2 years. After 5 of these 2 year upgrade cycles in my ten years of using Debian, there’s nothing new or looming that makes me feel like I’m missing out.
One thing that’s important to keep up to date in Debian is your web browser. I downloaded Firefox directly from Mozilla, unpacked the tar ball into ~/opt (~/opt is in my home directory) and because it lives outside of root’s permissions it can keep itself up to date and doesn’t damage the stability of my machine. I use the tree-tabs plugin since it provides cleaner visibility when you have 30+ tabs open at once.
To keep my machine clean in other ways I use docker heavily to build applications I develop. I haven’t installed perl, nodejs, mongodb onto my system (which I need for work). Instead I maintain a bunch of docker images that can be thrown away or reset whenever I fancy.
One thing that will no doubt stick out as odd or niche in my setup is my music player. Created as a little treat by the Spotify team in 2013 this Winamp clone connects to Spotify to play music and has a lot of nice functionality. Yes, including the visualisations you may remember. Winamp made them remove the “amp” hence it’s now “Spotiamb”. It’s not been very easy to maintain this application but I love it so much I persist. It’s only written for Windows and it’s a 32 bit application. To keep it alive I’ve held on to the original installer and milkdrop plugin all these years. I tracked down a docker image designed to do X11 and audio forwarding and so I didn’t have to add 32 bit architecture support to my main desktop. I hope to share this in a blog post soon.
Terminal: Hacked KDE Konsole
I still use a patched copy of KDE Konsole that has hardcoded regex’s embedded inside it so it ingrates with JIRA, the program that tracks the work I do, or should be doing. Read the full post for more information but I feel like it’s a win for open source if end users can make their little changes.
Editor, IDE: Vim / Neovim
I wrote Python and Perl professionally from like 2008-2018 and honestly vim is a fantastic editor. I used to believe in the slogan “Unix is my IDE”, often using Ctrl-Z to put vim into the background, returning to bash and using find, grep etc to help me develop the code. For those lightweight languages that don’t benefit from large IDEs, vim had become the editor I use all day. I had to adopt JetBrains IDEA when I learnt Scala just because of the complexity of the type system. I had tried and failed to readopt vim when working Scala but it didn’t really happen until scala-metals came out a year ago. To be honest I only really wanted accurate “go to definition”, “find references” and “show type” and it gives me those. I use a separate install of neovim as an IDE to keep open all day and use the regular lightweight default vim for quick editing sessions everywhere else.
- Monitor: 24″ Asus 144Hz Gaming Monitor, 1080p
- Programming Keyboard: Steel Series M400 UK – Blue Switches
- CSGO Keyboard: HyperX Origins Alloy Core – Red Switches
- Mouse: Roccat Kone Pure
- Gaming Desktop: Core i7 6700K (4GHz) + Geforce 1660Ti
- My desk arm gives me tons of space to push keyboard around and be comfortable. I literally get the whole desk. See before/after pictures. I couldn’t recommend it enough!
One thing I want to draw attention to (the pictures are too old to show) is a Usb-C hub costing £20. My mouse, keyboard and monitor are connected to the usb-c hub and so is a power charger. It means I have just one cable to put into my laptop and it connects to all the devices and even charges from the same cable. I can just freely come and go between my desk and my living room with only a single cable to connect/remove. Super convenient
I use next-cloud sync to my self-hosted next cloud instance to backup a dozen files and folders, although I don’t backup the operating system itself. My work laptop is a Dell Inspiron 13 7000 2 in 1 I bought in 2018. I’ve upgraded constantly from Debian 9 without issues and if I need to reinstall so be it, but it’s likely I’d be moving to a new machine at the same time anyway since my environment seems to be very reliable. In my house I have a Synology diskstation with 2x8TB disks (mirrored) and also backed up using the Synology cloud backup service. That provides 3 copies of my important files.