My Developer Environment Blueprint
I treat my local environment as a product. If it is brittle, slow, or distracting, I cannot build complex systems. Over the years, I have moved away from “ricing” my desktop to building a stable, portable platform that supports heavy backend engineering—distributed tracing, AI/ML model probing, and rapid infrastructure prototyping.
The Core Philosophy
- Portability over customization. I should be able to provision a new machine in 15 minutes.
- Text over GUIs. If I can do it in a terminal, I can script it. If I can script it, I can automate it.
- Local = Production. My local stack should mimic the constraints of my production clusters (containers, resource limits, network topology).
The Blueprint
The source of truth is my dotfiles repository. It is not just a collection of config files; it is an idempotent installation manifesto.
1. The Shell & Multiplexer
I live in zsh + tmux. This combination allows me to persist sessions across reboots and network disconnects.
- Fast navigation:
autojumplearns my most visited directories. I typej backendand I am there. - Context isolation: I use tmux sessions to separate client work, open source, and infrastructure tasks. I never mix contexts.
- Aliases: I map high-frequency commands to short aliases (e.g.,
kforkubectl,gforgit). These save seconds every hour, which compound into days every year.
2. The Editor
I have transitioned from Emacs to VS Code for its ecosystem, but I bring the keyboard-centric philosophy with me.
- Consistency: I enforce
.editorconfigin every project root. Tabs vs. spaces debates are solved by a config file, not a meeting. - Remote Development: I rarely run code on my laptop metal. I use VS Code Remote Containers to develop inside Docker containers that mirror production images. This eliminates “it works on my machine” forever.
3. Infrastructure & Prototyping
Building distributed systems requires simulating a cluster locally.
- Docker & Kind: I run lightweight Kubernetes clusters locally to test Helm charts and operators.
- LocalStack: For mocking AWS services (S3, SQS, Lambda) without racking up a cloud bill.
- Observability: I run a local Jaeger and Prometheus stack. I refuse to debug distributed transactions by grepping logs; I want to see the trace.
4. AI/ML Workbench
When probing LLMs or training small models, I need a Python environment that doesn’t break my system tools.
- Environment Management: I use
pyenv+poetry. Every project gets an isolated virtualenv. No global pip installs. - Notebooks: I run Jupyter Lab inside a container with GPU passthrough. This keeps my CUDA drivers isolated from my host OS updates.
Setup in 15 Minutes
When I get a new machine, I run one command:
git clone https://github.com/pranavcode/dotfiles.git && ./install.sh
This script bootstraps Homebrew, installs nvm, pyenv, tmux, and symlinks my configs. By the time I finish my coffee, I am ready to ship code.
References
I stand on the shoulders of giants. My setup is inspired by:
- Thoughtbot for their pragmatic aliases.
- Takuya Matsuyama for aesthetic minimalism.
- Mathias Bynens for macOS defaults that make sense.