From ebcb8cd307bfe1564b250f0b0b951e05439de496 Mon Sep 17 00:00:00 2001
From: romkatv <roman.perepelitsa@gmail.com>
Date: Tue, 3 Sep 2019 20:01:10 +0200
Subject: wizard: offer to install Meslo NF on iTerm2

---
 internal/wizard.zsh | 130 ++++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 101 insertions(+), 29 deletions(-)

(limited to 'internal')

diff --git a/internal/wizard.zsh b/internal/wizard.zsh
index afef036d..67ef170a 100755
--- a/internal/wizard.zsh
+++ b/internal/wizard.zsh
@@ -4,7 +4,7 @@ emulate -L zsh
 setopt noaliases
 
 () {
-setopt extended_glob no_prompt_{bang,subst} prompt_{cr,percent,sp}
+setopt extended_glob no_prompt_{bang,subst} prompt_{cr,percent,sp} typeset_silent
 zmodload zsh/langinfo
 if [[ ${langinfo[CODESET]:-} != (utf|UTF)(-|)8 ]]; then
   local LC_ALL=${${(@M)$(locale -a):#*.(utf|UTF)(-|)8}[1]:-en_US.UTF-8}
@@ -19,7 +19,7 @@ while getopts 'd:f' opt; do
     d)  __p9k_root_dir=$OPTARG;;
     f)  force=1;;
     +f) force=0;;
-    '?') return 1;;
+    \?) return 1;;
   esac
 done
 
@@ -220,6 +220,12 @@ function print_greeting() {
   print -P ""
 }
 
+function iterm_get() {
+  /usr/libexec/PlistBuddy -c "Print :$1" ~/Library/Preferences/com.googlecode.iterm2.plist
+}
+
+local terminal iterm2_font_size
+
 function can_install_font() {
   [[ $P9K_SSH == 0 ]] || return
   if [[ "$(uname)" == Linux && "$(uname -o)" == Android ]]; then
@@ -231,33 +237,99 @@ function can_install_font() {
     else
       [[ -w ~ ]] || return
     fi
+    terminal=Termux
+    return
+  fi
+  if [[ "$(uname)" == Darwin && $TERM_PROGRAM == iTerm.app ]]; then
+    [[ $TERM_PROGRAM_VERSION == (2|3)* ]] || return
+    if [[ -f ~/Library/Fonts ]]; then
+      [[ -d ~/Library/Fonts && -w ~/Library/Fonts ]] || return
+    else
+      [[ -d ~/Library && -w ~/Library ]] || return
+    fi
+    [[ -x /usr/libexec/PlistBuddy ]] || return
+    [[ -x /usr/bin/plutil ]] || return
+    [[ -x /usr/bin/defaults ]] || return
+    [[ -f ~/Library/Preferences/com.googlecode.iterm2.plist ]] || return
+    [[ -r ~/Library/Preferences/com.googlecode.iterm2.plist ]] || return
+    [[ -w ~/Library/Preferences/com.googlecode.iterm2.plist ]] || return
+    local guid1 && guid1="$(iterm_get '"Default Bookmark Guid"' 2>/dev/null)" || return
+    local guid2 && guid2="$(iterm_get '"New Bookmarks":0:"Guid"' 2>/dev/null)" || return
+    local font && font="$(iterm_get '"New Bookmarks":0:"Normal Font"' 2>/dev/null)" || return
+    [[ $guid1 == $guid2 ]] || return
+    [[ $font != 'MesloLGSNer-Regular '<-> ]] || return
+    [[ $font == (#b)*' '(<->) ]] || return
+    iterm2_font_size=$match[1]
+    terminal=iTerm2
     return
   fi
   return 1
 }
 
 function run_command() {
-  print -nP -- "$1 ..."
+  local msg=$1
   shift
+  [[ -n $msg ]] && print -nP -- "$msg ..."
   local err && err="$("$@" 2>&1)" || {
     print -P " %1FERROR%f"
     print -P ""
-    print -P "%BCommand:%b" "${(@q)*}"
+    print -nP "%BCommand:%b "
+    print -r -- "${(@q)*}"
     if [[ -n $err ]]; then
       print -P ""
       print -r -- $err
     fi
     quit -c
   }
-  print -P " %2FOK%f"
+  [[ -n $msg ]] && print -P " %2FOK%f"
 }
 
 function install_font() {
   clear
-  mkdir -p ~/.termux || quit -c
-  run_command "Downloading %2FMesloLGS NF Regular.ttf%f" \
-    curl -fsSL -o ~/.termux/font.ttf "$font_base_url/MesloLGS%20NF%20Regular.ttf"
-  run_command "Reloading Termux settings" termux-reload-settings
+  case $terminal in
+    Termux)
+      mkdir -p ~/.termux || quit -c
+      run_command "Downloading %BMesloLGS NF Regular.ttf%b" \
+        curl -fsSL -o ~/.termux/font.ttf "$font_base_url/MesloLGS%20NF%20Regular.ttf"
+      run_command "Reloading %BTermux%b settings" termux-reload-settings
+    ;;
+    iTerm2)
+      mkdir -p ~/Library/Fonts || quit -c
+      local style
+      for style in Regular Bold Italic 'Bold Italic'; do
+        local file="MesloLGS NF ${style}.ttf"
+        run_command "Downloading %B$file%b" \
+          curl -fsSL -o ~/Library/Fonts/$file "$font_base_url/${file// /%20}"
+      done
+      print -nP -- "Changing %BiTerm2%b settings ..."
+      local k v settings=(
+        '"Normal Font"' '"MesloLGSNer-Regular '$iterm2_font_size'"'
+        '"Horizontal Spacing"' 1
+        '"Vertical Spacing"' 1
+        '"Use Bold Font"' 1
+        '"Use Bright Bold"' 1
+        '"Use Italic Font"' 1
+        '"Use Non-ASCII Font"' 0
+        '"Ambiguous Double Width"' 0
+        '"Terminal Type"' '"xterm-256color"'
+      )
+      for k v in $settings; do
+        run_command "" /usr/libexec/PlistBuddy -c \
+          "Set :\"New Bookmarks\":0:$k $v" ~/Library/Preferences/com.googlecode.iterm2.plist
+      done
+      print -P " %2FOK%f"
+      run_command "Updating %BiTerm2%b settings cache" defaults read com.googlecode.iterm2
+      clear
+      print -P "%2FMeslo Nerd Font%f successfully  installed."
+      print -P ""
+      print -P "Please %Brestart iTerm2%b for the changes to take effect."
+      print -P ""
+      flowing +c -i 5 "  1. Click" "%BiTerm2 → Quit iTerm2%b" or press "%B⌘ Q%b."
+      flowing +c -i 5 "  2. Open %BiTerm2%b."
+      print -P ""
+      exit 0
+    ;;
+  esac
 }
 
 function ask_font() {
@@ -276,7 +348,7 @@ function ask_font() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [ynq]: %b"} || quit
+    read -k key${(%):-"?%BChoice [ynq]: %b"} || quit -c
     case $key in
       q) quit;;
       y) install_font; break;;
@@ -308,7 +380,7 @@ function ask_diamond() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [yn${extra}q]: %b"} || quit
+    read -k key${(%):-"?%BChoice [yn${extra}q]: %b"} || quit -c
     case $key in
       q) quit;;
       r) [[ $extra == *r* ]] && { greeting_printed=1; return 1 };;
@@ -337,7 +409,7 @@ function ask_lock() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [ynrq]: %b"} || quit
+    read -k key${(%):-"?%BChoice [ynrq]: %b"} || quit -c
     case $key in
       q) quit;;
       r) return 1;;
@@ -364,7 +436,7 @@ function ask_python() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [ynrq]: %b"} || quit
+    read -k key${(%):-"?%BChoice [ynrq]: %b"} || quit -c
     case $key in
       q) quit;;
       r) return 1;;
@@ -391,7 +463,7 @@ function ask_debian() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [ynrq]: %b"} || quit
+    read -k key${(%):-"?%BChoice [ynrq]: %b"} || quit -c
     case $key in
       q) quit;;
       r) return 1;;
@@ -431,7 +503,7 @@ function ask_narrow_icons() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [ynrq]: %b"} || quit
+    read -k key${(%):-"?%BChoice [ynrq]: %b"} || quit -c
     case $key in
       q) quit;;
       r) return 1;;
@@ -459,7 +531,7 @@ function ask_style() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [12rq]: %b"} || quit
+    read -k key${(%):-"?%BChoice [12rq]: %b"} || quit -c
     case $key in
       q) quit;;
       r) return 1;;
@@ -501,7 +573,7 @@ function ask_color() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [1234rq]: %b"} || quit
+    read -k key${(%):-"?%BChoice [1234rq]: %b"} || quit -c
     case $key in
       q) quit;;
       r) return 1;;
@@ -536,7 +608,7 @@ function ask_time() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [ynrq]: %b"} || quit
+    read -k key${(%):-"?%BChoice [ynrq]: %b"} || quit -c
     case $key in
       q) quit;;
       r) return 1;;
@@ -633,7 +705,7 @@ function ask_extra_icons() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [12rq]: %b"} || quit
+    read -k key${(%):-"?%BChoice [12rq]: %b"} || quit -c
     case $key in
       q) quit;;
       r) return 1;;
@@ -668,7 +740,7 @@ function ask_prefixes() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [12rq]: %b"} || quit
+    read -k key${(%):-"?%BChoice [12rq]: %b"} || quit -c
     case $key in
       q) quit;;
       r) return 1;;
@@ -721,7 +793,7 @@ function ask_separators() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [12${extra}rq]: %b"} || quit
+    read -k key${(%):-"?%BChoice [12${extra}rq]: %b"} || quit -c
     case $key in
       q) quit;;
       r) return 1;;
@@ -808,7 +880,7 @@ function ask_heads() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [12${extra}rq]: %b"} || quit
+    read -k key${(%):-"?%BChoice [12${extra}rq]: %b"} || quit -c
     case $key in
       q) quit;;
       r) return 1;;
@@ -882,7 +954,7 @@ function ask_tails() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [12${extra}rq]: %b"} || quit
+    read -k key${(%):-"?%BChoice [12${extra}rq]: %b"} || quit -c
     case $key in
       q) quit;;
       r) return 1;;
@@ -934,7 +1006,7 @@ function ask_num_lines() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [12rq]: %b"} || quit
+    read -k key${(%):-"?%BChoice [12rq]: %b"} || quit -c
     case $key in
       q) quit;;
       r) return 1;;
@@ -969,7 +1041,7 @@ function ask_gap_char() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [123rq]: %b"} || quit
+    read -k key${(%):-"?%BChoice [123rq]: %b"} || quit -c
     case $key in
       q) quit;;
       r) return 1;;
@@ -1011,7 +1083,7 @@ function ask_frame() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [1234rq]: %b"} || quit
+    read -k key${(%):-"?%BChoice [1234rq]: %b"} || quit -c
     case $key in
       q) quit;;
       r) return 1;;
@@ -1044,7 +1116,7 @@ function ask_empty_line() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [12rq]: %b"} || quit
+    read -k key${(%):-"?%BChoice [12rq]: %b"} || quit -c
     case $key in
       q) quit;;
       r) return 1;;
@@ -1070,7 +1142,7 @@ function ask_confirm() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [yrq]: %b"} || quit
+    read -k key${(%):-"?%BChoice [yrq]: %b"} || quit -c
     case $key in
       q) quit;;
       r) return 1;;
@@ -1097,7 +1169,7 @@ function ask_config_overwrite() {
     print -P ""
 
     local key=
-    read -k key${(%):-"?%BChoice [yrq]: %b"} || quit
+    read -k key${(%):-"?%BChoice [yrq]: %b"} || quit -c
     case $key in
       q) quit;;
       r) return 1;;
-- 
cgit v1.2.3