My Development Setup and Tools
Published: 2021-03-10 18:28:05

---
title: My Development Setup and Tools
published: true
date: 2021-02-16 19:35:53 UTC
tags: 
canonical_url: https://jpalmer.dev/2021/02/development-setup-and-tools/
---

![](https://jpalmer.dev/2021/02/development-setup-and-tools/yancy-min-git-history.jpg) <figcaption>
<p>
<a href="https://unsplash.com/photos/842ofHC6MaI">Photo by Yancy Min</a></p>
</figcaption>

I’ve always found it interesting to see how others get things done, so here’s a little bit about my development setup, and how I like to go about building things.

## Hardware

I’ve been programming since I was about 12 years old, and I’ve learned some hard lessons about ergonomics in that time. At this point I optimize for a comfortable and quiet development environment, and that’s pretty much it. I use a [Jarvis standing desk](https://www.fully.com/standing-desks/jarvis.html) along with a Herman Miller Aeron chair. My Mac is effectively silent, and I have a 27 inch 4K Dell monitor that makes screen reading very comfortable. I had a couple of different lighting options but have landed on the [BenQ ScreenBar](https://www.benq.com/en-us/lamps/computer-desklamp/screenbar.html) which attaches to the top of my monitor and provides a surprisingly satisfying low-profile task lighting experience.

Programming for extended periods led me to suffer from RSI, and in an attempt to alleviate these issues I started exploring the [mechanical keyboards rabbit hole](https://www.reddit.com/r/MechanicalKeyboards/). My first experiment was to build an [Atreus](https://atreus.technomancy.us/), which helped me learn about keyboard construction and the ins and outs of [QMK and custom layouts](https://qmk.fm/). It’s a great keyboard that I still really love, but the lack of ability to “tent” the keyboard to reflect my wrist orientation was keeping me from really getting the full ergonomic benefit. So, I looked for a similar keyboard that was physically split and ended up with my current model, the [Keeb.io Iris](https://keeb.io/collections/iris-split-ergonomic-keyboard). It works well for me since the separate sides can be easily adjusted to match the angle of my wrists, and it runs QMK so migrating my custom layout from the Atreus was a snap.

I also swap between an Apple Magic Trackpad that I’ve had for ten years, and a [Logitech MX Ergo Trackball](https://www.logitech.com/en-us/products/mice/mx-ergo-wireless-trackball-mouse.html). The Logitech is amazing but since it is a right-handed model it can’t be swapped to my left side; eventually my right hand will bother me enough that I need to pull out the trackpad and switch to my left hand.

Okay, on to the software side.

## Software

If you were raised on the command line like I was, [HomeBrew](https://brew.sh/) is a requirement to even get started with software development on MacOS. I couldn’t live without it, to the point that I have created a [HomeBrew Bundle](https://github.com/Homebrew/homebrew-bundle) of my “must-have” packages that I use whenever I’m configuring a new account. Takes a little of the guesswork out of getting started. The other tool that I’ve come to really love is [Oh My Zsh](https://ohmyz.sh/). I used to be a `bash` user, but at some point a co-worker suggested that I give [`zsh`](https://en.wikipedia.org/wiki/Z_shell) a try and I’ve never looked back.

For a long time I was an Emacs user, but these days Emacs has basically become an [Org Mode](https://orgmode.org/) hosting environment. I use Org to keep track of everything (after experimenting with _a lot_ of alternatives), so that’s not going anywhere. For everything else I have moved to [Visual Studio Code](https://code.visualstudio.com/) (with [an emacs keybinding extension](https://github.com/whitphx/vscode-emacs-mcx), of course; I’m not a masochist). I’m still amazed at how fast VS Code became the amazing experience that it is. Really great work.

I have some tips in the off-chance that they’re helpful:

- Use a typeface that was developed specifically for programming. I use [JetBrains Mono](https://www.jetbrains.com/lp/mono/), but also really like [Fira Code](https://github.com/tonsky/FiraCode). They’ve been crafted with particular attention to the types of letter and symbol combinations that are common in programming, and in my opinion they really improve the day-to-day experience of reading code. Make sure to [enable ligatures](https://stackoverflow.com/questions/56209769/how-do-i-setup-font-ligatures-for-visual-studio-code).

- Disable mode-specific extensions globally, and only enable them in the workspaces where you need them. This avoids issues with competing extensions which can happen if you experiment with a lot of technologies.

- Adjust the explorer zoom level as indicated in [this Stack Overflow answer](https://stackoverflow.com/a/50814454) to change the size of the explorer to something that better suits how you want things. I have my explorer smaller than the default because I don’t actively use it, but when I do I want to see a lot of information.

The other tool that I find myself reaching for frequently on a Mac is [Docker](https://www.docker.com/). Homebrew is great when you’re running things on your own machine, but when you need to start thinking about deployment, Docker makes that process a lot easier.

Finally, I use [Hugo](https://gohugo.io/) for blogging with my [forked version](https://github.com/JeffreyPalmer/blogophonic-hugo-theme) of the [Blogophonic theme](https://github.com/formspree/blogophonic-hugo) that allows it to be installed like a normal Hugo theme.

## Miscellany

I’ve been doing a lot of front-end focused work over the past year or so and it’s been really great to see how the Javascript ecosystem has evolved. The biggest impact for me was to start using [Svelte](https://svelte.dev/) for all of my front-end development. It is **amazing**. I highly recommend that you check it out.

There are a ton of javascript charting libraries out there (I’m partial to [Vega Lite](https://vega.github.io/vega-lite/)), but recently I’ve been focused on building custom information visualizations. The tool that I use to do that is [D3.js](https://d3js.org/). When you pair D3 and Svelte’s reactivity it’s a really powerful and satisfying development experience.

I’m a big fan of [Bulma](https://bulma.io/) when I want to quickly prototype something. I’ve recently started using [Tailwind CSS](https://tailwindcss.com/) and, although I haven’t used it enough to have a strong opinion, I’m liking what I have seen so far.

So, that’s everything that I thought it might be interesting to cover. If you have any questions or thoughts, or would like to know more about an area that I didn’t cover, please don’t hesitate to [contact me](https://jpalmer.dev/contact)!