Pimp my Windows Box
When I first started at Google, I wrote a short article on the essential utilities I add to an OSX machine when it’s brand new. A friend at work recently asked me what I do when I set up a Windows machine and thus this post began 🙂
He was interested primarily in development so this recipe is for a typical development machine.
For developers, Windows is a very productive environment. This is not just for Windows development on the Microsoft stack but for development targeting most typical web / mobile clients and server backends.
I’ll just break it down into two quick sections: things to install and developer productivity within Windows.
General Windows Productivity tips
I’m most productive in Windows because of the combination of tools that I choose for working on Windows and because I know the keyboard shortcuts and built-in tools extremely well relative to other OSes. I have written blog posts on this before but a few basics for being fast at Windows:
- If you purchased a computer that wasn’t “Signature Edition” wipe and reinstall Windows using your included key and media for the appropriate version. Bloat is a mess and WHQL drivers are usually trustworthy and stable enough with the exception being graphics drivers.
- Pin your most used apps to the start menu and use the Win+# keyboard shortcut to launch
- Use Winsnap for core window management
- Use alt+drag for adjusted window management – e.g. mouse 3 + window edge dragging to resize
- Use Win+R and search anywhere gratuitously to launch apps quickly with known paths
- Win+R mspaint is my favorite example. There is no faster tool for cropping and rotating screenshots
- Win+R notepad is my extra clipboard
- Win+R cmd is my immediate terminal
- Add the cygwin path to your system path by pressing Win+pause/break => Advanced System Settings => Environment Variables and then editing the PATH to contain c:cygwinbin. Example path with more dev tools added:
C:Program Files (x86)GNUGnuPG;c:usersgusbin;c:mingwbin;c:python27;C:Progra~1Javajdk1.7.0_21bin;C:UsersGusapache-ant-1.9.4bin;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program Files (x86)InteliCLS Client;C:Program FilesInteliCLS Client;C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0;C:Program Files (x86)Microsoft ASP.NETASP.NET Web Pagesv1.0;C:Program Files (x86)Windows Kits8.0Windows Performance Toolkit;C:Program FilesMicrosoft SQL Server110ToolsBinn;C:Program FilesIntelIntel(R) Management Engine ComponentsDAL;C:Program FilesIntelIntel(R) Management Engine ComponentsIPT;C:Program Files (x86)IntelIntel(R) Management Engine ComponentsDAL;C:Program Files (x86)IntelIntel(R) Management Engine ComponentsIPT;C:Program Files (x86)Windows LiveShared;C:Program Files (x86)QuickTimeQTSystem;C:Program Files (x86)ATI TechnologiesATI.ACECore-Static;C:Program Files (x86)CineFormTools;C:Program Files (x86)GoProTools;C:ProgramDataRazerSwitchBladeSDK;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WINDOWSSystem32;C:UsersGusAppDataRoamingnpm;C:Program Files (x86)Googlegoogle_appengine;C:Program Files (x86)Arduino
- Know your IDE and the keyboard shortcuts that it has specific to Windows. The Home/End/Page Up/Page Down keys are your friend.
For development you at a minimum need a decent compiler, editor, and command prompt. Beyond that, it’s nice to have good window management,
I work for Google and am very familiar now with their apps workflow. All my stuff is in Google assets linked to a Google account that is connected to my Chrome profile. For cloud living on Google’s ecosystem, Chrome’s essential. Bonus, you can add the Chrome app launcher to your start menu and get a “Start menu” like experience for Chrome apps.
I also make sure to install the usual extensions if they’re not cloud sync’d:
Ever since reading Unix Power Tools I have insisted on having your typical suite of *nix awesome on all my boxes. There are many alternatives to Cygwin but for me, this suite of tools is the best way to get everything in one fell swoop. At a minimum, I install all of the core development tools I use:
- Make (and related g* compilers)
- Unix utils (*grep)
- Unix dev utils (sed / awk / )
I usually also add rxvt because the terminal window is resizeable horizontally unlike the default command window. Sometimes, the git client from Cygwin is broken so I end up with a random install of Mingw and Git.
After installing cygwin, I “move in” by copying my bashrc to the usual places.
Sublime is not my favorite editor but it is a great default and in particular Sublime is a reliable default text editor.
I love Windows snap but because I’m now using Linux and OSX as well, I have become accustomed to more advanced window management. As such, I install Divvy everywhere and map my keyboard shortcuts to be consistent from machine to machine for window management.
Alt-drag window behavior is correct, this can not be debated.
I cribbed this from Scott Hanselman’s post on Console2 but in short, I dig transparent command prompts so I run console. Protip: Setup console2 to run with bash by replacing the shell in settings, e.g.:
Install OSS Maker Developer tools
The core tools I’ve used (either as compilers, IDEs of convenience, etc) consist of:
Install Visual Studio Express (Or better)
I various Netduino and .NET projects and Visual Studio is tip top as far as IDEs go. For most at home projects, VS Express is enough.
When using visual studio, there are a number of useful plugins, but one I always add is CodeMaid.
I loves me some cygwin but VirtualBox gets me anything that I can’t get with it. For example, I built Android recently and this is a task made much simpler with package managers.
I typically run Ubuntu in VMs because it’s well supported.
I write Android apps so Android Studio is the cat’s meow. The Windows installer is pretty straightforward.
I code late, flux is helpful in keeping me from getting eye strain and helps me sleep after a late night.