dotar/Rakefile

271 lines
9.5 KiB
Ruby
Raw Normal View History

require 'rake'
require 'fileutils'
require File.join(File.dirname(__FILE__), 'bin', 'yadr', 'vundle')
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
2012-08-10 02:47:45 +08:00
# 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)')
2012-08-10 02:47:45 +08:00
file_operation(Dir.glob('ctags/*')) if want_to_install?('ctags config (better js/ruby support)')
2012-11-12 10:15:43 +08:00
file_operation(Dir.glob('tmux/*')) if want_to_install?('tmux config')
file_operation(Dir.glob('vimify/*')) if want_to_install?('vimification of command line tools')
if want_to_install?('vim configuration (highly recommended)')
file_operation(Dir.glob('{vim,vimrc}'))
Rake::Task["install_vundle"].execute
end
Rake::Task["install_prezto"].execute
install_fonts if RUBY_PLATFORM.downcase.include?("darwin")
install_term_theme if RUBY_PLATFORM.downcase.include?("darwin")
2012-08-10 02:47:45 +08:00
success_msg("installed")
end
task :install_prezto do
if want_to_install?('zsh enhancements & prezto')
install_prezto
end
end
task :update do
Rake::Task["vundle_migration"].execute if needs_migration_to_vundle?
Rake::Task["install"].execute
#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
2012-08-10 02:47:45 +08:00
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 -df'
git clean -df
}
puts
end
2012-08-10 02:47:45 +08:00
end
desc "Performs migration from pathogen to vundle"
task :vundle_migration do
puts "======================================================"
puts "Migrating from pathogen to vundle vim plugin manager. "
puts "This will move the old .vim/bundle directory to"
puts ".vim/bundle.old and replacing all your vim plugins with"
puts "the standard set of plugins. You will then be able to "
puts "manage your vim's plugin configuration by editing the "
puts "file .vim/vundles.vim"
puts "======================================================"
Dir.glob(File.join('vim', 'bundle','**')) do |sub_path|
run %{git config -f #{File.join('.git', 'config')} --remove-section submodule.#{sub_path}}
# `git rm --cached #{sub_path}`
FileUtils.rm_rf(File.join('.git', 'modules', sub_path))
end
FileUtils.mv(File.join('vim','bundle'), File.join('vim', 'bundle.old'))
end
desc "Runs Vundle installer in a clean vim environment"
task :install_vundle do
puts "======================================================"
puts "Installing vundle."
puts "The installer will now proceed to run BundleInstall."
puts "Due to a bug, the installer may report some errors"
puts "when installing the plugin 'syntastic'. Fortunately"
puts "Syntastic will install and work properly despite the"
puts "errors so please just ignore them and let's hope for"
2013-03-21 22:45:16 +08:00
puts "an update that fixes the problem!"
puts "======================================================"
puts ""
run %{
cd $HOME/.yadr
git clone https://github.com/gmarik/vundle.git #{File.join('vim','bundle', 'vundle')}
}
Vundle::update_vundle
end
2012-08-10 02:47:45 +08:00
task :default => 'install'
private
def run(cmd)
puts "[Running] #{cmd}"
2012-08-10 02:47:45 +08:00
`#{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
2013-01-27 03:07:46 +08:00
run %{which brew}
unless $?.success?
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)"}
end
puts
puts
puts "======================================================"
puts "Installing Homebrew packages...There may be some warnings."
puts "======================================================"
2013-03-29 23:25:27 +08:00
run %{brew install zsh ack ctags git hub tmux reattach-to-user-namespace the_silver_searcher}
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_term_theme
puts "======================================================"
puts "Installing iTerm2 solarized theme."
puts "======================================================"
run %{ /usr/libexec/PlistBuddy -c "Add :'Custom Color Presets':'Solarized Light' dict" ~/Library/Preferences/com.googlecode.iterm2.plist }
run %{ /usr/libexec/PlistBuddy -c "Merge 'iTerm2/Solarized Light.itermcolors' :'Custom Color Presets':'Solarized Light'" ~/Library/Preferences/com.googlecode.iterm2.plist }
run %{ /usr/libexec/PlistBuddy -c "Add :'Custom Color Presets':'Solarized Dark' dict" ~/Library/Preferences/com.googlecode.iterm2.plist }
run %{ /usr/libexec/PlistBuddy -c "Merge 'iTerm2/Solarized Dark.itermcolors' :'Custom Color Presets':'Solarized Dark'" ~/Library/Preferences/com.googlecode.iterm2.plist }
puts "======================================================"
puts "To make sure your profile is using the solarized theme"
puts "Please check your settings under:"
puts "Preferences> Profiles> [your profile]> Colors> Load Preset.."
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 }
2012-11-26 23:41:35 +08:00
2013-03-22 02:24:12 +08:00
if ENV["SHELL"].include? 'zsh' then
puts "Zsh is already configured as your shell of choice. Restart your session to load the new settings"
else
puts "Setting zsh as your default shell"
run %{ chsh -s /bin/zsh }
end
end
2012-08-10 02:47:45 +08:00
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
2012-08-10 02:47:45 +08:00
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) || (File.symlink?(target) && File.readlink(target) != source))
puts "[Overwriting] #{target}...leaving original at #{target}.backup..."
run %{ mv "$HOME/.#{file}" "$HOME/.#{file}.backup" }
end
2012-08-10 02:47:45 +08:00
if method == :symlink
run %{ ln -nfs "#{source}" "#{target}" }
2012-08-10 02:47:45 +08:00
else
run %{ cp -f "#{source}" "#{target}" }
end
2012-08-10 02:47:45 +08:00
# 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.
2012-08-10 02:47:45 +08:00
if file == 'zshrc'
File.open(target, 'a') do |zshrc|
zshrc.puts('for config_file ($HOME/.yadr/zsh/*.zsh) source $config_file')
2012-08-10 02:47:45 +08:00
end
end
puts "=========================================================="
puts
2012-08-10 02:47:45 +08:00
end
end
def needs_migration_to_vundle?
File.exists? File.join('vim', 'bundle', 'tpope-vim-pathogen')
end
def list_vim_submodules
result=`git submodule -q foreach 'echo $name"||"\`git remote -v | awk "END{print \\\\\$2}"\`'`.select{ |line| line =~ /^vim.bundle/ }.map{ |line| line.split('||') }
Hash[*result.flatten]
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