Building software that doesn’t break requires tools that don’t break either. After years of switching between environments and experimenting with different workflows, I’ve settled on a stack that prioritizes reliability, speed, and simplicity.
The philosophy is straightforward: choose tools that are fast, reliable, and don’t require constant maintenance. I avoid tools that try to do everything and instead prefer focused solutions that excel at their primary purpose. The goal is to spend time building software, not configuring tools.
OS & Package Management
macOS remains my primary development environment. Despite its occasional quirks, the Unix foundation combined with excellent hardware integration makes it reliable for development work. The ecosystem just works, especially with the M-series processors.
Nix with nix-darwin and Homebrew creates a hybrid package management approach that works. Nix provides reproducible environments and declarative configuration through nix-darwin, while Homebrew fills the gaps for GUI applications and packages that aren’t well-supported in nixpkgs yet. Using nix-homebrew keeps everything declarative and version-controlled. This setup gives me reproducible environments without the complexity of pure NixOS.
Editors & Terminal
Zed Editor has become my primary editor for most development work. It’s genuinely fast, native, and gets out of my way. The collaborative features work seamlessly when pair programming, and the performance difference from Electron-based alternatives is immediately noticeable. The Vim mode is solid enough for my muscle memory.
Ghostty handles my terminal needs perfectly. GPU-accelerated rendering means smooth scrolling even with heavy output, and the configuration is straightforward without being overwhelming. It handles everything from simple commands to heavy Docker builds without the memory bloat of some alternatives.
Neovim remains essential for modal editing power and remote system work. The ecosystem has matured significantly with excellent LSP support and plugin management. It’s my fallback when Zed doesn’t handle something well, and my go-to for quick edits or working over SSH.
Development Tools
Claude Code has become integral to my development workflow. It’s particularly valuable for code reviews, refactoring large codebases, and exploring unfamiliar projects. The integration feels natural rather than forced - it augments my workflow instead of replacing core skills.
HTTPie handles API testing and debugging with an intuitive syntax. Authentication, sessions, and complex requests work without needing a GUI. The command-line output is clean and readable, making it perfect for both development and documentation.
Hoppscotch serves as my lightweight alternative to Postman. Being web-based means no heavy client installation, and it’s fast enough for most API development and testing needs. The interface is clean and focused.
Container Management
colima provides Docker functionality on macOS without the overhead of Docker Desktop. It’s simpler to configure, doesn’t consume resources when idle, and integrates well with the rest of my development environment.
lazydocker gives me a terminal-based interface for Docker management. When I need to inspect containers, view logs, or manage networks, it’s faster than remembering docker commands or switching to a GUI. The interface is intuitive and information-dense.
k3d and kind for local Kubernetes development. k3d is faster to start and lighter on resources, while kind provides better compatibility with standard Kubernetes features. Both eliminate the complexity of managing local clusters manually.
Productivity
Raycast replaced both Spotlight and Alfred as my primary launcher. The extensions ecosystem is excellent - clipboard history, quick calculations, git repository management, and custom workflows all accessible through a unified interface. It’s become the central hub for most quick actions.
Zen Browser provides a distraction-free browsing experience when I need to focus on content consumption. It strips away unnecessary features and tab clutter, making it perfect for research and documentation reading.
Obsidian handles notes and documentation with its knowledge graph approach. The linking between notes creates connections that are particularly useful for technical documentation and project planning. The local files and markdown format mean my notes aren’t locked into a proprietary system.
Starship provides shell prompt information without cluttering the terminal. It shows relevant context like git status, programming language versions, and exit codes only when needed. The configuration is straightforward and the performance is excellent.
AeroSpace brings i3-style tiling window management to macOS. It makes multitasking significantly more efficient without fighting against macOS conventions. The keyboard shortcuts become muscle memory quickly, and it handles multiple displays intelligently.
Programming Languages
PHP for rapid application development for web applications. The ecosystem is mature, deployment is straightforward, and the development cycle is fast. Laravel and modern PHP make it excellent for getting applications built and shipped quickly.
Go for building CLI applications and command-line tools. The simplicity, fast compilation, and single binary deployment make it perfect for creating reliable utilities. The standard library covers most needs for file handling, networking, and system interactions without external dependencies.
TypeScript for frontend work and Node.js applications. The type system catches errors early, and the tooling ecosystem is mature. It provides the productivity of JavaScript with the safety of static typing, making it excellent for both client-side applications and server-side APIs.
Rust - currently learning for performance-critical applications and systems programming. The memory safety guarantees and zero-cost abstractions are compelling, and the tooling around Cargo makes dependency management pleasant. Still exploring where it fits best in my workflow.