Skip to content
Browse files

Add autoinstall of Solarized iTerm2 themes

The rake script now detects the available iTerm2 profiles and
installs the solarized scheme where needed.

It's an interactive procedure that requires selection by the user.
  • Loading branch information...
1 parent 7e1f628 commit 14c09ef73000ae3a29c2002e303ae38dd0d5436e @FWFabio FWFabio committed
Showing with 62 additions and 5 deletions.
  1. +62 −5 Rakefile
View
67 Rakefile
@@ -166,11 +166,60 @@ def install_term_theme
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 }
- 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 "======================================================"
+ # 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
+
+ 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
+ end
+ selection = selection.to_i-1
+ values[selection]
end
def install_prezto
@@ -256,6 +305,14 @@ def list_vim_submodules
Hash[*result.flatten]
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 }
+end
def success_msg(action)
puts ""

0 comments on commit 14c09ef

Please sign in to comment.
Something went wrong with that request. Please try again.