summaryrefslogtreecommitdiff
path: root/tools/install.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/install.sh')
-rwxr-xr-xtools/install.sh52
1 files changed, 37 insertions, 15 deletions
diff --git a/tools/install.sh b/tools/install.sh
index a6538f9d7..f4ef16a0c 100755
--- a/tools/install.sh
+++ b/tools/install.sh
@@ -16,6 +16,9 @@
# ZSH=~/.zsh sh install.sh
#
# Respects the following environment variables:
+# ZDOTDIR - path to Zsh dotfiles directory (default: unset). See [1][2]
+# [1] https://zsh.sourceforge.io/Doc/Release/Parameters.html#index-ZDOTDIR
+# [2] https://zsh.sourceforge.io/Doc/Release/Files.html#index-ZDOTDIR_002c-use-of
# ZSH - path to the Oh My Zsh repository folder (default: $HOME/.oh-my-zsh)
# REPO - name of the GitHub repo to install from (default: ohmyzsh/ohmyzsh)
# REMOTE - full remote URL of the git repo to install (default: GitHub via HTTPS)
@@ -53,8 +56,17 @@ HOME="${HOME:-$(eval echo ~$USER)}"
# Track if $ZSH was provided
custom_zsh=${ZSH:+yes}
-# Default settings
+# Use $zdot to keep track of where the directory is for zsh dotfiles
+# To check if $ZDOTDIR was provided, explicitly check for $ZDOTDIR
+zdot="${ZDOTDIR:-$HOME}"
+
+# Default value for $ZSH
+# a) if $ZDOTDIR is supplied and not $HOME: $ZDOTDIR/ohmyzsh
+# b) otherwise, $HOME/.oh-my-zsh
+[ "$ZDOTDIR" = "$HOME" ] || ZSH="${ZSH:-${ZDOTDIR:+$ZDOTDIR/ohmyzsh}}"
ZSH="${ZSH:-$HOME/.oh-my-zsh}"
+
+# Default settings
REPO=${REPO:-ohmyzsh/ohmyzsh}
REMOTE=${REMOTE:-https://github.com/${REPO}.git}
BRANCH=${BRANCH:-master}
@@ -311,11 +323,11 @@ setup_zshrc() {
echo "${FMT_BLUE}Looking for an existing zsh config...${FMT_RESET}"
# Must use this exact name so uninstall.sh can find it
- OLD_ZSHRC=~/.zshrc.pre-oh-my-zsh
- if [ -f ~/.zshrc ] || [ -h ~/.zshrc ]; then
+ OLD_ZSHRC="$zdot/.zshrc.pre-oh-my-zsh"
+ if [ -f "$zdot/.zshrc" ] || [ -h "$zdot/.zshrc" ]; then
# Skip this if the user doesn't want to replace an existing .zshrc
if [ "$KEEP_ZSHRC" = yes ]; then
- echo "${FMT_YELLOW}Found ~/.zshrc.${FMT_RESET} ${FMT_GREEN}Keeping...${FMT_RESET}"
+ echo "${FMT_YELLOW}Found ${zdot}/.zshrc.${FMT_RESET} ${FMT_GREEN}Keeping...${FMT_RESET}"
return
fi
if [ -e "$OLD_ZSHRC" ]; then
@@ -327,19 +339,24 @@ setup_zshrc() {
fi
mv "$OLD_ZSHRC" "${OLD_OLD_ZSHRC}"
- echo "${FMT_YELLOW}Found old ~/.zshrc.pre-oh-my-zsh." \
+ echo "${FMT_YELLOW}Found old .zshrc.pre-oh-my-zsh." \
"${FMT_GREEN}Backing up to ${OLD_OLD_ZSHRC}${FMT_RESET}"
fi
- echo "${FMT_YELLOW}Found ~/.zshrc.${FMT_RESET} ${FMT_GREEN}Backing up to ${OLD_ZSHRC}${FMT_RESET}"
- mv ~/.zshrc "$OLD_ZSHRC"
+ echo "${FMT_YELLOW}Found ${zdot}/.zshrc.${FMT_RESET} ${FMT_GREEN}Backing up to ${OLD_ZSHRC}${FMT_RESET}"
+ mv "$zdot/.zshrc" "$OLD_ZSHRC"
fi
- echo "${FMT_GREEN}Using the Oh My Zsh template file and adding it to ~/.zshrc.${FMT_RESET}"
+ echo "${FMT_GREEN}Using the Oh My Zsh template file and adding it to $zdot/.zshrc.${FMT_RESET}"
- # Replace $HOME path with '$HOME' in $ZSH variable in .zshrc file
- omz=$(echo "$ZSH" | sed "s|^$HOME/|\$HOME/|")
- sed "s|^export ZSH=.*$|export ZSH=\"${omz}\"|" "$ZSH/templates/zshrc.zsh-template" > ~/.zshrc-omztemp
- mv -f ~/.zshrc-omztemp ~/.zshrc
+ # Modify $ZSH variable in .zshrc directory to use the literal $ZDOTDIR or $HOME
+ omz="$ZSH"
+ if [ -n "$ZDOTDIR" ] && [ "$ZDOTDIR" != "$HOME" ]; then
+ omz=$(echo "$omz" | sed "s|^$ZDOTDIR/|\$ZDOTDIR/|")
+ fi
+ omz=$(echo "$omz" | sed "s|^$HOME/|\$HOME/|")
+
+ sed "s|^export ZSH=.*$|export ZSH=\"${omz}\"|" "$ZSH/templates/zshrc.zsh-template" > "$zdot/.zshrc-omztemp"
+ mv -f "$zdot/.zshrc-omztemp" "$zdot/.zshrc"
echo
}
@@ -407,9 +424,9 @@ EOF
# We're going to change the default shell, so back up the current one
if [ -n "$SHELL" ]; then
- echo "$SHELL" > ~/.shell.pre-oh-my-zsh
+ echo "$SHELL" > "$zdot/.shell.pre-oh-my-zsh"
else
- grep "^$USER:" /etc/passwd | awk -F: '{print $7}' > ~/.shell.pre-oh-my-zsh
+ grep "^$USER:" /etc/passwd | awk -F: '{print $7}' > "$zdot/.shell.pre-oh-my-zsh"
fi
echo "Changing your shell to $zsh..."
@@ -451,7 +468,7 @@ print_success() {
printf '\n'
printf '\n'
printf "%s %s %s\n" "Before you scream ${FMT_BOLD}${FMT_YELLOW}Oh My Zsh!${FMT_RESET} look over the" \
- "$(fmt_code "$(fmt_link ".zshrc" "file://$HOME/.zshrc" --text)")" \
+ "$(fmt_code "$(fmt_link ".zshrc" "file://$zdot/.zshrc" --text)")" \
"file to select plugins, themes, and options."
printf '\n'
printf '%s\n' "• Follow us on Twitter: $(fmt_link @ohmyzsh https://twitter.com/ohmyzsh)"
@@ -506,6 +523,11 @@ EOF
exit 1
fi
+ # Create ZDOTDIR folder structure if it doesn't exist
+ if [ -n "$ZDOTDIR" ]; then
+ mkdir -p "$ZDOTDIR"
+ fi
+
setup_ohmyzsh
setup_zshrc
setup_shell