require 'rake' desc "Hook our dotfiles into system-standard positions." task :install => [:submodule_init, :submodules] do puts puts "======================================================" puts "Welcome to YADR Installation." puts "======================================================" puts #install_homebrew if RUBY_PLATFORM.downcase.include?("darwin") install_rvm_binstubs # this has all the runcoms from this directory. file_operation(Dir.glob('git/*')) if want_to_install?('git configs (color, aliases)') file_operation(Dir.glob('irb/*')) if want_to_install?('irb/pry configs (more colorful)') file_operation(Dir.glob('ruby/*')) if want_to_install?('rubygems config (faster/no docs)') file_operation(Dir.glob('ctags/*')) if want_to_install?('ctags config (better js/ruby support)') file_operation(Dir.glob('vimify/*')) if want_to_install?('vimification of command line tools') file_operation(Dir.glob('{vim,vimrc}')) if want_to_install?('vim configuration (highly recommended)') Rake::Task["install_prezto"].execute install_fonts if RUBY_PLATFORM.downcase.include?("darwin") success_msg("installed") end task :install_prezto do if want_to_install?('zsh enhancements & prezto') install_prezto end end task :update => [:install] do #TODO: for now, we do the same as install. But it would be nice #not to clobber zsh files end task :submodule_init do unless ENV["SKIP_SUBMODULES"] run %{ git submodule update --init --recursive } end end desc "Init and update submodules." task :submodules do unless ENV["SKIP_SUBMODULES"] puts "======================================================" puts "Downloading YADR submodules...please wait" puts "======================================================" run %{ cd $HOME/.yadr git submodule foreach 'git fetch origin; git checkout master; git reset --hard origin/master; git submodule update --recursive; git clean -dfx' git clean -dfx } puts end end task :default => 'install' private def run(cmd) puts "[Running] #{cmd}" `#{cmd}` unless ENV['DEBUG'] end def install_rvm_binstubs puts "======================================================" puts "Installing RVM Bundler support. Never have to type" puts "bundle exec again! Please use bundle --binstubs and RVM" puts "will automatically use those bins after cd'ing into dir." puts "======================================================" run %{ chmod +x $rvm_path/hooks/after_cd_bundler } puts end def install_homebrew puts "======================================================" puts "Installing Homebrew, the OSX package manager...If it's" puts "already installed, this will do nothing." puts "======================================================" run %{ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"} puts puts puts "======================================================" puts "Installing Homebrew packages...There may be some warnings." puts "======================================================" run %{brew install ack ctags git hub} puts puts end def install_fonts puts "======================================================" puts "Installing patched fonts for Powerline." puts "======================================================" run %{ cp -f $HOME/.yadr/fonts/* $HOME/Library/Fonts } puts end def install_prezto puts puts "Installing Prezto (ZSH Enhancements)..." unless File.exists?(File.join(ENV['ZDOTDIR'] || ENV['HOME'], ".zprezto")) run %{ ln -nfs "$HOME/.yadr/zsh/prezto" "${ZDOTDIR:-$HOME}/.zprezto" } # The prezto runcoms are only going to be installed if zprezto has never been installed file_operation(Dir.glob('zsh/prezto/runcoms/z*'), :copy) end puts puts "Overriding prezto ~/.zpreztorc with YADR's zpreztorc to enable additional modules..." run %{ ln -nfs "$HOME/.yadr/zsh/prezto-override/zpreztorc" "${ZDOTDIR:-$HOME}/.zpreztorc" } puts puts "Creating directories for your customizations" run %{ mkdir -p $HOME/.zsh.before } run %{ mkdir -p $HOME/.zsh.after } run %{ mkdir -p $HOME/.zsh.prompts } end def want_to_install? (section) if ENV["ask"]=="true" puts "Would you like to install configuration files for: #{section}? [y]es, [n]o" STDIN.gets.chomp == 'y' else true end end def file_operation(files, method = :symlink) files.each do |f| file = f.split('/').last source = "#{ENV["PWD"]}/#{f}" target = "#{ENV["HOME"]}/.#{file}" puts "======================#{file}==============================" puts "Source: #{source}" puts "Target: #{target}" if File.exists?(target) || File.symlink?(target) puts "[Overwriting] #{target}...leaving original at #{target}.backup..." run %{ mv "$HOME/.#{file}" "$HOME/.#{file}.backup" } end if method == :symlink run %{ ln -nfs "#{source}" "#{target}" } else run %{ cp -f "#{source}" "#{target}" } end # Temporary solution until we find a way to allow customization # This modifies zshrc to load all of yadr's zsh extensions. # Eventually yadr's zsh extensions should be ported to prezto modules. if file == 'zshrc' File.open(target, 'a') do |zshrc| zshrc.puts('for config_file ($HOME/.yadr/zsh/*.zsh) source $config_file') end end puts "==========================================================" puts end end def success_msg(action) puts "" puts " _ _ _ " puts " | | | | | | " puts " | |___| |_____ __| | ____ " puts " |_____ (____ |/ _ |/ ___) " puts " _____| / ___ ( (_| | | " puts " (_______\_____|\____|_| " puts "" puts "YADR has been #{action}. Please restart your terminal and vim." end