# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant::Config.run do |config|
  # All Vagrant configuration is done here. The most common configuration
  # options are documented and commented below. For a complete reference,
  # please see the online documentation at vagrantup.com.

  # host name to use for the guest machine
  config.vm.host_name = 'whimsy'

  # Every Vagrant virtual environment requires a box to build off of.
  config.vm.box = "precise32"

  # The url from where the 'config.vm.box' box will be fetched if it
  # doesn't already exist on the user's system.
  config.vm.box_url = "http://files.vagrantup.com/precise32.box"

  # Boot with a GUI so you can see the screen. (Default is headless)
  # config.vm.boot_mode = :gui

  # Assign this VM to a host-only network IP, allowing you to access it
  # via the IP. Host-only networks can talk to the host machine as well as
  # any other machines on the same network, but cannot be accessed (through this
  # network interface) by any external networks.
  # config.vm.network :hostonly, "192.168.33.10"

  # Assign this VM to a bridged network, allowing you to connect directly to a
  # network using the host's network device. This makes the VM appear as another
  # physical device on your network.
  # To find the bridged devices, the following command can be used:
  # $ VBoxManage list bridgedifs | grep "^Name"
  # Note: VBoxManage is found in the VirtualBox installation directory
  # config.vm.network :bridged, :bridge => 'eth1'
  # For Windows, it might be something like:
  # config.vm.network :bridged, :bridge => 'Intel(R) PRO/1000 PL Network Connection'

  # Forward a port from the guest to the host, which allows for outside
  # computers to access the VM, whereas host only networking does not.
  # config.vm.forward_port 3000, 3000

  # Provision VM using chef
  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = "cookbooks"
    chef.add_recipe "whimsy"
    chef.json = {
      :user => ENV['USER']
    }
  end

  # Speed up network access
  # config.vm.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
  # config.vm.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]

  # Adjust amount of memory
  # config.vm.customize ["modifyvm", :id, "--memory", 1024]

  # share svn folder if we can find a checkout of the foundation repository
  require 'pathname'
  path = Pathname.new(ENV['SVN_ROOT'] || __FILE__).realpath
  while not path.root?
    path = path.parent
    if (path+'foundation/.svn').exist?
      config.vm.share_folder "shared-svn", "/mnt/svn", path.to_s
      break
    end
  end
end
