dissimulo does not use vim. Removes the editor, its config tree, its plugin
manager, and everything that would reinstall it on a re-bootstrap.
Deleted (82 files):
vim/ (64) the whole config tree, 1.7M
doc/vim/ (8) its documentation
.vimrc, vimrc, .vim
bin/yadr/vundle.rb, yadr-vim-{add,delete,list}-plugin
bin/fix_macvim_external_display.sh MacVim on macOS, dead here anyway
vimify/ vi keybindings for readline/libedit, dropped on request
Edited:
Rakefile drop the vundle require, the vim install block, the
vundle_migration and install_vundle tasks, their two helper
methods, and the macvim homebrew line. Without this a
re-bootstrap would pull all of it straight back.
install.sh .vim/.vimrc out of the symlink list
zsh/vi-mode.zsh EDITOR/VISUAL now nano. The zsh vi keybindings stay; they
are not vim.
zsh/aliases.zsh yav/ydv/ylv, the MacVim detection block and ve removed;
ae/ze/gi now open nano
git/gitconfig mvimdiff mergetool removed, editor set to nano
.tmux.conf vim-tmux-navigator replaced with direct select-pane binds.
It ran ps piped to grep on EVERY C-h/j/k/l press to ask
whether vim held the pane: two forks per pane switch for a
question that can now only answer no. mode-keys and
status-keys vi stay, being tmux own key style, unrelated to
the editor.
.gitignore/.dockerignore/Dockerfile dead paths and the vim package
Also renames the installer banner to DRUNKENDOTFILES, piped through lolcat
when present with a plain-text fallback.
Left alone: the .yadr paths (renaming the checkout is a separate job), generic
swap-file ignores, the fasd viminfo support (third-party), and prose mentions.
319 lines
11 KiB
Ruby
319 lines
11 KiB
Ruby
require 'rake'
|
|
require 'fileutils'
|
|
|
|
desc "Hook our dotfiles into system-standard positions."
|
|
task :install => [:submodule_init, :submodules] do
|
|
puts
|
|
puts "======================================================"
|
|
puts "Welcome to drunkendotfiles installation."
|
|
puts "======================================================"
|
|
puts
|
|
|
|
install_homebrew if RUBY_PLATFORM.downcase.include?("darwin")
|
|
install_rvm_binstubs
|
|
|
|
# this has all the runcoms from this directory.
|
|
install_files(Dir.glob('git/*')) if want_to_install?('git configs (color, aliases)')
|
|
install_files(Dir.glob('irb/*')) if want_to_install?('irb/pry configs (more colorful)')
|
|
install_files(Dir.glob('ruby/*')) if want_to_install?('rubygems config (faster/no docs)')
|
|
install_files(Dir.glob('ctags/*')) if want_to_install?('ctags config (better js/ruby support)')
|
|
install_files(Dir.glob('tmux/*')) if want_to_install?('tmux config')
|
|
|
|
Rake::Task["install_prezto"].execute
|
|
|
|
install_fonts
|
|
|
|
install_term_theme if RUBY_PLATFORM.downcase.include?("darwin")
|
|
|
|
run_bundle_config
|
|
|
|
success_msg("installed")
|
|
end
|
|
|
|
task :install_prezto do
|
|
if want_to_install?('zsh enhancements & prezto')
|
|
install_prezto
|
|
end
|
|
end
|
|
|
|
desc 'Updates the installation'
|
|
task :update do
|
|
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
|
|
|
|
desc "Init and update submodules."
|
|
task :submodules do
|
|
unless ENV["SKIP_SUBMODULES"]
|
|
puts "======================================================"
|
|
puts "Downloading drunkendotfiles submodules...please wait"
|
|
puts "======================================================"
|
|
|
|
run %{
|
|
cd $HOME/.yadr
|
|
git submodule update --recursive
|
|
git clean -df
|
|
}
|
|
puts
|
|
end
|
|
end
|
|
|
|
task :default => 'install'
|
|
|
|
|
|
private
|
|
def run(cmd)
|
|
puts "[Running] #{cmd}"
|
|
`#{cmd}` unless ENV['DEBUG']
|
|
end
|
|
|
|
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
|
|
return unless system("which bundle")
|
|
|
|
bundler_jobs = number_of_cores - 1
|
|
puts "======================================================"
|
|
puts "Configuring Bundlers for parallel gem installation"
|
|
puts "======================================================"
|
|
run %{ bundle config --global jobs #{bundler_jobs} }
|
|
puts
|
|
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
|
|
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 %{bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"}
|
|
end
|
|
|
|
puts
|
|
puts
|
|
puts "======================================================"
|
|
puts "Updating Homebrew."
|
|
puts "======================================================"
|
|
run %{brew update}
|
|
puts
|
|
puts
|
|
puts "======================================================"
|
|
puts "Installing Homebrew packages...There may be some warnings."
|
|
puts "======================================================"
|
|
run %{brew install zsh ctags git hub tmux reattach-to-user-namespace the_silver_searcher ghi}
|
|
puts
|
|
puts
|
|
end
|
|
|
|
def install_fonts
|
|
puts "======================================================"
|
|
puts "Installing patched fonts for Powerline/Lightline."
|
|
puts "======================================================"
|
|
run %{ cp -f $HOME/.yadr/fonts/* $HOME/Library/Fonts } if RUBY_PLATFORM.downcase.include?("darwin")
|
|
run %{ mkdir -p ~/.fonts && cp ~/.yadr/fonts/* ~/.fonts && fc-cache -vf ~/.fonts } if RUBY_PLATFORM.downcase.include?("linux")
|
|
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 }
|
|
|
|
# If iTerm2 is not installed or has never run, we can't autoinstall the profile since the plist is not there
|
|
if !File.exist?(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
|
|
|
|
return if color_scheme.nil? || color_scheme == 'None'
|
|
|
|
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
|
|
|
|
return if selected.nil?
|
|
|
|
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')} << 'None'
|
|
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}" }
|
|
input = STDIN.gets
|
|
if input.nil?
|
|
puts "(no input available — skipping prompt)"
|
|
return nil
|
|
end
|
|
selection = input.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
|
|
end
|
|
selection = selection.to_i-1
|
|
values[selection]
|
|
end
|
|
|
|
def install_prezto
|
|
puts
|
|
puts "Installing Prezto (ZSH Enhancements)..."
|
|
|
|
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
|
|
install_files(Dir.glob('zsh/prezto-override/zshrc'), :symlink)
|
|
install_files(Dir.glob('zsh/prezto/runcoms/zlogin'), :symlink)
|
|
install_files(Dir.glob('zsh/prezto/runcoms/zlogout'), :symlink)
|
|
install_files(Dir.glob('zsh/prezto-override/zpreztorc'), :symlink)
|
|
install_files(Dir.glob('zsh/prezto/runcoms/zprofile'), :symlink)
|
|
install_files(Dir.glob('zsh/prezto/runcoms/zshenv'), :symlink)
|
|
|
|
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 }
|
|
|
|
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"
|
|
if File.exist?("/usr/local/bin/zsh")
|
|
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
|
|
run %{ chsh -s /usr/local/bin/zsh }
|
|
else
|
|
run %{ chsh -s /bin/zsh }
|
|
end
|
|
end
|
|
end
|
|
|
|
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
|
|
end
|
|
|
|
def install_files(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.exist?(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
|
|
|
|
if method == :symlink
|
|
run %{ ln -nfs "#{source}" "#{target}" }
|
|
else
|
|
run %{ cp -f "#{source}" "#{target}" }
|
|
end
|
|
|
|
puts "=========================================================="
|
|
puts
|
|
end
|
|
end
|
|
|
|
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 }
|
|
run %{ defaults read com.googlecode.iterm2 }
|
|
end
|
|
|
|
def success_msg(action)
|
|
# Single-quoted heredoc: no interpolation and NO escape processing, so the
|
|
# backslashes in the art survive verbatim. %q{} would collapse every \ to \.
|
|
banner = <<~'BANNER'
|
|
___ ___ _ _ _ _ _ _____ _ _ ___ ___ _____ ___ ___ _ ___ ___
|
|
| \| _ \ | | | \| | |/ / __| \| | \ / _ \_ _| __|_ _| | | __/ __|
|
|
| |) | / |_| | .` | ' <| _|| .` | |) | (_) || | | _| | || |__| _|\__ \
|
|
|___/|_|_\\___/|_|\_|_|\_\___|_|\_|___/ \___/ |_| |_| |___|____|___|___/
|
|
BANNER
|
|
|
|
# Rainbow it when lolcat is present; fall back to plain text so the installer
|
|
# never dies on a box that lacks it.
|
|
if system('command -v lolcat >/dev/null 2>&1')
|
|
IO.popen('lolcat', 'w') { |io| io.puts banner }
|
|
else
|
|
puts banner
|
|
end
|
|
|
|
puts "drunkendotfiles has been #{action}. Please restart your terminal."
|
|
end
|