VS Code
VS Code is my daily driver for everything from PHP and PowerShell to editing config files and wrangling Claude Code. It's fast, it stays out of the way, and the extension ecosystem covers everything I need without turning into a bloated IDE that takes 45 seconds to open. Here's exactly how mine is set up — and more importantly, why.
The Theme (There Is Only One Correct Answer)
I use Dark 2026. It is dark. As it should be.
I genuinely do not understand light themes. I have tried to understand. I have asked people who use them to explain themselves. The explanations have not been satisfying. Staring at a white rectangle for eight hours a day, voluntarily, when a dark alternative exists, is a lifestyle choice I simply cannot get behind. If you use a light theme, I respect you as a person, but I will be thinking about it, and silently judging you.
Dark 2026 has excellent contrast, it's easy on the eyes during long sessions, and it requires exactly zero maintenance when VS Code updates. It looks good. It is good. We move on.
The Font
- I use Fira Code as my primary editor font, and I keep JetBrains Mono and Cascadia Code in the fallback chain not as emergency options, but because I genuinely like all three and rotate between them occasionally. All three are monospace fonts built with code readability in mind, all three support ligatures, and all three are worth having installed.
Fira Code is the one I come back to most — it's clean and compact without feeling cramped. JetBrains Mono has slightly taller letterforms and a bit more visual weight, which I find works well at smaller sizes. Cascadia Code is Microsoft's own coding font, and it has a warmth to it that makes it easy to read during long sessions. Any of the three would be a fine default. I just happen to keep all of them around because I like options, and fonts are free.
All three support ligatures. Ligatures are special combined glyphs for common multi-character sequences. => becomes a proper arrow. !== becomes a unified "definitely not equal" symbol. <= and >= render as actual comparison arrows. Your code looks the same to the compiler — the ligatures are purely visual — but patterns become faster to recognise at a glance. Once you've used them, going back feels like reading a ransom note.
Setting up Fira Code with ligatures
Step 1: Download and install Fira Code from github.com/tonsky/FiraCode. Install the font files to your system as you would any other font.
Step 2: Open your VS Code settings JSON. Hit Ctrl+Shift+P, type Open User Settings JSON, and select it.
Step 3: Add these two lines:
"editor.fontFamily": "Fira Code, JetBrains Mono, Cascadia Code, Consolas, monospace",
"editor.fontLigatures": true
Step 4: Save and look at a fat arrow function or a !== comparison. If it rendered as a clean glyph instead of two separate characters, you're done.
The fallback chain matters if you ever sync settings to another machine that doesn't have Fira Code installed — VS Code will drop back to Consolas rather than throwing up whatever the OS decides a monospace font is that day.
Keeping It Lean
Considering how much time I spend in VS Code, you might expect an elaborate, heavily customised setup — custom snippets, a dozen themes to switch between, seventeen extensions pinned to the sidebar. There's none of that here.
The more time you spend in a tool, the more you want it to just work without friction. A minimal setup means faster load times, no extension conflicts, no mystery slowdowns, and no breakage when VS Code updates. Every extension I add is a potential source of weirdness. So the bar is high: it has to solve an actual problem I have, repeatedly, before it earns a place in the list.
The result is a setup that's close to vanilla VS Code, with just enough added to handle the specific things VS Code doesn't do well out of the box — PHP language support, PowerShell integration, and a bit of visual polish.
Extensions
Five. That's the list. Not fifty. Five.
PHP Intelephense
The best PHP language server available for VS Code, and it's not particularly close. Code completion, go-to-definition, signature help, real-time diagnostics — it handles all of it better than VS Code's built-in PHP support. Because Intelephense and the built-in PHP features cover the same ground and do not play nicely together, I disable the built-in entirely and let Intelephense own the language:
"php.validate.enable": false,
"php.suggest.basic": false
PowerShell
Microsoft's official PowerShell extension. Gives me a proper integrated terminal, IntelliSense, syntax highlighting, and a debugger for .ps1 scripts. A fair amount of my automation and tooling lives in PowerShell, so this one is non-negotiable.
Prettier
Auto-formats HTML, CSS, JavaScript, JSON, and YAML. Set it as the default formatter and forget about it. I run it with a tab width of 4 to match my PHP files:
"prettier.tabWidth": 4,
"editor.defaultFormatter": "esbenp.prettier-vscode"
Prettier doesn't handle PHP, so I override the formatter specifically for PHP files to use Intelephense instead:
"[php]": {
"editor.defaultFormatter": "bmewburn.vscode-intelephense-client"
}
DotENV
Syntax highlighting for .env files. Single-purpose, tiny, does exactly one thing. Without it, .env files are just a wall of undifferentiated text. With it, keys and values are visually distinct in about two seconds of reading. Worth every kilobyte.
vscode-icons
Replaces VS Code's default file icons with a set that covers hundreds of file types by name and extension. At a glance I can tell a .php file from a .htaccess from a docker-compose.yml without reading anything. It's a small quality-of-life thing that compounds across a large and varied directory tree.
Full Settings Snapshot
{
"editor.fontFamily": "Fira Code, Consolas, monospace",
"editor.fontLigatures": true,
"editor.wordWrap": "on",
"editor.defaultFormatter": "esbenp.prettier-vscode",
"php.validate.enable": false,
"php.suggest.basic": false,
"prettier.tabWidth": 4,
"[php]": {
"editor.defaultFormatter": "bmewburn.vscode-intelephense-client"
}
}
The Claude Code Extension
I also run the Claude Code extension, which integrates Claude directly into the VS Code sidebar. It's context-aware — it sees the files I have open, understands the project structure, and can make changes across multiple files without me copy-pasting code in and out of a browser tab. For a codebase like this one with multiple interconnected sites and shared assets, that context awareness is what makes it genuinely useful rather than just a fancy autocomplete.
The rest of the setup stays vanilla on purpose. Clean installs, fast opens, no mystery. Exactly the way I like it.