Building a Windows 10 Development VM from scratch

3 minute read (735 words)

Rebuilding windows dev VM from scratch, reminds me why people put up an old build for so long. What a painful process!

I did wonder if I could get away with mssql on linux, and tried the mssql docker image, which hosed my linux kernel. That’s too many yaks for one morning.

Windows Install

Download from https://www.microsoft.com/en-us/software-download/windows10ISO

  • Windows 10 Fall Creators Update
  • English
  • 64-bit

Start a new VM with the iso. Run the install. Install hangs on windows logo. Hard reset, try again several times. Eventually it works. Even managed to crash my host entirely.

Shut down the VM with clean windows install.

Take a backup

backing up a vm

cd VirtualBox\ VMs/  
base=.  
src=win10-2018  
ls -lh $src  
du -sh $src  
df -h .  
tar -cpC $base $src -P | pv -s $(du -sb $base/$src | awk '{print $1}') | lz4 >> $src.tar.lz4  
# 8.79GiB 0:00:43 [ 205MiB/s] [=====================================================================> ] 99%  

Gist for backing up with lz4

Updates! Updates! Updates!

(as Ballmer once said?)

  • poke windows updates until it finally decides there’s no more
  • reboot
  • poke windows updates until it finally decides there’s no more
  • reboot
  • poke windows updates until it finally decides there’s no more
  • reboot
  • Install virtualbox guest additions 5.1.34
  • reboot
  • shutdown
  • backup again
Photo of a lit pool at night

The Snapshot Trials

VirtualBox has a neat snapshot feature, so you can try out a whole tree of attempts at installs then squash them into the final image or roll them back.

Take a snapshot as a starting point for trying out the eternally broken boxstarter script.

Boxstarter

Boxstarter script, mostly working in win 10 now, but so much more to do on top that, including windows branch of dotfiles (always needs work). Read the script to see what it configures and installs.

You’ll want to watch this vid at at least 2x playback speed:

https://youtu.be/Hiz9_i67B3o

annoyances / setup - grab reg keys

  • disable screensaver
  • hide task manager when minimized
    • HKCU\Software\Microsoft\Windows\CurrentVersion\TaskManager\Preferences - binary. sigh.settings > m
  • multitasking > snap (these have been rolled in to my boxstarter, but not tested there).
    • HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\SnapAssist - 0
      HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\JointResize - 0
  • all sounds off - generates 100s of reg keys, one for each event
  • mute

get ready for dev

  • vs sign-in
  • extension updates
    • ssdt - external download popup, installs sql server 2016 localdb, takes forever, requires reboot
    • azure - leave for now, also external
  • jetbrains toolbox (sign in)
    • resharper
    • datagrip

VS Extensions

cinst editorconfig.vs vsvim ihateregions -y - bit-rotten, didn’t work - I should contact the VsVim package maintainer. Oh never mind that would be me then.

Extensions to install manually:

Something to look in to https://chocolatey.org/packages/batch-install-vsix

Git setup

GitExtensions defaults to the program files putty, but the chocolatey one is newer and github deprecated the comms the old one uses.

Change all the putty paths in git extensions to start with C:\ProgramData\chocolatey\bin\...

Workspace 1_193

https://git-extensions-documentation.readthedocs.io/en/latest/settings.html

Settings that are specific to Git Extensions and apply globally will be stored in a file called GitExtensions.settings either in the user’s application data path or with the program. The location is dependant on the IsPortable setting in the GitExtensions.exe.config file that is with the program.

i.e .C:\Users\tim\AppData\Roaming\GitExtensions\GitExtensions

Key Setup

  • Map a read-write folder to outside the VM to keep the putty keys in (this avoids regenerating the key if the VM is regenerated / rolled back, and also means keys aren’t copied around with the VM image which makes them a bit easier to keep track of
  • git extensions > tools > putty > generate
  • set passphrase
  • save pub & private keys to shared folder
  • grab the public key from the generator, paste into github & bitbucket website account ssh configs
  • git extensions > tools > putty > start agent > add keys

DotMatrix

Start git bash from git extensions, not the start menu (to get ssh set up right).

cd /c/repo && mkdir tim && cd tim  
git clone git@github.com:timabell/dotmatrix.git  
cd dotmatrix/  
git checkout windows  
bin/install  
git st  

VS Settings

Workspace 1_194

VS > Options > Environment > Import/export > set the path to the dotmatrix copy

resharper settings

Workspace 1_195

VS > Resharper > manage options > right-click the gap > add layer > open settings file > select the one from the dotmatrix

More settings

  • VsVim settings
  • git config
  • email/name

More installs

redgate tools

  • dev bundle:
    • sql prompt - for VS too
    • compare
    • data compare
    • doc
  • toolbelt bundle
    • readyroll

firefox

  • sign-in
  • ghostery settings - disable annoying purple dot

Tweet This || Post to LinkedIn || Page Source

Subscribe for updates on software development, contracting, side projects, blog posts and who knows what else. Read the archives for an idea of content.

Mailing list powered by the excellent buttondown.email.