Skip to content

Instantly share code, notes, and snippets.

@Artnoc1
Last active September 29, 2021 13:01
Show Gist options
  • Save Artnoc1/a1ae87b002032f5131cab7a36d696984 to your computer and use it in GitHub Desktop.
Save Artnoc1/a1ae87b002032f5131cab7a36d696984 to your computer and use it in GitHub Desktop.
#!/system/bin/sh
###This script should be run via curl:
#sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
###or via wget:
#sh -c "$(wget -qO- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
###or via fetch:
#sh -c "$(fetch -o - https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
#
###As an alternative, you can first download the install script and run it afterwards:
#wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh
#sh install.sh
#
###You can tweak the install behavior by setting variables when running the script. For
###example, to change the path to the Oh My Zsh repository:
#ZSH=~/.zsh sh install.sh
#
###Respects the following environment variables:
#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)
#BRANCH - branch to check out immediately after install (default: master)
#
###Other options:
#CHSH - 'no' means the installer will not change the default shell (default: yes)
#RUNZSH - 'no' means the installer will not run zsh after the install (default: yes)
#KEEP_ZSHRC - 'yes' means the installer will not replace an existing .zshrc (default: no)
#
###You can also pass some arguments to the install script to set some these options:
#--skip-chsh: has the same behavior as setting CHSH to 'no'
#--unattended: sets both CHSH and RUNZSH to 'no'
#--keep-zshrc: sets KEEP_ZSHRC to 'yes'
###For example:
#sh install.sh --unattended
###or:
#sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended
#
set -e
###Default settings
ZSH=${ZSH:-~/.oh-my-zsh}
REPO=${REPO:-ohmyzsh/ohmyzsh}
REMOTE=${REMOTE:-https://github.com/${REPO}.git}
BRANCH=${BRANCH:-master}
###Other options
CHSH=${CHSH:-yes}
RUNZSH=${RUNZSH:-yes}
KEEP_ZSHRC=${KEEP_ZSHRC:-no}
command_exists() {
command -v "$@" >/dev/null 2>&1
}
error() {
echo ${RED}"Error: $@"${RESET} >&2
}
underline() {
echo "$(printf '\033[4m')$@$(printf '\033[24m')"
}
setup_color() {
###Only use colors if connected to a terminal
if [ -t 1 ]; then
RED=$(printf '\033[31m')
GREEN=$(printf '\033[32m')
YELLOW=$(printf '\033[33m')
BLUE=$(printf '\033[34m')
BOLD=$(printf '\033[1m')
RESET=$(printf '\033[m')
else
RED="RED"
GREEN="GREEN"
YELLOW="YELLOW"
BLUE="BLUE"
BOLD=""
RESET=""
fi
}
setup_ohmyzsh() {
###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
echo "${BLUE}Cloning Oh My Zsh...${RESET}"
command_exists git || {
error "git is not installed"
exit 1
}
if [ "$OSTYPE" = cygwin ] && git --version | grep -q msysgit; then
error "Windows/MSYS Git is not supported on Cygwin"
error "Make sure the Cygwin git package is installed and is first on the \$PATH"
exit 1
fi
git clone -c core.eol=lf -c core.autocrlf=false \
-c fsck.zeroPaddedFilemode=ignore \
-c fetch.fsck.zeroPaddedFilemode=ignore \
-c receive.fsck.zeroPaddedFilemode=ignore \
--depth=1 --branch "$BRANCH" "$REMOTE" "$ZSH" || {
error "git clone of oh-my-zsh repo failed"
exit 1
}
echo
}
setup_zshrc() {
###Keep most recent old .zshrc at .zshrc.pre-oh-my-zsh, and older ones
###with datestamp of installation that moved them aside, so we never actually
###destroy a user's original zshrc
echo "${BLUE}Looking for an existing zsh config...${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
###Skip this if the user doesn't want to replace an existing .zshrc
if [ $KEEP_ZSHRC = yes ]; then
echo "${YELLOW}Found ~/.zshrc.${RESET} ${GREEN}Keeping...${RESET}"
return
fi
if [ -e "$OLD_ZSHRC" ]; then
OLD_OLD_ZSHRC="${OLD_ZSHRC}-$(date +%Y-%m-%d_%H-%M-%S)"
if [ -e "$OLD_OLD_ZSHRC" ]; then
error "$OLD_OLD_ZSHRC exists. Can't back up ${OLD_ZSHRC}"
error "re-run the installer again in a couple of seconds"
exit 1
fi
mv "$OLD_ZSHRC" "${OLD_OLD_ZSHRC}"
echo "${YELLOW}Found old ~/.zshrc.pre-oh-my-zsh." \
"${GREEN}Backing up to ${OLD_OLD_ZSHRC}${RESET}"
fi
echo "${YELLOW}Found ~/.zshrc.${RESET} ${GREEN}Backing up to ${OLD_ZSHRC}${RESET}"
mv ~/.zshrc "$OLD_ZSHRC"
fi
echo "${GREEN}Using the Oh My Zsh template file and adding it to ~/.zshrc.${RESET}"
sed "/^export ZSH=/ c\\
export ZSH=\"$ZSH\"
" "$ZSH/templates/zshrc.zsh-template" > ~/.zshrc-omztemp
mv -f ~/.zshrc-omztemp ~/.zshrc
echo
}
setup_shell() {
###Skip setup if the user wants or stdin is closed (not running interactively).
if [ $CHSH = no ]; then
return
fi
###If this user's login shell is already "zsh", do not attempt to switch.
if [ "$(basename "$SHELL")" = "zsh" ]; then
return
fi
###If this platform doesn't provide a "chsh" command, bail out.
if ! command_exists chsh; then
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${RESET}
EOF
return
fi
echo "${BLUE}Time to change your default shell to zsh:${RESET}"
###Prompt for user choice on changing the default login shell
printf "${YELLOW}Do you want to change your default shell to zsh? [Y/n]${RESET} "
read opt
case $opt in
y*|Y*|"") echo "Changing the shell..." ;;
n*|N*) echo "Shell change skipped."; return ;;
*) echo "Invalid choice. Shell change skipped."; return ;;
esac
###Check if we're running on Termux
case "$PREFIX" in
*com.termux*) termux=true; zsh=zsh ;;
*) termux=false ;;
esac
if [ "$termux" != true ]; then
###Test for the right location of the "shells" file
if [ -f /etc/shells ]; then
shells_file=/etc/shells
elif [ -f /usr/share/defaults/etc/shells ]; then ###Solus OS
shells_file=/usr/share/defaults/etc/shells
else
error "could not find /etc/shells file. Change your default shell manually."
return
fi
###Get the path to the right zsh binary
###1. Use the most preceding one based on $PATH, then check that it's in the shells file
###2. If that fails, get a zsh path from the shells file, then check it actually exists
if ! zsh=$(which zsh) || ! grep -qx "$zsh" "$shells_file"; then
if ! zsh=$(grep '^/.*/zsh$' "$shells_file" | tail -1) || [ ! -f "$zsh" ]; then
error "no zsh binary found or not present in '$shells_file'"
error "change your default shell manually."
return
fi
fi
fi
###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
else
grep "^$USER:" /etc/passwd | awk -F: '{print $7}' > ~/.shell.pre-oh-my-zsh
fi
###Actually change the default shell to zsh
if ! chsh -s "$zsh"; then
error "chsh command unsuccessful. Change your default shell manually."
else
export SHELL="$zsh"
echo "${GREEN}Shell successfully changed to '$zsh'.${RESET}"
fi
echo
}
main() {
###Run as unattended if stdin is closed
if [ ! -t 0 ]; then
RUNZSH=no
CHSH=no
fi
###PARSE_ARGUMENTS
while [ $# -gt 0 ]; do
case $1 in
--unattended) RUNZSH=no; CHSH=no ;;
--skip-chsh) CHSH=no ;;
--keep-zshrc) KEEP_ZSHRC=yes ;;
esac
shift
done
setup_color
if ! command_exists zsh; then
echo "${YELLOW}Zsh is not installed.${RESET} Please install zsh first."
exit 1
fi
if [ -d "$ZSH" ]; then
cat <<-EOF
${YELLOW}You already have Oh My Zsh installed.${RESET}
You'll need to remove '$ZSH' if you want to reinstall.
EOF
exit 1
fi
setup_ohmyzsh
setup_zshrc
setup_shell
printf "$GREEN"
cat <<-'EOF'
__ __
____ / /_ ____ ___ __ __ ____ _____/ /_
/ __ \/ __ \ / __ `__ \/ / / / /_ / / ___/ __ \
/ /_/ / / / / / / / / / / /_/ / / /_(__ ) / / /
\____/_/ /_/ /_/ /_/ /_/\__, / /___/____/_/ /_/
/____/ ....is now installed!
EOF
cat <<-EOF
Before you scream Oh My Zsh! please look over the ~/.zshrc file to select plugins, themes, and options.
EOF
printf "$RESET"
if [ $RUNZSH = no ]; then
echo "${YELLOW}Run zsh to try it out.${RESET}"
exit
fi
exec zsh -l
}
main "$@"
#Если вы пришли из bash, вам, возможно, придется изменить свой `$PATH`.
#`export PATH=$HOME/bin:/usr/local/bin:$PATH`
#-----------------------------------------
#Путь к вашей установке `oh-my-zsh`.
`export ZSH=$HOME/.oh-my-zsh`
###### -
#Задайте имя темы для загрузки - если установлено значение "random", она будет загружать случайную тему каждый раз, когда загружается oh-my-zsh. В этом случае, чтобы узнать, какая именно из них была загружена, запустите: echo $RANDOM_THEME
[Смотреть] (https://github.com/ohmyzsh/ohmyzsh/wiki/Themes)
`ZSH_THEME="robbyrussell"`
#-----------------------------------------
#Установить список тем для выбора при загрузке в случайном порядке Установка этой переменной, когда `ZSH_THEME = random` приведет к тому, что `zsh` загрузит тему из этой переменной вместо поиска в `$ZSH/themes/` Если установить пустой массив, эта переменная не будет иметь никакого эффекта.
#`ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )`
#-----------------------------------------
#Раскомментируйте следующую строку, чтобы использовать завершение с учетом регистра.
#`CASE_SENSITIVE="true"`
#-----------------------------------------
#Раскомментируйте следующую строку, чтобы использовать завершение без учета дефисов. Автозавершение с учетом регистра должно быть отключено. и - будут взаимозаменяемыми.
#`HYPHEN_INSENSITIVE="true"`
#-----------------------------------------
#Раскомментируйте следующую строку, чтобы отключить автоматические проверки обновлений каждые две недели.
#`DISABLE_AUTO_UPDATE="true"`
#-----------------------------------------
#Раскомментируйте следующую строку для автоматического обновления без запроса.
#`DISABLE_UPDATE_PROMPT="true"`
#-----------------------------------------
#Раскомментируйте следующую строку, чтобы изменить частоту автоматического обновления (в днях).
#`export UPDATE_ZSH_DAYS=13`
#-----------------------------------------
#Раскомментируйте следующую строку, если при вставке URL-адресов и другого текста произошла ошибка.
#`DISABLE_MAGIC_FUNCTIONS="true"`
#-----------------------------------------
#Раскомментируйте следующую строку, чтобы отключить цвета в ls.
#`DISABLE_LS_COLORS="true"`
#-----------------------------------------
#Раскомментируйте следующую строку, чтобы отключить автоматическую настройку заголовка терминала.
#`DISABLE_AUTO_TITLE="true"`
#-----------------------------------------
#Раскомментируйте следующую строку, чтобы включить автокоррекцию команд.
#`ENABLE_CORRECTION="true"`
#-----------------------------------------
#Раскомментируйте следующую строку, чтобы в ожидании завершения отображались красные точки.
`COMPLETION_WAITING_DOTS="true"`
#-----------------------------------------
#Раскомментируйте следующую строку, если вы хотите отключить пометку неотслеживаемых файлов в VCS как грязные.
#Это значительно ускоряет проверку статуса репозитория для больших репозиториев.
#Раскомментируйте следующую строку, если вы хотите отключить пометку неотслеживаемых файлов в VCS как грязные.
#Это значительно ускоряет проверку статуса репозитория для больших репозиториев.
`DISABLE_UNTRACKED_FILES_DIRTY="true"`
#-----------------------------------------
#Раскомментируйте следующую строку, если вы хотите изменить отметку времени выполнения команды, отображаемую в выходных данных команды history. Вы можете установить один из трех дополнительных форматов:
#"mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" или установите собственный формат, используя спецификации формата функции strftime, подробности см. в 'man strftime'.
`HIST_STAMPS="mm/dd/yyyy"`
#-----------------------------------------
#Хотели бы вы использовать другую настраиваемую папку, кроме $ZSH/custom?
`ZSH_CUSTOM=/path/to/new-custom-folder`
#-----------------------------------------
#Какие плагины вы хотите загрузить?
#Стандартные плагины можно найти в $ ZSH / plugins / Пользовательские плагины можно добавить в $ ZSH_CUSTOM / plugins / Пример формата: plugins = (rails git textmate ruby lighthouse) Объявление
`plugins=(git)`
#-----------------------------------------
`source $ZSH/oh-my-zsh.sh`
#-----------------------------------------
#Конфигурация пользователя
#`export MANPATH="/usr/local/man:$MANPATH"`
#-----------------------------------------
#Возможно, вам придется вручную установить языковую среду
#`export LANG=en_US.UTF-8`
#-----------------------------------------
#Предпочитаемый редактор для локальных и удаленных сеансов
#if [[ -n $SSH_CONNECTION ]]; then
#export EDITOR='nano'
#else
#export EDITOR='mvim'
#fi
#-----------------------------------------
#Флаги компиляции
#`export ARCHFLAGS="-arch x86_64"`
#-----------------------------------------
#Установите личные псевдонимы, переопределив псевдонимы, предоставляемые библиотеками, плагинами и темами `oh-my-zsh`. Здесь можно разместить псевдонимы, хотя пользователям `oh-my-zsh` рекомендуется определять псевдонимы в папке ZSH_CUSTOM.`alias`.
#-----------------------------------------
#Примеры псевдонимов
`alias zshconfig="mate ~/.zshrc"`
`alias ohmyzsh="mate ~/.oh-my-zsh"`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment