published on in Linux Development Desktop Work Geekyness

I Use This

This post is in the spirit of usesthis.com, because after working at Blizzard for a while I wanted to share the setup I’ve currently settled on and why.

What I Do

I’m a Site Reliability Engineer, and my day to day workload consists of:

  • System troubleshooting (k8s, containers, vm’s, baremetal, etc.)
  • YAML
  • Software development (golang mostly)
  • Communicate with people

I help people solve problems, fix things, and occasionally I get to dive into a old system and figure out what is what.

I also write tools to fill in gaps. Mostly in go, but I’ll write anything to make my job easier or life better. From a full inventory API or a simple tool to scan certificates, I like to find a gap in automation and “peanut butter” over it with go code.

Hardware

Both New Relic and Blizzard either supported OSX or Windows (and that was VERY limited at New Relic)

I’ve come to accept a macbook pro as a tool provided to do my work. After about 7 years of using one, I still REALLY DISLIKE OSX. From its window management, to its input latency, and especially its schizophrenic way of managing software. Don’t even get me started on the battery. It is the only series of laptops I have owned where it can be plugged in and still drain the battery.

There are a few nice qualities though:

  • The display. I can no longer go back to 1080p displays for productivity. I need 2K or higher, and I don’t consider an external display part of that solution (its only additive)
  • Keyboard. I’ve come to like the keyboard for a laptop. I have another personal laptop with mechanical keys, but they rubbery caps themselves don’t feel great.
  • Laptop chassis is solid.

I would have loved the option to use a Lenovo Thinkpad X1, as they cover both display and keyboard qualms I have.

That is not in the cards, but most importantly not in the cards is a Linux/BSD desktop.

Operating System(s)

What I am able to do, is run a VM, which basically turns my OSX desktop into a nice hypervisor.

In previous jobs/roles/work places, I have ran FreeBSD as a desktop. I would still prefer that, since FreeBSD is an incredibly lightweight OS.

However, I need containerd or some equivalent service. As much as I love and use jails at home, thats not what my work environment focuses on. So, I’m sticking with Ubuntu because I’m unsure of Fedora’s future and I can run what I need.

Window Manager

Traditionally, I have used XFCE4 or some lightweight Gnome desktop. I don’t like eye candy, I want a UI that gives me as much screen real estate as possible.

I’ve been using Xmonad consistently, and I have to say, I love it.

A tiling window manager has been life changing. I’m no longer furiously alt-tab’ing between terminal, browsers, file managers, applications. Each workspace typically has a browser on the left and a terminal in the right. Between those two, I use tabs (browser) and tmux (terminal) and keep the context of what I’m working isolated to that particular workspace. I’ve im working on a ticket, I keep that ticket open and its relevant information in that workspace. No bleeding over.

Software

Kitty / Alacritty

I like a fast and simple terminal. gnome-terminal isn’t too bad, but I have really gotten used to the speed and low latency of kitty and alacritty.

iterm2 is not my preference, so I don’t even use that on OSX. I don’t like the touchbar input reader and I don’t like its latency. It is very bloated for my tastes.

I try to use st, but I can’t get it to play nice with tmux. I applaud their mission though.

Vim/Neovim

I will never not use vi/vim/neovim. It is far too versatile, ubiquitous, fast and I’ve learned just enough to be productive with it. 100% of this blog is written in vim.

Goland

As much as I love vim, my primary tool for Go development is in Goland. Jetbrains makes incredible tools, and even though I dabble in vscode occasionally I can’t get to far away from Goland.

I hit tab, and the code practically writes itself.

Firefox

For my personal browser, I use Firefox. I like containers, and the slim amount of extensions I use are:

  • 1password
  • Auto Tab Discard (more on that later)
  • Privacy Badger
  • uBlock Origin
  • Multi-account containers

I keep my work and personal browsers completely separate.

Chrome

For work, I use Chrome with the following extensions:

  • Lastpass
  • The Marvelous Suspender
  • uBlock Origin
  • Wide Github

Podman

I don’t use docker anymore, but podman. I do have a simple alias:

alias docker=podman

Super complex, I know, I sometimes keep myself awake at night from my sheer genius. I proactivly stopped using docker-ce, especially on a macbook, so all of my container buisness is done in my linux vm.

Other Utilities

  • ZSH and on-my-zsh
  • k9s
  • tgswitch / tfswitch
  • aws-vault

Tips for using a VM

I’m using VMWare Fusion. I have 16GB or memory and I’m giving my Linux VM ~9GB

Let me make this abundantly clear: If OSX runs out of physical memory, all hell breaks loose. I have to keep my linux VM memory usage as low as I can, but also, do my job. So, osx runs fusion, Slack and Zoom, and kitty (terminal)

Chrome and Firefox are atrocious memory hogs. Fire up an electron app like Slack, or a java app like Goland, and you can kiss your 9GB goodbye.

That is why I use The Marvelous Suspender and Auto Tab Discard. These extensions put browser tabs to sleep after a set amount of configurable time. This helps keep my VM around 60-80% of physical memory with everything I use running.

Putting It All Together

Top ultrawide display is my Linux VM in fullscreen mode, bottom is my laptop screen. I only use slack, zoom and chrome in OSX.

Things I’m Still Improving

With Xmonad, your start-up is very sparse:

myStartupHook = do
          spawnOnce "nitrogen --restore &"
          spawnOnce "compton --config /home/mcarlson/.config/compton/compton.conf &"
          setWMName "LG3D"
          --spawnOnce "exec /usr/bin/trayer --edge top --align right --SetDockType true --SetPartialStrut true --expand true --width 15 --transparent true --alpha 0 --tint 0x292d3e --height 19 &"
          --spawnOnce "/home/mcarlson/.xmonad/xmonad.start" -- Sets our wallpaper

I’ve had issues with two things not properly working in Xmonad, but are in in Mate and that is:

  • VMWare tools. I cannot copy/paste properly between the host and guest.
  • I cannot get chrome to talk to gnome keyring. This cause chrome to ask if I want to save a password and it never does. This is mostly find since I use a proper password manager anyway, but its a mild annoyance.
  • Slack. Slack is a problem on every platform because Slack and electron apps are huge steaming piles of garbage.
  • Spotify. Spotify-tui looks good for my use case, but spotifyd is broken right now. I’d like to not use a resource intensive web page to listen to music, but I can always fall back to my local library and musikcube

Also, I had to update my kernel to 5.19. For some reason, the entire network stack would just die. The vm interface would become unusable. Sometimes it would happen once a day, sometimes once a week. This was using 5.12, and after updating to 5.19 it appears to be stable

Fin

Okay, that’s it. Hit me up if you have a comment or question

~mikec