A collection of characters, stories, and other elements
When Mitchell Hashimoto, co-founder, former CTO, and now engineer at HashiCorp, joined us for Dev Tool Time on July 21, 2021, he showed how the simplest and most complex dev tools can fit into a developer workflow.
You can watch the recording of this episode at the bottom of this blog post, but first let’s check out Mitchell’s desk:
Mitchell’s main computer is an Apple iMac, with an ergonomic keyboard from Microsoft and an Anker mouse.
In a stack on the left, he keeps three different MacBooks of different ages and specs:
- One older laptop used for testing
- An official HashiCorp laptop for use on the go
- A MacBook Air with Apple’s M1 silicon for personal use and testing
Mitchell also has a stack of Raspberry Pi computers to the right of his iMac, which together run a HashiCorp stack.
“I just like this form-factor of carrying something in my hand.”
Mitchell uses his iPad and Apple Pencil for a mix of personal and professional work. As a hobbyist pilot, he plots and checks flight paths. As an engineer, he uses the iPad for reading and reviewing code and long-form documents, such as RFCs, and writing handwritten notes with the Apple Pencil and Goodnotes. Goodnotes makes it easy to move text around, and reorganize content visually. When he's ready for long-form typing or document creation, Mitchell transfers his notes to his computer with Goodnotes for MacOS and iCloud before drafting in Google Docs, GitHub, or the appropriate app. This setup frees Mitchell from his desk, letting him do code reviews outside.
“I think one thing that always scared me every single year was the MacOS release and like, what would that break?”
Operating system and other software updates regularly break development environments. Mitchell avoids this recurring problem using NixOS in a VM running with VMware Fusion.
“My biggest criticism about Nix is that their learning is like a sheer cliff. It’s the hardest learning curve of probably in tech I've ever learned.”
Despite its difficult learning curve, NixOS makes the entire development environment reproducible and easy to change, knowing that you can always roll back to previous versions.
Within the NixOS VM, two other tools help Mitchell set and use packages and environment variables just for one session:
- nix-shell enables a single-session shell with specific dependencies
- direnv provides a consistent approach for setting and accessing environment variables based on directory
“I used to be an Emacs user ... and then I joined this other company and I was harassed on a daily basis about my Emacs use because I was the only Emacs user in the entire company ... I was the butt of every joke! I got so fed up with it I decided to use Vim for one month and I never switched back.”
Neovim provides Mitchell with the straightforward editor experience he wants, and he uses a minimal number of plugins. Two plugins or features of Neovim he uses are:
- Neovim’s LSP support provides dignostic errors and other LSP features
- nvim-treesitter provides exceptional syntax highlighting
“I just don’t feel like I personally need an IDE experience ... I don’t like things that write code for me; I want to do it myself.”
You can check out Mitchell’s Vim config at mitchell/vim-misc, and it’s mostly agnostic between Neovim and Vim.
- i3 for window management in the NixOS VM
- Kitty is Mitchell’s preferred terminal inside the VM
- Slate for window management on Mac, mainly used for basic corners and splits
- Alfred for shortcuts and application launching
Watch the recording
Check out the recording of the episode below, and be sure to sign up for upcoming events!