63 lines
1.7 KiB
Plaintext
63 lines
1.7 KiB
Plaintext
# MIT licensed.
|
|
# see https://github.com/holman/dotfiles/blob/master/License
|
|
# Copyright (c) Zach Holman, http://zachholman.com
|
|
|
|
|
|
require 'rake'
|
|
|
|
desc "Hook our dotfiles into system-standard positions."
|
|
task :install do
|
|
linkables = Dir.glob('*/**{.symlink}')
|
|
|
|
skip_all = false
|
|
overwrite_all = false
|
|
backup_all = false
|
|
|
|
linkables.each do |linkable|
|
|
overwrite = false
|
|
backup = false
|
|
|
|
file = linkable.split('/').last.split('.symlink').last
|
|
target = "#{ENV["HOME"]}/.#{file}"
|
|
|
|
if File.exists?(target) || File.symlink?(target)
|
|
unless skip_all || overwrite_all || backup_all
|
|
puts "File already exists: #{target}, what do you want to do? [s]kip, [S]kip all, [o]verwrite, [O]verwrite all, [b]ackup, [B]ackup all"
|
|
case STDIN.gets.chomp
|
|
when 'o' then overwrite = true
|
|
when 'b' then backup = true
|
|
when 'O' then overwrite_all = true
|
|
when 'B' then backup_all = true
|
|
when 'S' then skip_all = true
|
|
when 's' then next
|
|
end
|
|
end
|
|
FileUtils.rm_rf(target) if overwrite || overwrite_all
|
|
`mv "$HOME/.#{file}" "$HOME/.#{file}.backup"` if backup || backup_all
|
|
end
|
|
`ln -s "$PWD/#{linkable}" "#{target}"`
|
|
end
|
|
end
|
|
|
|
task :uninstall do
|
|
|
|
Dir.glob('**/*.symlink').each do |linkable|
|
|
|
|
file = linkable.split('/').last.split('.symlink').last
|
|
target = "#{ENV["HOME"]}/.#{file}"
|
|
|
|
# Remove all symlinks created during installation
|
|
if File.symlink?(target)
|
|
FileUtils.rm(target)
|
|
end
|
|
|
|
# Replace any backups made during installation
|
|
if File.exists?("#{ENV["HOME"]}/.#{file}.backup")
|
|
`mv "$HOME/.#{file}.backup" "$HOME/.#{file}"`
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
task :default => 'install'
|