Blame view

repos/robbyrussell/oh-my-zsh/tools/install.sh 4.14 KB
e85891281   mj   Merge commit '4f8...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  main() {
    # Use colors, but only if connected to a terminal, and that terminal
    # supports them.
    if which tput >/dev/null 2>&1; then
        ncolors=$(tput colors)
    fi
    if [ -t 1 ] && [ -n "$ncolors" ] && [ "$ncolors" -ge 8 ]; then
      RED="$(tput setaf 1)"
      GREEN="$(tput setaf 2)"
      YELLOW="$(tput setaf 3)"
      BLUE="$(tput setaf 4)"
      BOLD="$(tput bold)"
      NORMAL="$(tput sgr0)"
    else
      RED=""
      GREEN=""
      YELLOW=""
      BLUE=""
      BOLD=""
      NORMAL=""
    fi
ad96cd85e   mj   Merge commit 'ed3...
22

e85891281   mj   Merge commit '4f8...
23
24
25
    # Only enable exit-on-error after the non-critical colorization stuff,
    # which may fail on systems lacking tput or terminfo
    set -e
093a6c34b   mj   Squashed 'repos/r...
26

e85891281   mj   Merge commit '4f8...
27
28
29
30
31
32
33
    CHECK_ZSH_INSTALLED=$(grep /zsh$ /etc/shells | wc -l)
    if [ ! $CHECK_ZSH_INSTALLED -ge 1 ]; then
      printf "${YELLOW}Zsh is not installed!${NORMAL} Please install zsh first!
  "
      exit
    fi
    unset CHECK_ZSH_INSTALLED
ad96cd85e   mj   Merge commit 'ed3...
34

e85891281   mj   Merge commit '4f8...
35
36
37
    if [ ! -n "$ZSH" ]; then
      ZSH=~/.oh-my-zsh
    fi
093a6c34b   mj   Squashed 'repos/r...
38

e85891281   mj   Merge commit '4f8...
39
40
41
42
43
44
45
    if [ -d "$ZSH" ]; then
      printf "${YELLOW}You already have Oh My Zsh installed.${NORMAL}
  "
      printf "You'll need to remove $ZSH if you want to re-install.
  "
      exit
    fi
093a6c34b   mj   Squashed 'repos/r...
46

e85891281   mj   Merge commit '4f8...
47
48
49
50
51
52
    # Prevent the cloned repository from having insecure permissions. Failing to do
    # so causes compinit() calls to fail with "command not found: compdef" errors
    # for users with insecure umasks (e.g., "002", allowing group writability). Note
    # that this will be ignored under Cygwin by default, as Windows ACLs take
    # precedence over umasks except for filesystems mounted with option "noacl".
    umask g-w,o-w
ad96cd85e   mj   Merge commit 'ed3...
53

e85891281   mj   Merge commit '4f8...
54
55
56
57
58
59
60
61
62
    printf "${BLUE}Cloning Oh My Zsh...${NORMAL}
  "
    hash git >/dev/null 2>&1 || {
      echo "Error: git is not installed"
      exit 1
    }
    env git clone --depth=1 https://github.com/robbyrussell/oh-my-zsh.git $ZSH || {
      printf "Error: git clone of oh-my-zsh repo failed
  "
ad96cd85e   mj   Merge commit 'ed3...
63
      exit 1
e85891281   mj   Merge commit '4f8...
64
65
66
67
68
69
70
71
72
    }
  
    # The Windows (MSYS) Git is not compatible with normal use on cygwin
    if [ "$OSTYPE" = cygwin ]; then
      if git --version | grep msysgit > /dev/null; then
        echo "Error: Windows/MSYS Git is not supported on Cygwin"
        echo "Error: Make sure the Cygwin git package is installed and is first on the path"
        exit 1
      fi
ad96cd85e   mj   Merge commit 'ed3...
73
    fi
ad96cd85e   mj   Merge commit 'ed3...
74

e85891281   mj   Merge commit '4f8...
75
76
77
78
79
80
81
    printf "${BLUE}Looking for an existing zsh config...${NORMAL}
  "
    if [ -f ~/.zshrc ] || [ -h ~/.zshrc ]; then
      printf "${YELLOW}Found ~/.zshrc.${NORMAL} ${GREEN}Backing up to ~/.zshrc.pre-oh-my-zsh${NORMAL}
  ";
      mv ~/.zshrc ~/.zshrc.pre-oh-my-zsh;
    fi
093a6c34b   mj   Squashed 'repos/r...
82

e85891281   mj   Merge commit '4f8...
83
84
85
86
87
88
89
    printf "${BLUE}Using the Oh My Zsh template file and adding it to ~/.zshrc${NORMAL}
  "
    cp $ZSH/templates/zshrc.zsh-template ~/.zshrc
    sed "/^export ZSH=/ c\\
    export ZSH=$ZSH
    " ~/.zshrc > ~/.zshrc-omztemp
    mv -f ~/.zshrc-omztemp ~/.zshrc
093a6c34b   mj   Squashed 'repos/r...
90

e85891281   mj   Merge commit '4f8...
91
92
93
94
95
96
    printf "${BLUE}Copying your current PATH and adding it to the end of ~/.zshrc for you.${NORMAL}
  "
    sed "/export PATH=/ c\\
    export PATH=\"$PATH\"
    " ~/.zshrc > ~/.zshrc-omztemp
    mv -f ~/.zshrc-omztemp ~/.zshrc
093a6c34b   mj   Squashed 'repos/r...
97

e85891281   mj   Merge commit '4f8...
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
    # If this user's login shell is not already "zsh", attempt to switch.
    TEST_CURRENT_SHELL=$(expr "$SHELL" : '.*/\(.*\)')
    if [ "$TEST_CURRENT_SHELL" != "zsh" ]; then
      # If this platform provides a "chsh" command (not Cygwin), do it, man!
      if hash chsh >/dev/null 2>&1; then
        printf "${BLUE}Time to change your default shell to zsh!${NORMAL}
  "
        chsh -s $(grep /zsh$ /etc/shells | tail -1)
      # Else, suggest the user do so manually.
      else
        printf "I can't change your shell automatically because this system does not have chsh.
  "
        printf "${BLUE}Please manually change your default shell to zsh!${NORMAL}
  "
      fi
ad96cd85e   mj   Merge commit 'ed3...
113
    fi
ad96cd85e   mj   Merge commit 'ed3...
114

e85891281   mj   Merge commit '4f8...
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
    printf "${GREEN}"
    echo '         __                                     __   '
    echo '  ____  / /_     ____ ___  __  __   ____  _____/ /_  '
    echo ' / __ \/ __ \   / __ `__ \/ / / /  /_  / / ___/ __ \ '
    echo '/ /_/ / / / /  / / / / / / /_/ /    / /_(__  ) / / / '
    echo '\____/_/ /_/  /_/ /_/ /_/\__, /    /___/____/_/ /_/  '
    echo '                        /____/                       ....is now installed!'
    echo ''
    echo ''
    echo 'Please look over the ~/.zshrc file to select plugins, themes, and options.'
    echo ''
    echo 'p.s. Follow us at https://twitter.com/ohmyzsh.'
    echo ''
    echo 'p.p.s. Get stickers and t-shirts at http://shop.planetargon.com.'
    echo ''
    printf "${NORMAL}"
    env zsh
ad96cd85e   mj   Merge commit 'ed3...
132
133
134
  }
  
  main