From 55457187d18221e76bd12f0fb2cfab65c49b92fb Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Tue, 5 Mar 2019 01:09:01 +0100 Subject: Initial commit --- .oh-my-zsh/tools/check_for_upgrade.sh | 60 +++++++++++++ .oh-my-zsh/tools/install.sh | 114 ++++++++++++++++++++++++ .oh-my-zsh/tools/require_tool.sh | 161 ++++++++++++++++++++++++++++++++++ .oh-my-zsh/tools/theme_chooser.sh | 97 ++++++++++++++++++++ .oh-my-zsh/tools/uninstall.sh | 34 +++++++ .oh-my-zsh/tools/upgrade.sh | 39 ++++++++ 6 files changed, 505 insertions(+) create mode 100644 .oh-my-zsh/tools/check_for_upgrade.sh create mode 100755 .oh-my-zsh/tools/install.sh create mode 100755 .oh-my-zsh/tools/require_tool.sh create mode 100755 .oh-my-zsh/tools/theme_chooser.sh create mode 100644 .oh-my-zsh/tools/uninstall.sh create mode 100644 .oh-my-zsh/tools/upgrade.sh (limited to '.oh-my-zsh/tools') diff --git a/.oh-my-zsh/tools/check_for_upgrade.sh b/.oh-my-zsh/tools/check_for_upgrade.sh new file mode 100644 index 0000000..05b31e8 --- /dev/null +++ b/.oh-my-zsh/tools/check_for_upgrade.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env zsh + +zmodload zsh/datetime + +function _current_epoch() { + echo $(( $EPOCHSECONDS / 60 / 60 / 24 )) +} + +function _update_zsh_update() { + echo "LAST_EPOCH=$(_current_epoch)" >! ${ZSH_CACHE_DIR}/.zsh-update +} + +function _upgrade_zsh() { + env ZSH=$ZSH sh $ZSH/tools/upgrade.sh + # update the zsh file + _update_zsh_update +} + +epoch_target=$UPDATE_ZSH_DAYS +if [[ -z "$epoch_target" ]]; then + # Default to old behavior + epoch_target=13 +fi + +# Cancel upgrade if the current user doesn't have write permissions for the +# oh-my-zsh directory. +[[ -w "$ZSH" ]] || return 0 + +# Cancel upgrade if git is unavailable on the system +whence git >/dev/null || return 0 + +if mkdir "$ZSH/log/update.lock" 2>/dev/null; then + if [ -f ${ZSH_CACHE_DIR}/.zsh-update ]; then + . ${ZSH_CACHE_DIR}/.zsh-update + + if [[ -z "$LAST_EPOCH" ]]; then + _update_zsh_update && return 0 + fi + + epoch_diff=$(($(_current_epoch) - $LAST_EPOCH)) + if [ $epoch_diff -gt $epoch_target ]; then + if [ "$DISABLE_UPDATE_PROMPT" = "true" ]; then + _upgrade_zsh + else + echo "[Oh My Zsh] Would you like to update? [Y/n]: \c" + read line + if [[ "$line" == Y* ]] || [[ "$line" == y* ]] || [ -z "$line" ]; then + _upgrade_zsh + else + _update_zsh_update + fi + fi + fi + else + # create the zsh file + _update_zsh_update + fi + + rmdir $ZSH/log/update.lock +fi diff --git a/.oh-my-zsh/tools/install.sh b/.oh-my-zsh/tools/install.sh new file mode 100755 index 0000000..2fb87cd --- /dev/null +++ b/.oh-my-zsh/tools/install.sh @@ -0,0 +1,114 @@ +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 + + # Only enable exit-on-error after the non-critical colorization stuff, + # which may fail on systems lacking tput or terminfo + set -e + + if ! command -v zsh >/dev/null 2>&1; then + printf "${YELLOW}Zsh is not installed!${NORMAL} Please install zsh first!\n" + exit + fi + + if [ ! -n "$ZSH" ]; then + ZSH=~/.oh-my-zsh + fi + + if [ -d "$ZSH" ]; then + printf "${YELLOW}You already have Oh My Zsh installed.${NORMAL}\n" + printf "You'll need to remove $ZSH if you want to re-install.\n" + exit + fi + + # 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 + + printf "${BLUE}Cloning Oh My Zsh...${NORMAL}\n" + command -v git >/dev/null 2>&1 || { + echo "Error: git is not installed" + exit 1 + } + # 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 + fi + env git clone --depth=1 https://github.com/robbyrussell/oh-my-zsh.git "$ZSH" || { + printf "Error: git clone of oh-my-zsh repo failed\n" + exit 1 + } + + + printf "${BLUE}Looking for an existing zsh config...${NORMAL}\n" + if [ -f ~/.zshrc ] || [ -h ~/.zshrc ]; then + printf "${YELLOW}Found ~/.zshrc.${NORMAL} ${GREEN}Backing up to ~/.zshrc.pre-oh-my-zsh${NORMAL}\n"; + mv ~/.zshrc ~/.zshrc.pre-oh-my-zsh; + fi + + printf "${BLUE}Using the Oh My Zsh template file and adding it to ~/.zshrc${NORMAL}\n" + cp "$ZSH"/templates/zshrc.zsh-template ~/.zshrc + sed "/^export ZSH=/ c\\ + export ZSH=\"$ZSH\" + " ~/.zshrc > ~/.zshrc-omztemp + mv -f ~/.zshrc-omztemp ~/.zshrc + + # 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 hash chsh >/dev/null 2>&1; then + printf "${BLUE}Time to change your default shell to zsh!${NORMAL}\n" + 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.\n" + printf "${BLUE}Please manually change your default shell to zsh!${NORMAL}\n" + fi + fi + + 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 https://shop.planetargon.com.' + echo '' + printf "${NORMAL}" + env zsh -l +} + +main diff --git a/.oh-my-zsh/tools/require_tool.sh b/.oh-my-zsh/tools/require_tool.sh new file mode 100755 index 0000000..1fa77f7 --- /dev/null +++ b/.oh-my-zsh/tools/require_tool.sh @@ -0,0 +1,161 @@ +__require_tool_version_compare () +{ + ( + # Locally ignore failures, otherwise we'll exit whenever $1 and $2 + # are not equal! + set +e + +awk_strverscmp=' + # Use only awk features that work with 7th edition Unix awk (1978). + # My, what an old awk you have, Mr. Solaris! + END { + while (length(v1) || length(v2)) { + # Set d1 to be the next thing to compare from v1, and likewise for d2. + # Normally this is a single character, but if v1 and v2 contain digits, + # compare them as integers and fractions as strverscmp does. + if (v1 ~ /^[0-9]/ && v2 ~ /^[0-9]/) { + # Split v1 and v2 into their leading digit string components d1 and d2, + # and advance v1 and v2 past the leading digit strings. + for (len1 = 1; substr(v1, len1 + 1) ~ /^[0-9]/; len1++) continue + for (len2 = 1; substr(v2, len2 + 1) ~ /^[0-9]/; len2++) continue + d1 = substr(v1, 1, len1); v1 = substr(v1, len1 + 1) + d2 = substr(v2, 1, len2); v2 = substr(v2, len2 + 1) + if (d1 ~ /^0/) { + if (d2 ~ /^0/) { + # Compare two fractions. + while (d1 ~ /^0/ && d2 ~ /^0/) { + d1 = substr(d1, 2); len1-- + d2 = substr(d2, 2); len2-- + } + if (len1 != len2 && ! (len1 && len2 && substr(d1, 1, 1) == substr(d2, 1, 1))) { + # The two components differ in length, and the common prefix + # contains only leading zeros. Consider the longer to be less. + d1 = -len1 + d2 = -len2 + } else { + # Otherwise, compare as strings. + d1 = "x" d1 + d2 = "x" d2 + } + } else { + # A fraction is less than an integer. + exit 1 + } + } else { + if (d2 ~ /^0/) { + # An integer is greater than a fraction. + exit 2 + } else { + # Compare two integers. + d1 += 0 + d2 += 0 + } + } + } else { + # The normal case, without worrying about digits. + if (v1 == "") d1 = v1; else { d1 = substr(v1, 1, 1); v1 = substr(v1,2) } + if (v2 == "") d2 = v2; else { d2 = substr(v2, 1, 1); v2 = substr(v2,2) } + } + if (d1 < d2) exit 1 + if (d1 > d2) exit 2 + } + } +' + awk "$awk_strverscmp" v1="$1" v2="$2" /dev/null + case $? in + 1) echo '<';; + 0) echo '=';; + 2) echo '>';; + esac + ) +} + + +__require_tool_fatal () +{ + echo $@ >/dev/stderr + return 1 +} + +# Usage: require_tool program version +# Returns: 0 if $1 version if greater equals than $2, 1 otherwise. +# In case of error, message is written on error output. +# +# Example: require_tool gcc 4.6 +# Use GCC environment variable if defined instead of lookup for the tool +# in the environment. +require_tool () +{ + envvar_name=$(echo $1 | tr '[:lower:]' '[:upper:]') + tool=$(printenv $envvar_name || echo $1) + local version=$($tool --version 2>/dev/null| \ + sed -n 's/.*[^0-9.]\([0-9]*\.[0-9.]*\).*/\1/p;q') + if test x"$version" = x ; then + echo "$tool is required" >/dev/stderr + return 1 + fi + case $(__require_tool_version_compare "$2" "$version") in + '>') + echo "$1 $2 or better is required: this is $tool $version" >/dev/stderr + return 1 + ;; + esac +} + +usage() { + cat < /dev/null ; then + echo "Already in favlist" + else + echo $THEME_NAME >> $FAVLIST + echo "Saved to favlist" + fi + +} + +function theme_chooser() { + for THEME in $(ls $THEMES_DIR); do + echo + theme_preview $THEME + echo + if [[ -z $1 ]]; then + noyes "Do you want to add it to your favourite list ($FAVLIST)?" || \ + insert_favlist $THEME_NAME + echo + fi + done +} + +while getopts ":lhs" Option +do + case $Option in + l ) list_themes ;; + s ) theme_chooser 0 ;; + h ) usage ;; + * ) usage ;; # Default. + esac +done + +if [[ -z $Option ]]; then + if [[ -z $1 ]]; then + banner + echo + theme_chooser + else + theme_preview $1".zsh-theme" + fi +fi diff --git a/.oh-my-zsh/tools/uninstall.sh b/.oh-my-zsh/tools/uninstall.sh new file mode 100644 index 0000000..bf2244b --- /dev/null +++ b/.oh-my-zsh/tools/uninstall.sh @@ -0,0 +1,34 @@ +read -r -p "Are you sure you want to remove Oh My Zsh? [y/N] " confirmation +if [ "$confirmation" != y ] && [ "$confirmation" != Y ]; then + echo "Uninstall cancelled" + exit +fi + +echo "Removing ~/.oh-my-zsh" +if [ -d ~/.oh-my-zsh ]; then + rm -rf ~/.oh-my-zsh +fi + +echo "Looking for original zsh config..." +if [ -f ~/.zshrc.pre-oh-my-zsh ] || [ -h ~/.zshrc.pre-oh-my-zsh ]; then + echo "Found ~/.zshrc.pre-oh-my-zsh -- Restoring to ~/.zshrc"; + + if [ -f ~/.zshrc ] || [ -h ~/.zshrc ]; then + ZSHRC_SAVE=".zshrc.omz-uninstalled-$(date +%Y%m%d%H%M%S)"; + echo "Found ~/.zshrc -- Renaming to ~/${ZSHRC_SAVE}"; + mv ~/.zshrc ~/"${ZSHRC_SAVE}"; + fi + + mv ~/.zshrc.pre-oh-my-zsh ~/.zshrc; + + echo "Your original zsh config was restored. Please restart your session." +else + if hash chsh >/dev/null 2>&1; then + echo "Switching back to bash" + chsh -s /bin/bash + else + echo "You can edit /etc/passwd to switch your default shell back to bash" + fi +fi + +echo "Thanks for trying out Oh My Zsh. It's been uninstalled." diff --git a/.oh-my-zsh/tools/upgrade.sh b/.oh-my-zsh/tools/upgrade.sh new file mode 100644 index 0000000..25b2de2 --- /dev/null +++ b/.oh-my-zsh/tools/upgrade.sh @@ -0,0 +1,39 @@ + +# 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 + +printf "${BLUE}%s${NORMAL}\n" "Updating Oh My Zsh" +cd "$ZSH" +if git pull --rebase --stat origin master +then + printf '%s' "$GREEN" + printf '%s\n' ' __ __ ' + printf '%s\n' ' ____ / /_ ____ ___ __ __ ____ _____/ /_ ' + printf '%s\n' ' / __ \/ __ \ / __ `__ \/ / / / /_ / / ___/ __ \ ' + printf '%s\n' '/ /_/ / / / / / / / / / / /_/ / / /_(__ ) / / / ' + printf '%s\n' '\____/_/ /_/ /_/ /_/ /_/\__, / /___/____/_/ /_/ ' + printf '%s\n' ' /____/ ' + printf "${BLUE}%s\n" "Hooray! Oh My Zsh has been updated and/or is at the current version." + printf "${BLUE}${BOLD}%s${NORMAL}\n" "To keep up on the latest news and updates, follow us on twitter: https://twitter.com/ohmyzsh" + printf "${BLUE}${BOLD}%s${NORMAL}\n" "Get your Oh My Zsh swag at: https://shop.planetargon.com/" +else + printf "${RED}%s${NORMAL}\n" 'There was an error updating. Try again later?' +fi -- cgit v1.2.3