forked from ryanb/dotfiles
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Rakefile
119 lines (104 loc) · 2.95 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
require 'rake'
require 'erb'
desc 'Install dot files and dependencies'
task install: %i[intro brew_packages zsh fonts misc vim outro]
task :intro do
puts ''
puts '=============================='
puts 'Beginning installation of dotfiles and dependencies'
end
task :outro do
puts ''
puts 'Completed installation of dotfiles and dependencies'
puts '=============================='
puts ''
end
task :fonts do
# msg "Change terminal font to 'JetBrainsMono Nerd Font'"
# sh 'cp fonts/JetBrains*.ttf ~/Library/Fonts/.'
msg "Installing Nerd Fonts with homebrew"
sh `brew tap homebrew/cask-fonts`
sh `brew install --cask font-jetbrains-mono-nerd-font`
end
task :brew_packages do
unless File.exist? '/opt/homebrew/bin/brew'
msg 'Installing homebrew'
sh '/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"'
end
msg 'Update homebrew and formulae'
sh 'brew update'
['ack', 'alacritty', 'asdf', 'git', 'ctags', 'fasd', 'bat', 'fzf', 'powerlevel10k',
'neovim', 'zsh-completions'].each do |pkg|
msg "Installing #{pkg}"
begin
sh "brew install #{pkg}"
rescue StandardError
puts "Looks like #{pkg} is already installed"
end
end
end
task :zsh do
msg 'Installing zsh configuration'
install_dotfiles('zsh*')
end
task :misc do
%w[ackrc aprc editrc inputrc irbrc gemrc gitconfig.erb npmrc pryrc hushlogin rspec rp5rc alacritty].each do |f|
msg "Installing #{f}"
install_dotfiles(f)
end
end
task :vim do
msg 'Installing vim configuration'
install_dotfiles('vim')
sh 'rm -rf ~/.vim/bundle/vundle'
sh 'git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle'
install_dotfiles('vimrc')
sh 'vim +BundleClean +qall'
sh 'vim +BundleInstall +qall'
end
def msg(m)
puts ''
puts "+++ #{m}"
end
def install_dotfiles(dir_pattern)
replace_all = false
Dir[dir_pattern].each do |file|
if File.exist?(File.join(ENV['HOME'], ".#{file.sub('.erb', '')}"))
if File.identical? file, File.join(ENV['HOME'], ".#{file.sub('.erb', '')}")
puts "identical ~/.#{file.sub('.erb', '')}"
elsif replace_all
replace_file(file)
else
print "overwrite ~/.#{file.sub('.erb', '')}? [ynaq] "
case $stdin.gets.chomp
when 'a'
replace_all = true
replace_file(file)
when 'y'
replace_file(file)
when 'q'
exit
else
puts "skipping ~/.#{file.sub('.erb', '')}"
end
end
else
link_file(file)
end
end
end
def replace_file(file)
system %(rm -rf "$HOME/.#{file.sub('.erb', '')}")
link_file(file)
end
def link_file(file)
if file =~ /.erb$/
puts "generating ~/.#{file.sub('.erb', '')}"
File.open(File.join(ENV['HOME'], ".#{file.sub('.erb', '')}"), 'w') do |new_file|
new_file.write ERB.new(File.read(file)).result(binding)
end
else
puts "linking ~/.#{file}"
system %(ln -s "$PWD/#{file}" "$HOME/.#{file}")
end
end