forked from ryanb/dotfiles
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Rakefile
137 lines (124 loc) · 3.28 KB
/
Rakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
require 'rake'
require 'erb'
desc "install the dot files into user's home directory - use replace_all=true to replace all files"
task :install do
install_oh_my_zsh
switch_to_zsh
install_vundle
make_bindir
replace_all = ENV['replace_all'] == 'true'
dotfiles.each do |file|
system %Q{mkdir -p "$HOME/.#{File.dirname(file)}"} if file =~ /\//
if File.exist?(dotted_filename(file))
if File.identical? file, dotted_filename(file)
puts "identical ~/.#{file.sub(/\.erb$/, '')}"
elsif replace_all
replace_file(file)
else
print "overwrite #{dotted_filename(file, true)}? [ynaq] "
case $stdin.gets.chomp
when 'a'
replace_all = true
replace_file(file)
when 'y'
replace_file(file)
when 'q'
exit
else
puts "skipping #{dotted_filename(file, true)}"
end
end
else
link_file(file)
end
end
end
desc "backup all dot files"
task :backup do
bkp_dir = "backups/backup_#{Time.now.strftime('%Y-%m-%d_%H-%M.%S')}"
puts "Backing up dotfiles to "
system %Q{mkdir -p "#{bkp_dir}"}
dotfiles.map {|f| dotted_filename(f)}.each do |file|
system %Q{cp -r "#{file}" "#{bkp_dir}"} if File.exists?(file)
end
puts "Backup complete - `rake install` with confidence!"
end
def dotted_filename(undotted_name, pp=false)
unerbed = undotted_name.sub(/\.erb$/, '')
if undotted_name.match /bin\/.?/
base = unerbed
else
base = ".#{unerbed}"
end
if pp
File.join('~', base)
else
File.join(ENV['HOME'], base)
end
end
def dotfiles
files = Dir['*'] - %w[Rakefile README.md LICENSE oh-my-zsh backups bin pathogen_plugins]
files += Dir['bin/*']
files << "oh-my-zsh/custom/plugins/rbates"
files << "oh-my-zsh/custom/rbates.zsh-theme"
files
end
def make_bindir
system %Q{mkdir -p ~/bin}
end
def replace_file(file)
system %Q{rm -rf "#{dotted_filename(file)}"}
link_file(file)
end
def link_file(file)
if file =~ /.erb$/
puts "generating ~/.#{file.sub(/\.erb$/, '')}"
File.open(dotted_filename(file), 'w') do |new_file|
new_file.write ERB.new(File.read(file)).result(binding)
end
else
puts "linking ~/.#{file}"
system %Q{ln -s "$PWD/#{file}" "#{dotted_filename(file)}"}
end
end
def install_vundle
if File.exist?(File.join(ENV['HOME'], '.vim/bundle/Vundle.vim'))
puts "Already using vundle"
else
puts "Installing Vundle"
system %Q{mkdir -p ~/.vim ~/.vim/bundle}
system %Q{git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim}
end
end
def switch_to_zsh
if ENV["SHELL"] =~ /zsh/
puts "Already using zsh"
else
print "switch to zsh? (recommended) [ynq] "
case $stdin.gets.chomp
when 'y'
puts "switching to zsh"
system %Q{chsh -s `which zsh`}
when 'q'
exit
else
puts "skipping zsh"
end
end
end
def install_oh_my_zsh
if File.exist?(File.join(ENV['HOME'], ".oh-my-zsh"))
puts "Already using oh-my-zsh"
else
print "install oh-my-zsh? [ynq] "
case $stdin.gets.chomp
when 'y'
puts "installing oh-my-zsh"
system %Q{git clone https://github.com/robbyrussell/oh-my-zsh.git "$HOME/.oh-my-zsh"}
when 'q'
exit
else
puts "skipping oh-my-zsh - you may need to change ~/.zshrc"
end
end
end