The first time I powered on the Surface I didn’t quite know what to expect. It has been so long since I used Windows to do anything other than open up a web browser. I was a little nervous. After all, I’m supposed to be the “computer guy” in my family, but there I was with no clue what I was doing.

After running its welcome animation the Surface guided me through the setup steps. I put in my registration information, created an account, and got to the desktop screen. I’ve used Windows enough to have a general idea of how to find things. At that point, though, if you had said to me “Ok, now go make a website” I would have looked at you and laughed.

The first thing I did was upgrade. The Surface came with Windows 8.1, but Windows 10 just came out so I wanted to update and see how this new universal binary worked. That was one of the reasons I got a Windows machine to begin with. After clunking around different screens for a bit I was able to find the upgrade routine and start installing Windows 10. Awesome.

The install finished. On a mac I would go about installing all my software. I figured I’d do the same thing for the Surface, but I wasn’t really sure what software.


With some help from my Windows bent friends I installed the following onto the machine:

Git Bash and the Command Prompt

The Command Prompt in Windows is similar to a Mac Terminal window, but also very different. Things got a lot easier thanks to Eric Mann, who walked me through installing Git Bash in my PATH. I was even able to get vim going. It helped that Eric hopped on the phone and walked me through the installation and setup of most of it.

With a somewhat bash-like environment, I was off to the races. The Windows Command Prompt has started to become a relatively familiar place. I just have to remember to use \ instead of / to separate directories. I’ve stuck with the standard Windows Command Prompt instead of the Git Bash environment. I feel I have more control over the machine in the standard prompt.

Getting Node going was as easy as running the installer. Composer, however, was a bit more challenging. It requires you to have the PHP executable available with the proper extensions turned on. It took a little googling around, but I was finally able to add PHP to my PATH and get the conf file set up to turn on various extensions. Once that was complete and I pointed the Composer installer at the PHP executable it was happy enough to finish and give me the composer command.

Using NPM, which comes with Node, I was able to globally install grunt-cli, bower, and yo. Then I used composer to globally install PHP Code Sniffer and cloned down the WordPress rules. These are tools that can be easily installed inside a VM, but I find it much easier to run them on my local machine.

After a few more days I got fed up with scp enough that I went looking for a version of rsync for Windows. I found cwRsync, which comes from the Cygwin set of tools. I have generally been warned off of Cygwin, but so far the standalone version of rsync has held up pretty well and makes file transfer operations much, much faster.

After some experimenting I was also pretty disappointed with the built in Windows Command Prompt. It only allows one session per window, copy and paste operations are a nightmare (highlight and click to copy, right click to paste? what?), and the buffer maxes out at 999 lines. The scroll back buffer became a real problem while working on getting Vagrant running. I found a workaround by sending the prompt output to a file, but it was pretty clunky.

So I went to Google looking for an improved experience and stumbled on Scott Hanselman’s blog, which I’ve been told good things about. I decided to give ConEmu with Clink a try. It is a wrapper around the built in Windows Command Prompt (and other text environments like Git Bash if you’d like), which makes them nicer to use. It uses a tabbed interface for multiple sessions, gives me CTRL-V pasting (yay!), and has the ability to set a much larger buffer for scroll back. Launching multiple elevated prompts in different tabs is a breeze. So far I’m liking the experience. I wouldn’t call the interface pretty, but it’s certainly useful and gives me some configuration options.


You may have noticed that I did not put Virtual Box in the list of installed software. I decided to try going full Windows native and use the built in virtualizer called Hyper-V.

To enable Hyper-V, go to the Control Panel, choose Programs, and then locate the option to Turn Windows Features on or off under the ‘Programs and Features’ heading. Once done you have to restart the computer and Hyper-V will be available to you.

Once Hyper-V was available, I actually found getting Vagrant going to be the most difficult challenge I’ve faced so far. I ran through the instructions in Eric’s Hyper-VVV post, opting at first to put the modifications in a Customfile instead of hacking the Vagrantfile directly. If you add this to the root of a fresh VVV checkout, you can spin up a Hyper-V based environment pretty quickly. The ‘Customfile’ is in VVV’s .gitignore, and is included as part of the VVV Vagrantfile. This means we can inject the customizations without modifying VVV itself.

The challenge with VVV was the SMB mounted shares. Options and permissions were a nightmare. VVV in particular has some special setup for the www folder. After much tinkering, I was able to work out the SMB mount options to get everything running. The time sink was finding documentation on what options were available. Once the right flags were in place, Hyper-V booted up my copy of VVV happily. Hopefully the time I spent here will help save you some.

It was a small enough amount of code that I submitted a PR to add Hyper-V support to VVV out of the box. If all goes well this will be added to the VVV Vagrantfile soon and setting up the Customfile will become unnecessary.

Hyper-V Virtual Switches

One thing to do before you even try to run the first vagrant up is set up a virtual switch. I ran vagrant up first and it told me to go make a switch. After I did, Vagrant still didn’t have a network connection. I tried to remove it and do it again, but it failed and killed any and all networking on the Surface.

I was able to get networking back by deleting the network drivers which forced them to reinstall themselves. After that, however, Hyper-V refused to add a virtual network switch at all. I never did work out what happened. After fighting with it for 3 days and getting nowhere I reinstalled Windows. This time I created the network switch first before even installing Vagrant. I then had to reinstall all of the other software.


When it came time to pick a coding tool for Windows I was at a bit of a crossroads. I have been a die-hard Sublime Text user on my Mac, but for some reason have a mental block that it is not really cross platform. They do have a Windows version, but I decided to try something new. I didn’t have the cash laying around for a license of PHPStorm, and have never been that enthusiastic about running a Java based IDE on my machine, so I passed on it also.

I finally settled on Github’s Atom editor. I gave it a try when it first came out, but it felt weird and there were almost no packages available to customize and extend it. Now that it has had some time to mature, I decided to give it another try. It still feels weird after Sublime Text, but everything feels weird right now on Windows so it’s less of a bother. The package directory is also much healthier now and I was able to add some neat tools to it. Furthermore, the editor is Node based, so I feel much more comfortable hacking at it myself to add any missing features. The search is not quite as fast as Sublime Text, but it’s pretty good.

Alright, Windows! Now What?

So the software is installed and configured. VVV is up and running. I have my command line tools going. Communication is set up and ready. Now I just have to make myself use it.

It has been very tempting to switch back and use the Mac when I hit a snag, but that’s what this is about. I want to be comfortable with both systems. I’ve been working for the last several days exclusively on the Surface, and while I wouldn’t say I’m at 100% productivity yet, I’m doing pretty well.

Now if I could just remember which key was Control. Or Command? Or was it alt/option, wait—oh crap, this computer scrolls backwards…