install.sh 3.8 KB
Newer Older
1
#!/bin/sh
2
3
4
5
6
7
8
9
10
#
# This script should be run via curl:
#   sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
# or wget:
#   sh -c "$(wget -qO- https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
#
# As an alternative, you can download the install script separately and
# run it afterwards with `sh install.sh'
#
11
12
set -e

13
14
15
# Default location
ZSH=${ZSH:-~/.oh-my-zsh}

16
command_exists() {
17
	command -v "$@" >/dev/null 2>&1
18
19
}

20
main() {
21
22
23
24
25
	# Use colors, but only if connected to a terminal, and that terminal
	# supports them.
	if command_exists tput; then
		ncolors=$(tput colors)
	fi
26

27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
	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
42

43
	if ! command_exists zsh; then
44
		echo "${YELLOW}Zsh is not installed!${NORMAL} Please install zsh first!"
45
46
		exit 1
	fi
47

48
	if [ -d "$ZSH" ]; then
49
50
51
52
		cat <<-EOF
			${YELLOW}You already have Oh My Zsh installed.${NORMAL}
			You'll need to remove $ZSH if you want to re-install.
		EOF
53
54
		exit 1
	fi
55

56
57
58
59
60
61
	# 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
62

63
64
	echo "${BLUE}Cloning Oh My Zsh...${NORMAL}"

65
66
67
68
	command_exists git || {
		echo "Error: git is not installed"
		exit 1
	}
69
70
71
72
73
74
75

	if [ "$OSTYPE" = cygwin ] && git --version | grep -q msysgit; then
		cat <<-EOF
			Error: Windows/MSYS Git is not supported on Cygwin
			Error: Make sure the Cygwin git package is installed and is first on the $PATH
		EOF
		exit 1
76
	fi
77
78
79

	git clone --depth=1 https://github.com/robbyrussell/oh-my-zsh.git "$ZSH" || {
		echo "Error: git clone of oh-my-zsh repo failed"
80
81
		exit 1
	}
Toon Claes's avatar
Toon Claes committed
82

83
	echo "${BLUE}Looking for an existing zsh config...${NORMAL}"
84
	if [ -f ~/.zshrc ] || [ -h ~/.zshrc ]; then
85
		echo "${YELLOW}Found ~/.zshrc.${GREEN} Backing up to ~/.zshrc.pre-oh-my-zsh.${NORMAL}"
86
87
		mv ~/.zshrc ~/.zshrc.pre-oh-my-zsh;
	fi
Robby Russell's avatar
Robby Russell committed
88

89
90
	echo "${BLUE}Using the Oh My Zsh template file and adding it to ~/.zshrc.${NORMAL}"

91
92
93
94
95
	cp "$ZSH/templates/zshrc.zsh-template" ~/.zshrc
	sed "/^export ZSH=/ c\\
export ZSH=\"$ZSH\"
" ~/.zshrc > ~/.zshrc-omztemp
	mv -f ~/.zshrc-omztemp ~/.zshrc
Robby Russell's avatar
Robby Russell committed
96

97
98
99
100
101
	# If this user's login shell is not already "zsh", attempt to switch.
	TEST_CURRENT_SHELL=$(basename "$SHELL")
	if [ "$TEST_CURRENT_SHELL" != "zsh" ]; then
		# If this platform provides a "chsh" command (not Cygwin), do it, man!
		if command_exists chsh; then
102
			echo "${BLUE}Time to change your default shell to zsh!${NORMAL}"
103
104
105
			chsh -s $(grep /zsh$ /etc/shells | tail -1)
		# Else, suggest the user do so manually.
		else
106
107
108
109
			cat <<-EOF
				I can't change your shell automatically because this system does not have chsh.
				${BLUE}Please manually change your default shell to zsh${NORMAL}
			EOF
110
111
		fi
	fi
Robby Russell's avatar
Robby Russell committed
112

113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
	printf "$GREEN"
	cat <<-'EOF'
		         __                                     __
		  ____  / /_     ____ ___  __  __   ____  _____/ /_
		 / __ \/ __ \   / __ `__ \/ / / /  /_  / / ___/ __ \
		/ /_/ / / / /  / / / / / / /_/ /    / /_(__  ) / / /
		\____/_/ /_/  /_/ /_/ /_/\__, /    /___/____/_/ /_/
		                        /____/                       ....is now installed!


		Please look over the ~/.zshrc file to select plugins, themes, and options.

		p.s. Follow us on https://twitter.com/ohmyzsh

		p.p.s. Get stickers, shirts, and coffee mugs at https://shop.planetargon.com/collections/oh-my-zsh

	EOF
	printf "$NORMAL"

132
	env zsh -l
133
134
135
}

main