My Setup in 2019

I thought I’d document my setup as a way to track every year how things change and what remains the same over time. I mostly write PHP, JavaScript, and DevOps-related code, and I thought I’d share what’s working for me.

Office Setup

MacBook Pro 15” 16 GB of memory - 2016 model

I like the butterfly keyboard, but it does have one repair claim for a stuck “x” key. Apple serviced it for free, and my 2016 model has a brand-new battery and updated 2018 keyboard. Most of the time, my Laptop is perched on an Rain mStand360.

I am content with the Touch Bar model for now. Reaching for the escape key on the Touch Bar is clunky, but I love the laptop’s form factor, and the large trackpad is fantastic. My only gripe is accidental trackpad taps or Esc key bumps (escape is mapped to my caps lock) that loses focus on the active app.

iPhone 7+

I pay for my phones in cash and use them until they feel sluggish. I am not a phone power user, and I try to keep my apps to a minimum. My most-used apps include Things, Spotify, Bear, Wallet, and Audible. I intentionally only use four rows to keep the number of apps I use at bay. It forces me to justify the value of an app being on my home screen.

iPhone home screen with four rows of apps

Apple Magic Keyboard with numeric keypad - Silver

This is the best keyboard I’ve ever owned—full stop. It’s a thing of beauty. It’s perfect. The travel on the Magic Keyboard is less than the previous Apple Keyboard, but more than the butterfly mechanism on the 2016-2018 MacBook pros. I even switched back from my WASD V3 88-Key Custom Mechanical Keyboard which I still use when I’m at work. Oh, and the battery life on this keyboard is stellar. I prefer the numeric keypad model because the arrow keys are way better than the compact version, and I use the numeric keypad too!

Magic Mouse 2 - Black and Silver

I loved the original Magic Mouse, but the Magic Mouse 2 is tremendously better. I don’t mind that you have to charge it upside down. If I am in a bind, I can plug it in, take a ten-minute break, and get another day out of it. This mouse goes multiple weeks without needing a charge.

I would never consider cheating on this mouse with anything else. I love this mouse so much I own two: a black and silver model. Syncing one Magic Mouse between my work and personal laptops is annoying, so I bought another to avoid pairing the mouse between laptops (trust me, it’s super annoying).

Macbook Pro 15” (2018 model) - Work Machine

I used to use my work laptop for both work and personal projects. I’ve always felt weird about using it for my personal and freelance projects, so now I use a separate Laptop for personal work.

While swapping a laptop at my desk gets annoying, the physical and mental separation is worth it. I avoid work messages on my computer, and I’m not tempted with personal projects at work. Plus, I don’t have to dump all my non-work files before turning in a Laptop.

My dotfiles repo makes setup a cinch, so I have a (mostly) consistent environment between my personal and work laptop.

LG 24” 4K Monitor

I use a 24” external monitor at my desk. I typically like to keep it simple with one monitor, but my Laptop serves as a place for my terminal and other secondary apps. I love LG monitors and TVs, the quality is dependable and still affordable. I chose to go with the 24” because I also use it as a gaming monitor for Xbox, and 24” is perfect.

SanDisk 1TB Extreme Portable External SSD

I use this tiny external drive to back up my drive. It’s an amazing piece of hardware that comes with a USB-C cable by default with a type A USB adapter. Most everything is backed up in the cloud, but I like having another backup for my course source files.

Software and Development

Sublime Text 3

TextMate was my first love, and ever since, I’ve longed for a lightweight, no-frills editor that still gives me more than VIM out of the box. Since Textmate’s glory days are past (in my opinion), Sublime has been my daily driver. Although Visual Studio Code has grown more popular, Sublime still feels faster to me and has excellent plugins and themes available.

When working with code, I feel like Sublime is missing some excellent features that PhpStorm and Visual Studio Code offer. Still, I rely heavily on PHP CS Fixer for cleaning up unused classes, formatting, etc. Admittedly, when using TypeScript and other typed languages, I gravitate towards JetBrains IDEs.


I geek out to editors, and I’m always trying them out (can’t wait to try out Panic Nova). Along with Sublime, PhpStorm has been a staple for me. I use it more and more lately, leaning on IDE features in unfamiliar codebases and for Xdebug sessions. I work very fast in PhpStorm, so I tend to use it for projects under substantial development when I’m creating a bunch of files. The other benefit is that it has excellent TypeScript support.

Visual Studio Code

I use Visual Studio Code to record screencasts because it has excellent workspace setting support. That means I can tweak window.zoomLevel in a screencast project but retain the default for non-screencast work. Workspace settings mean I don’t have to tweak my default font size every time I want to record a screencast.

Using the zoom level in screencasts makes the text more readable across the file explorer, the code editor, and the terminal. I also like that I can use the built-in terminal during a screencast to avoid a jarring experience of switching between the editor and terminal.

I’ve considered permanently switching from Sublime to VS Code as my primary editor, but I still find myself returning to Sublime for the bulk of my work over small details.

Operator Mono

This is a $200 font and worth every penny. Making fonts is an under-appreciated art, and I am happy to pay someone for the sheer beauty that is Operator. Before switching the Operator Mono, I used Hack, a typeface designed for source code. If I didn’t love Operator so much, I would probably use Cascadia Code.

Kiwi Theme by Dayle Rees - Rainglow Color Themes

I’m currently digging Kiwi by Dayle Rees, but I try out different themes from time-to-time. Rainglow Color Themes is my favorite theme collection. I recorded my Docker for PHP Developers course with Laracasts Contrast. In PhpStorm, I use the default Darkula because I can’t seem to find a theme that feels cohesive in different parts of the PhpStorm UI.

iTerm2 - macOS Terminal Replacement

iTerm2 is awesome. My setup is barebones, but I love all the possible features available, so I can make my terminal experience delightful.

I use the Monokai Soda theme found in the Iterm Themes collection:

Monokai Soda iTerm2 theme

I highly recommend setting “Reuse previous session’s directory” found in Preferences > Profiles > General > Working Directory. When you open a new terminal tab, it will pick up where you left off.

Laravel Valet

I always have the latest PHP version installed locally and use Laravel Valet. I’m a fan of full local development without a VM, so my non-work projects use the latest versions of PHP, MySQL, etc. at all times.

When I work on a project with different requirements or in a team setting, I use Docker to create an environment. Even if I’m developing locally, most of my production apps use Docker. I use CI environments that leverage Docker images to make sure I didn’t miss something locally like a missing module.


I wrote a book about Docker, and I use it every day. It works tremendously well at streamlining environment parity and deploying the same environment you develop into production. Even if I work locally on an application, my CI and build environments generally ship Docker images.


Google Cloud

While a bit on the expensive side, I prefer Google Cloud to host Docker containers in Kubernetes. I find Google Cloud a little more intuitive than AWS, and not having to manage Kubernetes myself is a huge win. Google cloud feels lightning fast, and I’ve got most of my environment automated with Terraform by HashiCorp.

GitHub Pages

I run on GitHub Pages using Jekyll. The site is showing its teeth, and I’ll likely update it in 2020. When I started writing books, I wanted to focus on creating content, and GitHub Pages was the quickest, most affordable way (free) to get a static site going. To this day, I have done about $100K of business through GitHub pages and Gumroad, and it still impresses me how I have to worry about zero infrastructure as a creator.


Things 3

I’ve been using Things since the beginning on my Laptop and iPhone. I would only use this app if you have it on your Laptop and Phone so you can easily capture tasks wherever you are.

This app works best with David Allen’s Getting Things Done® Methodology, but it’s intuitive enough to pick up without understanding GTD. I use the quick entry shortcut to capture ideas or tasks from other apps and use them to organize my projects and personal todos.

Alfred 4

I map Alfred to CMD + Spacebar and it takes over Spotlight search. I use snippets for canned messages and support email responses. I am probably not a power user, but I own the power pack for the snippets feature and the clipboard history—I have the clipboard history mapped to Control + v.


I subscribe to Grammarly pro ($30/mo) to edit my writing for Laravel News, Bitpress books, and any relevant document that I want to check. I don’t like using Grammarly in the browser; I only use the Mac application.


I avoid browser password managers and have a family LastPass account. It gets the job done.



I’ve written two books on Leanpub: Writing APIs with Lumen and Docker for PHP Developers. I have a Leanpub starter repo that serves as a base for how I organize book manuscripts, and I wrote at length about my process for writing Docker for PHP Developers.

Leanpub helps me iteratively generate PDFs with a small feedback loop. I appreciate the workflow of pushing my manuscript to GitHub and getting a generated PDF on Dropbox a few minutes later.

I use Leanpub as a secondary marketplace for my courses—authors get about 80% (which is still pretty good) and you have to wait 45 days to get paid. I have no problem reimbursing unhappy customers that buy from Gumroad, but at least Leanpub doesn’t lock you into using their platform exclusively to sell the generated books.

iA Writer

iA Writer is a minimalistic writing app using Markdown. This app gets out of my way and lets me focus on writing without distractions. I can’t illustrate why I like this app, but it just feels like a writer’s app.


Sure SM7B Microphone

The SM7B is legendary. The form factor is beautiful, and I feel like it’s a steal at $399. This mic sounds impressive and does a superb job avoiding background noise. I send my voice through the SM7B mic into the DBX 286s, which delivers audio to my laptop via the Focusrite Scarlett Solo.

R0DE PSA 1 Swivel Mount Arm

The R0de PSA 1 is an excellent arm, and I recommend skipping cheaper options. The factory screw blocks the SM7B in some positions, and I found a lower profile wing nut at the hardware store works better.


Screenflow is perfect for my screencasting needs and has a decent editing experience. I record in 4K on my MacBook Pro using Uberlayer to overlay the correct aspect ratio. The MacBook Pro has a 16:10 aspect ratio, so I align my apps within a 16:9 overlay for recording. My next course will be recorded on my 24” external monitor in 4K.


G Suite

At around $5 a user, G Suite is my go-to for running Bitpress. Google has superior spam prevention, is up 99.999% of the time, and I’ve never had an issue. I use Google Drive to store documents, sheets, and other creative assets I want to share with vendors. I’ve been tempted to try Fastmail, but don’t have a good reason to justify the change.


ConvertKit is the most crucial app I use to make money for my courses. Email marketing is more than sending emails to a bunch of people—I rely on segmenting and sequence automation to automate everything. I love that I can write a broadcast, tag a user that does an action (i.e., click a link), and create follow-up automation on those users. When a user signs up for a sample of my Docker book, they flow into a sequence of tips that lead up to a soft sale in the final email.

On the other end, when a user purchases my course on Gumroad, an integration brings them into ConvertKit. Segmenting users that have a purchase history is an excellent way of targeting customers you know have purchased something from you in the past. I’ll sometimes use segments to offer upgrade deals, or special promotions exclusive to paying customers.

Note: the ConvertKit link is an affiliate and I get a small kickback if you sign up.


Gumroad is the best place to sell digital products, and they have some of the most reasonable fee percentages around. Gumroad allows me to focus on creating courses and books and takes care of everything from the purchase to the delivery, to refunds, and so much more. They payout every week in most cases, so you aren’t waiting for your earnings as long as some other providers.


Freshbooks is fantastic because I don’t have to install any software or worry about a corrupt accounting file on my machine. It was easy to send a link to my accountant, and the interface is simple, for the most part. I am not much of a power user, but FreshBooks has all sorts of integrations and automation available.