2012-01-25 14:13:33 +08:00
require 'rake'
2013-03-16 22:47:54 +08:00
require 'fileutils'
2013-03-18 01:31:04 +08:00
require File . join ( File . dirname ( __FILE__ ) , 'bin' , 'yadr' , 'vundle' )
2012-01-25 14:13:33 +08:00
desc " Hook our dotfiles into system-standard positions. "
2012-10-10 14:02:36 +08:00
task :install = > [ :submodule_init , :submodules ] do
2012-03-23 03:53:25 +08:00
puts
puts " ====================================================== "
2012-10-25 23:09:24 +08:00
puts " Welcome to YADR Installation. "
2012-03-23 03:53:25 +08:00
puts " ====================================================== "
puts
2012-09-29 01:38:59 +08:00
2012-10-05 02:42:57 +08:00
install_homebrew if RUBY_PLATFORM . downcase . include? ( " darwin " )
2012-10-03 13:45:26 +08:00
install_rvm_binstubs
2012-09-29 01:38:59 +08:00
2012-08-10 02:47:45 +08:00
# this has all the runcoms from this directory.
2012-09-27 01:23:39 +08:00
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' )
2012-09-27 01:23:39 +08:00
file_operation ( Dir . glob ( 'vimify/*' ) ) if want_to_install? ( 'vimification of command line tools' )
2013-03-16 22:47:54 +08:00
if want_to_install? ( 'vim configuration (highly recommended)' )
2013-12-16 06:18:36 +08:00
file_operation ( Dir . glob ( '{vim,vimrc}' ) )
2013-03-16 22:47:54 +08:00
Rake :: Task [ " install_vundle " ] . execute
end
2012-01-25 14:13:33 +08:00
2012-10-25 22:52:18 +08:00
Rake :: Task [ " install_prezto " ] . execute
2012-01-25 14:13:33 +08:00
2012-10-05 02:42:57 +08:00
install_fonts if RUBY_PLATFORM . downcase . include? ( " darwin " )
2012-09-29 01:38:59 +08:00
2013-03-14 19:56:59 +08:00
install_term_theme if RUBY_PLATFORM . downcase . include? ( " darwin " )
2014-02-04 00:30:23 +08:00
run_bundle_config
2012-08-10 02:47:45 +08:00
success_msg ( " installed " )
end
2012-10-25 22:52:18 +08:00
task :install_prezto do
if want_to_install? ( 'zsh enhancements & prezto' )
install_prezto
end
end
2013-03-16 22:47:54 +08:00
task :update do
Rake :: Task [ " vundle_migration " ] . execute if needs_migration_to_vundle?
2013-03-25 18:25:03 +08:00
Rake :: Task [ " install " ] . execute
2012-10-09 12:38:21 +08:00
#TODO: for now, we do the same as install. But it would be nice
#not to clobber zsh files
end
2012-10-10 14:02:36 +08:00
task :submodule_init do
2012-10-25 23:09:24 +08:00
unless ENV [ " SKIP_SUBMODULES " ]
2013-06-04 10:42:40 +08:00
run %{ git submodule update --init --recursive }
2012-10-25 23:09:24 +08:00
end
2012-10-10 14:02:36 +08:00
end
2012-08-10 02:47:45 +08:00
desc " Init and update submodules. "
task :submodules do
2012-10-25 23:09:24 +08:00
unless ENV [ " SKIP_SUBMODULES " ]
puts " ====================================================== "
puts " Downloading YADR submodules...please wait "
puts " ====================================================== "
run %{
cd $HOME / . yadr
2013-06-07 07:09:18 +08:00
git submodule update - - recursive
2013-04-02 21:12:24 +08:00
git clean - df
2012-10-25 23:09:24 +08:00
}
puts
end
2012-08-10 02:47:45 +08:00
end
2013-03-16 22:47:54 +08:00
desc " Performs migration from pathogen to vundle "
task :vundle_migration do
puts " ====================================================== "
puts " Migrating from pathogen to vundle vim plugin manager. "
2013-12-16 06:18:36 +08:00
puts " This will move the old .vim/bundle directory to "
2013-03-16 22:47:54 +08:00
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 " ====================================================== "
2013-12-16 06:18:36 +08:00
puts " Installing and updating vundles. "
2013-03-16 22:47:54 +08:00
puts " The installer will now proceed to run BundleInstall. "
puts " ====================================================== "
puts " "
2013-12-16 06:18:36 +08:00
vundle_path = File . join ( 'vim' , 'bundle' , 'vundle' )
unless File . exists? ( vundle_path )
run %{
cd $HOME / . yadr
git clone https : / / github . com / gmarik / vundle . git #{vundle_path}
}
end
2013-03-21 05:08:28 +08:00
2013-03-18 01:31:04 +08:00
Vundle :: update_vundle
2013-03-16 22:47:54 +08:00
end
2012-08-10 02:47:45 +08:00
task :default = > 'install'
private
def run ( cmd )
2012-10-09 12:38:21 +08:00
puts " [Running] #{ cmd } "
2012-08-10 02:47:45 +08:00
` #{ cmd } ` unless ENV [ 'DEBUG' ]
end
2014-02-04 00:30:23 +08:00
def number_of_cores
if RUBY_PLATFORM . downcase . include? ( " darwin " )
cores = run %{ sysctl -n hw.ncpu }
else
cores = run %{ nproc }
end
puts
cores . to_i
end
def run_bundle_config
2014-03-02 09:40:33 +08:00
return unless system ( " which bundle " )
2014-02-04 00:30:23 +08:00
bundler_jobs = number_of_cores - 1
puts " ====================================================== "
puts " Configuring Bundlers for parallel gem installation "
puts " ====================================================== "
run %{ bundle config --global jobs #{ bundler_jobs } }
puts
end
2012-10-03 13:45:26 +08:00
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
2012-09-29 01:38:59 +08:00
def install_homebrew
2013-01-27 03:07:46 +08:00
run %{ which brew }
2013-01-27 03:06:01 +08:00
unless $? . success?
puts " ====================================================== "
puts " Installing Homebrew, the OSX package manager...If it's "
puts " already installed, this will do nothing. "
puts " ====================================================== "
2013-12-20 04:22:17 +08:00
run %{ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)" }
2013-01-27 03:06:01 +08:00
end
2013-06-12 21:21:08 +08:00
puts
puts
puts " ====================================================== "
puts " Updating Homebrew. "
puts " ====================================================== "
2013-06-12 21:48:45 +08:00
run %{ brew update }
2012-09-29 01:38:59 +08:00
puts
puts
puts " ====================================================== "
puts " Installing Homebrew packages...There may be some warnings. "
puts " ====================================================== "
2013-04-18 21:40:04 +08:00
run %{ brew install zsh ctags git hub tmux reattach-to-user-namespace the_silver_searcher }
2013-12-31 00:41:00 +08:00
run %{ brew install macvim --custom-icons --override-system-vim --with-lua --with-luajit }
2012-09-29 01:38:59 +08:00
puts
puts
end
def install_fonts
puts " ====================================================== "
2014-01-06 09:09:18 +08:00
puts " Installing patched fonts for Powerline/Lightline. "
2012-09-29 01:38:59 +08:00
puts " ====================================================== "
run %{ cp -f $HOME/.yadr/fonts/* $HOME/Library/Fonts }
puts
end
2013-03-14 19:56:59 +08:00
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 }
2013-04-07 23:35:32 +08:00
# If iTerm2 is not installed or has never run, we can't autoinstall the profile since the plist is not there
if ! File . exists? ( File . join ( ENV [ 'HOME' ] , '/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 " ====================================================== "
return
end
# Ask the user which theme he wants to install
message = " Which theme would you like to apply to your iTerm2 profile? "
color_scheme = ask message , iTerm_available_themes
color_scheme_file = File . join ( 'iTerm2' , " #{ color_scheme } .itermcolors " )
# Ask the user on which profile he wants to install the theme
profiles = iTerm_profile_list
message = " I've found #{ profiles . size } #{ profiles . size > 1 ? 'profiles' : 'profile' } on your iTerm2 configuration, which one would you like to apply the Solarized theme to? "
profiles << 'All'
selected = ask message , profiles
2013-12-16 06:18:36 +08:00
2013-04-07 23:35:32 +08:00
if selected == 'All'
( profiles . size - 1 ) . times { | idx | apply_theme_to_iterm_profile_idx idx , color_scheme_file }
else
apply_theme_to_iterm_profile_idx profiles . index ( selected ) , color_scheme_file
end
end
def iTerm_available_themes
Dir [ 'iTerm2/*.itermcolors' ] . map { | value | File . basename ( value , '.itermcolors' ) }
end
def iTerm_profile_list
profiles = Array . new
begin
profiles << %x{ /usr/libexec/PlistBuddy -c "Print :'New Bookmarks': #{ profiles . size } :Name" ~/Library/Preferences/com.googlecode.iterm2.plist 2>/dev/null }
end while $? . exitstatus == 0
profiles . pop
profiles
end
def ask ( message , values )
puts message
while true
values . each_with_index { | val , idx | puts " #{ idx + 1 } . #{ val } " }
selection = STDIN . gets . chomp
if ( Float ( selection ) == nil rescue true ) || selection . to_i < 0 || selection . to_i > values . size + 1
puts " ERROR: Invalid selection. \n \n "
else
break
end
2013-12-16 06:18:36 +08:00
end
2013-04-07 23:35:32 +08:00
selection = selection . to_i - 1
values [ selection ]
2013-03-14 19:56:59 +08:00
end
2012-09-27 01:23:39 +08:00
def install_prezto
2012-10-25 23:09:24 +08:00
puts
2012-09-27 01:23:39 +08:00
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" }
2012-10-20 01:08:42 +08:00
# 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
2012-09-27 01:23:39 +08:00
2012-10-25 23:09:24 +08:00
puts
2012-10-25 22:52:18 +08:00
puts " Overriding prezto ~/.zpreztorc with YADR's zpreztorc to enable additional modules... "
run %{ ln -nfs "$HOME/.yadr/zsh/prezto-override/zpreztorc" "$ { ZDOTDIR:-$HOME } /.zpreztorc" }
2012-10-25 23:09:24 +08:00
puts
2012-09-27 02:05:28 +08:00
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
2013-03-21 21:02:25 +08:00
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 "
2013-12-17 07:27:06 +08:00
if File . exists? ( " /usr/local/bin/zsh " )
2013-12-20 05:00:57 +08:00
if File . readlines ( " /private/etc/shells " ) . grep ( " /usr/local/bin/zsh " ) . empty?
puts " Adding zsh to standard shell list "
run %{ echo "/usr/local/bin/zsh" | sudo tee -a /private/etc/shells }
end
2013-12-17 07:27:06 +08:00
run %{ chsh -s /usr/local/bin/zsh }
else
run %{ chsh -s /bin/zsh }
end
2013-03-21 21:02:25 +08:00
end
2012-09-27 01:23:39 +08:00
end
2012-08-10 02:47:45 +08:00
def want_to_install? ( section )
2012-12-27 07:38:53 +08:00
if ENV [ " ASK " ] == " true "
2012-10-25 23:09:24 +08:00
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 } "
2012-01-25 14:13:33 +08:00
target = " #{ ENV [ " HOME " ] } /. #{ file } "
2012-10-25 23:09:24 +08:00
puts " ====================== #{ file } ============================== "
puts " Source: #{ source } "
puts " Target: #{ target } "
2012-01-25 14:13:33 +08:00
2013-03-21 21:21:51 +08:00
if File . exists? ( target ) && ( ! File . symlink? ( target ) || ( File . symlink? ( target ) && File . readlink ( target ) != source ) )
2012-10-25 23:09:24 +08:00
puts " [Overwriting] #{ target } ...leaving original at #{ target } .backup... "
run %{ mv "$HOME/. #{ file } " "$HOME/. #{ file } .backup" }
2012-01-25 14:13:33 +08:00
end
2012-08-10 02:47:45 +08:00
if method == :symlink
2012-10-25 23:09:24 +08:00
run %{ ln -nfs " #{ source } " " #{ target } " }
2012-08-10 02:47:45 +08:00
else
run %{ cp -f " #{ source } " " #{ target } " }
end
2012-01-25 14:13:33 +08:00
2012-08-10 02:47:45 +08:00
# Temporary solution until we find a way to allow customization
2012-09-27 01:23:39 +08:00
# 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'
2012-10-20 01:08:42 +08:00
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
2012-01-25 14:13:33 +08:00
2012-10-25 23:09:24 +08:00
puts " ========================================================== "
puts
2012-08-10 02:47:45 +08:00
end
2012-01-25 14:13:33 +08:00
end
2013-03-16 22:47:54 +08:00
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
2013-04-07 23:35:32 +08:00
def apply_theme_to_iterm_profile_idx ( index , color_scheme_path )
values = Array . new
16 . times { | i | values << " Ansi #{ i } Color " }
values << [ 'Background Color' , 'Bold Color' , 'Cursor Color' , 'Cursor Text Color' , 'Foreground Color' , 'Selected Text Color' , 'Selection Color' ]
values . flatten . each { | entry | run %{ /usr/libexec/PlistBuddy -c "Delete :'New Bookmarks': #{ index } :' #{ entry } '" ~/Library/Preferences/com.googlecode.iterm2.plist } }
run %{ /usr/libexec/PlistBuddy -c "Merge ' #{ color_scheme_path } ' :'New Bookmarks': #{ index } " ~/Library/Preferences/com.googlecode.iterm2.plist }
end
2013-03-16 22:47:54 +08:00
2012-01-25 14:13:33 +08:00
def success_msg ( action )
puts " "
puts " _ _ _ "
puts " | | | | | | "
puts " | |___| |_____ __| | ____ "
puts " |_____ (____ |/ _ |/ ___) "
puts " _____| / ___ ( (_| | | "
puts " (_______ \ _____| \ ____|_| "
puts " "
puts " YADR has been #{ action } . Please restart your terminal and vim. "
end