Installing a new SSD in my desktop computer forced me to reinstall everything. So I decided on a Linux/Windows dual-boot. However I couldn't make up my mind if I should go with Windows 7, which has proven its worth over the last few years, or try Windows 8.
I most definitely didn't want to create 3 partitions and triple-boot, because if I later had decided to scrap Windows 8 I'd have to mess around with the partition-scheme and hope that everything works afterwards. If however I like Windows 8, against all odds, I'd be stuck with Windows 7 on one partition.

Finding out that you could install Windows 8 in a VHDx file (including TRIM support) and then boot directly into it was the solution I was looking for.

After all, if Windows 8 turns out to be a disaster, I could just delete the VHDx file and remove the entry from the boot manager. If however, I start to like Windows 8 and never use Windows 7 again, I could just upgrade Windows 7, get rid of the VHDx file and the remove the entry from the boot manager.

Partitioning

I decided to create two partitions: 20GB for Arch Linux and the remaining 220GB for Windows 7, which would also contain the Windows 8 VHDx file.
I used a gParted Live USB stick, making sure that the partitions are aligned correctly. By creating the partitions outside the Windows installer it was easy to force the Windows installer to instal into a single partition only, without creating a separate boot/recovery partition.
Note that I did not create a swap partition for Linux as I do have 18GB of RAM in the machine. This should be plenty for my current usage scenario. If, however, it turns that I indeed need swap space, I can just create a swap file within the Linux file system and be done with it.

Installing Windows

Windows 7

With the partitions in place I installed Windows 7. Nothing fancy there. Following the first few reboots and some driver installs I started to install Windows 8.

Windows 8

When it came to selecting a partition for Windows 8 I pressed Shift+F10 to open the command prompt and use diskpart to create the VHDx file.
diskpart> create vdisk file="g:\win8.vhdx" maximum=50000 type=expandable
diskpart> select vdisk
diskpart> attach vdisk
After exiting diskpart and the command prompt I refreshed the list of disks and partitions in the setup program and the newly created VHDx file showed up. I selected the partition and continued the installation normally from there.
Hint: A warning is displayed, saying that Windows cannot be installed on the newly created VHDx partition, because the BIOS might be unable to boot from it. However, the 'Next' button is not disabled and the installation can be continued. (Took me a while to figure that one out...)

Windows Bootmanager Woes

After a successful Windows 8 installation you will be presented with the new graphical Windows 8 boot menu.

Because this new boot menu loads parts of Windows 8 already, it has to restart the machine if you'd like to boot into Windows 7. This is a really annoying behaviour, made worse by the fact that I do have an Adaptec RAID controller installed, which takes about 1 minute to boot.

Luckily there is a solution:
Boot into Windows 8 and start msconfig.exe. On the 'boot'-tab set Windows 7 as the default entry. This will turn off the graphical boot menu and use text-mode only, allowing you to start Windows 7 without the restart.
If there are no items in the 'boot'-tab and/or every control is disabled, start diskpart and mark your Windows 7 partition as active. Restart msconfig.exe and you should be able to make changes.

Windows 7 and Windows 8 were up and running now, including a sanely behaving boot manager.

Linux

The installation of Linux was just a regular installation to the empty partition using ext4, with GRUB being installed into the MBR. Again, nothing fancy there.

Final Note

With everything in place, including TRIM support with each OS, GRUB lets me choose first between Linux and Windows and if Windows is selected the Windows boot menu offers Windows 7 or Windows 8 as options. Perfect.
Software I Use (2013 Edition)
02013-Mar-12, Tue 12:00 in /blah [permalink]
More than 2 years have passed since I've assembled a list of the software I use. So I guess it's time for an update.

Windows 7

  • 7-zip
    Archiving and compression tool.
  • Audacity
    Audio editing.
  • Blender
    3D modelling/animation/rendering.
  • Canon Digital Professional
    Canon RAW converter. Distributed with the hardware. Only updates are available on Canon's website.
  • clamwin
    Open-source anti-virus.
  • Console
    The default Windows console is a blight. Console 2 is the remedy for that. Now if there just were a good shell for Windows...
  • cwRsync
    I use rsync for all my local backups, so I needed a Windows version of it. cwRsync is exactly that.
  • DAEMON Tools Lite
    Not having to grab physical discs, insert them into a drive and have the drive being really loud was reason enough for me to store images of all my discs on a big HDD. Then I use DEAMON Tools to mount the images if need be. Much quicker and convenient, but most of all: silent.
  • Desktops + DesktopsUtil
    Desktops allows to create multiple desktops and access them via hotkeys. For me it's simply a faster way to access applications directly, instead of having to press Alt-Tab varying/multiple times. DesktopsUtil is a tiny tool I wrote to control Desktops from the command-line.
  • Debugging Tools for Windows
    The only debugger for Windows I need.
  • f.lux
    Changes the colour-temperature of your screen during the night. I'm not sure if it is the actual colour change that helps me to fall asleep faster at night or if it is just learnt behaviour. Nonetheless, it works for me and that's enough.
  • Firefox [add-ons]
    Firefox is a web browser. Yes, really. For me it's mostly about the Pentadactyl add-on.
  • FishSpeak
    Voice-communication without bells and whistles. Low latency and no speeding-up/down like Skype does.
  • FL Studio
    Digital Audio Workstation.
  • GrafX2
    Old-school pixel graphics editor.
  • grepWin
    Adds find+grep-like functionality to Windows.
  • gVim [plug-ins]
    For a while Vim used to be only a text-editor for me. But over the years it became a philosophy and integral part of my life. That's why a lot of items on this list are either vi-like or allow me to use Vim directly.
  • IcoFX
    Icon editor.
  • Inkscape
    Vector graphics.
  • Lightworks
    Professional video editing software.
  • Microsoft Keyboard Layout Creator
    Tool to create/edit keyboard layouts.
  • mirkes.de Tiny Hexer
    Hex editor. It's primary web page is long gone, but it's still out there.
  • Photoshop CS
    Well, what is there to say about Photoshop? I still use the 10yr old CS, because I don't see any reason to upgrade.
  • Putty
    SSH client for Windows.
  • Python 2&3
    While Perl is my primary scripting language I also do like Python. It's used by a lot of programs and it's especially useful for writing Vim plug-ins without diving into Vim-script too much.
  • s3cmd
    Amazon S3 client for the command-line. Very useful for (semi-)automatic backups.
  • SharpKeys
    Remap keys on the keyboard, which normally cannot be remapped through a custom keyboard layout.
  • smartmontools
    I use smartmontools in a cron'ed script to monitor my SSDs and collect long-term stats.
  • SpeedCrunch
    Perfect replacement for the default calculator.
  • SportTracks
    AFAIK unmatched solution to keep track of your training.
  • Steam
    Games and more. And I'm using the opportunity to link to GoG.com also.
  • Strawberry Perl
    Perl for Windows.
  • SumatraPDF
    Tiny and fast PDF viewer.
  • TortoiseHg
    GUI for Mercurial. For some things its more convenient than using the command-line.
  • vifm
    Vi-like file manager for the console. Among other things it makes mass-renaming a no-brainer.
  • VLC
    Used to be my video player of choice only. Then I started to listen to podcasts with it, because it allowed me to increase the playback speed. This is most appreciated if the host/guest is talking annoyingly slow. So it also became my general audio player.
  • WinDirStat
    Renders a graphical view of the files and their sizes on your disks. Great to find what is taking up a lot of space or where gazillions of files are located.
    Rant: WinSxS really is an ugly concept.
  • XnView
    Image-viewer and conversion, editing, batch-processing, ...

OS X

  • Audacity
    Audio editing.
  • Blender
    3D modelling/animation/rendering.
  • f.lux
    Changes the colour-temperature of your screen during the night. I'm not sure if it is the actual colour change that helps me to fall asleep faster at night or if it is just learnt behaviour. Nonetheless, it works for me and that's enough.
  • Firefox [add-ons]
    Firefox is a web browser. Yes, really. For me it's mostly about the Pentadactyl add-on.
  • FishSpeak
    Voice-communication without bells and whistles. Low latency and no speeding-up/down like Skype does.
  • GrafX2
    Old-school pixel graphics editor.
  • Grand Perspective
    Renders a graphical view of the files and their sizes on your disks. Great to find what is taking up a lot of space or where gazillions of files are located.
  • HexFiend
    Hex editor.
  • homebrew
    Packet manager for the UNIX side of OS X.
    • htop-osx
      Replacement for top.
    • smartmontools
      I use smartmontools in a cron'ed script to monitor my SSDs and collect long-term stats.
    • Vim [plug-ins]
      For a while Vim used to be only a text-editor for me. But over the years it became a philosophy and integral part of my life. That's why a lot of items on this list are either vi-like or allow me to use Vim directly.
    • vifm
      Vi-like file manager for the console. Among other things it makes mass-renaming a no-brainer.
  • Inkscape
    Vector graphics.
  • iTerm2
    While OS X's Terminal has mostly caught up with iTerm2, it fails epically in one regard: It uses the annoying fullscreen-mode of OS X 10.7 and above, instead of just making the window fullscreen and always-on-top like iTerm2 does. So Cmd-Tabbing is much quicker with iTerm2.
  • KeyRemap4MacBook
    Allows me to remap some keys to make German and US International Keyboards more like the US Keyboard. More about that in another post.
  • MacVim
    Often has rendering bugs, where parts of the text wouldn't update, so I don't use MacVim for getting things done anymore. I rather use Vim, installed via homebrew, on the command line. However I still keep MacVim around and have it open files by default. Wouldn't want to be thrown into XCode or TextEdit every time I open a code or text file.
  • Osirix
    A professional DICOM (medical images) viewer.
  • PCKeyboardHack
    I use it to map Escape to the CapsLock key.
  • Perl
    Call me strange, but I really like Perl. (Like many others.)
  • Plot
    For the rare occasion that I need to visualise a function Plot comes in handy.
  • Python 2&3
    While Perl is my primary scripting language I also do like Python. It's used by a lot of programs and it's especially useful for writing Vim plug-ins without diving into Vim-script too much.
  • SpeedCrunch
    Perfect replacement for the default calculator.
  • SynalizeIt!
    A more sophisticated hex editor than HexFiend.
  • TortoiseHg
    (Dependencies installed via homebrew)
  • Ukelele
    Edit/create OS X keyboard layouts.
  • VirtualBox
    I only need it to run a Windows XP VM to access my old scanner.
  • VLC
    Used to be my video player of choice only. Then I started to listen to podcasts with it, because it allowed me to increase the playback speed. This is most appreciated if the host/guest is talking annoyingly slow. So it also became my general audio player.
  • Xee
    Quick and tiny image-viewer, that I find more intuitive to use than Preview.
  • XtraFinder
    Makes the default Finder a bit more useful. I still prefer to use vifm if I can.

FreeBSD

(Text-mode only via SSH)
  • DenyHosts
    Helps to keep the daily security mails short and sweet.
  • getmail + maildrop
    My MRA and MDA of choice.
  • Ledger
    Finance software that uses a text file for its data. In other words: allows me to keep my ledger within Vim. Instant win.
  • Lynx
    Text-based web browser. I primarily use it to render HTML-mails in mutt.
  • MCabber
    XMPP client with OTR support.
  • Mercurial
    When I made the jump to a DVCS, it was easier to use (coming from Subversion) and had better Windows support. Nowadays the differences to git are minute.
  • mutt
    For me it's the best MUA. Fast, configurable and allows me to compose my mails with Vim.
  • Newsbeuter
    Crashes sometimes and consumes a huge amount of memory, but it is highly configurable.
  • Perl
    Call me strange, but I really like Perl. (Like many others.)
  • Polipo
    Caching web-proxy. A bit unstable.
  • Python 2&3
    While Perl is my primary scripting language I also do like Python. It's used by a lot of programs and it's especially useful for writing Vim plug-ins without diving into Vim-script too much.
  • smartmontools
    I use smartmontools in a cron'ed script to monitor my SSDs and collect long-term stats.
  • Tarsnap
    Secure backups. Can't laud it enough. I really do like Tarsnap.
  • tmux
    Terminal multiplexer.
  • vifm
    Vi-like file manager for the console. Among other things it makes mass-renaming a no-brainer.
  • Vim [plug-ins]
    For a while Vim used to be only a text-editor for me. But over the years it became a philosophy and integral part of my life. That's why a lot of items on this list are either vi-like or allow me to use Vim directly.

Linux

(Used for development/testing only)
  • Firefox [add-ons]
    Firefox is a web browser. Yes, really. For me it's mostly about the Pentadactyl add-on.
  • htop
    Replacement for top.
  • Perl
    Call me strange, but I really like Perl. (Like many others.)
  • Python 2&3
    While Perl is my primary scripting language I also do like Python. It's used by a lot of programs and it's especially useful for writing Vim plug-ins without diving into Vim-script too much.
  • SLiM
    Simple display manager for X11.
  • smartmontools
    I use smartmontools in a cron'ed script to monitor my SSDs and collect long-term stats.
  • TortoiseHg
    GUI for Mercurial. For some things its more convenient than using the command-line.
  • urxvt
    Unicode enabled fork of rxvt, a terminal emulator.
  • vifm
    Vi-like file manager for the console. Among other things it makes mass-renaming a no-brainer.
  • Vim [plug-ins]
    For a while Vim used to be only a text-editor for me. But over the years it became a philosophy and integral part of my life. That's why a lot of items on this list are either vi-like or allow me to use Vim directly.
  • wmii
    Tiled window manager.

Firefox Add-ons

  • 1-click Youtube Video Downloader
    Enables me to download longer videos for watching them offline and, thanks to VLC, with increased playback speed.
  • CookieMonster
    Change cookie-settings for the current site via the context menu.
  • DownThemAll!
    Mass-download things from a webpage.
  • Flashblock
    I'd prefer not having Flash installed at all. But until then Flashblock makes the whole thing more bearable.
  • NoScript
    Makes things faster and less annoying. However, it often breaks even the simplest of links. W.T.F.?!
    Rant: The web's broken in my eyes, since people use JavaScript instead of a simple anchor-tag. It's all going to JS-hell in a handbasket...
  • PassingPix
    To conveniently submit things to PassingPix.
  • Pentadactyl
    Makes Firefox Vi-like.
  • Stylish
    Helps to turn off distracting, annoying or time-wasting elements on web-pages. Yes I'm talking about comments and suggestions on YouTube!
  • Tree Style Tab
    Having tabs on the side instead of the top is much more reasonable, since wide screens are the norm. It wastes less vertical space and allows more and wider tabs to be at the screen at once. Also they can be displayed hierarchical which is great.

Vim plug-ins

By default Windows allows only an administrator account to create symlinks. This behaviour can easily be changed via the Group Policy Editor. Unless you are stuck with the Home Premium edition, which doesn't include the Group Policy Editor.

However, the Windows API can be used to add the required privilege to a regular user's account and enable it. That's what the following executable does: EnableUserSymlinks.zip.

To use it, run the executable at a command prompt run as administator, with the user's name and password as parameters, like this:

EnableUserSymlinks <username> <password>
(You may have to quote your username or password if it contains spaces or other characters that are treated by the console in a special way. Best to always quote them, unless you know what you are doing)
EnableUserSymlinks "JohnDoe" "12345"

Running an executable with elevated privileges and even handing over your user's credentials is a risky business, so here's the source code, in case you want to look at it and/or compile the application yourself, to make sure nothing malign is going on under the hood: EnableUserSymlinks.cpp