mirror of
https://github.com/sorin-ionescu/prezto.git
synced 2024-06-01 13:09:32 +02:00
feat(helper): add os-type helper functions
Add the following functions: - is-darwin - is-linux - is-bsd - is-cygwin And apply them everywhere I found code doing that what these functions do.
This commit is contained in:
parent
6a1f2f1c3e
commit
2477c103b1
|
@ -30,27 +30,22 @@ function coalesce {
|
|||
return 1
|
||||
}
|
||||
|
||||
# Checks if running on macOS Darwin.
|
||||
# is true on MacOS Darwin
|
||||
function is-darwin {
|
||||
[[ "$OSTYPE" == darwin* ]]
|
||||
}
|
||||
|
||||
# Checks if running on Linux.
|
||||
# is true on Linux's
|
||||
function is-linux {
|
||||
[[ "$OSTYPE" == linux* ]]
|
||||
}
|
||||
|
||||
# Checks if running on BSD.
|
||||
# is true on BSD's
|
||||
function is-bsd {
|
||||
[[ "$OSTYPE" == *bsd* ]]
|
||||
}
|
||||
|
||||
# Checks if running on Cygwin (Windows).
|
||||
# is true on Cygwin (Windows)
|
||||
function is-cygwin {
|
||||
[[ "$OSTYPE" == cygwin* ]]
|
||||
}
|
||||
|
||||
# Checks if running on termux (Android).
|
||||
function is-termux {
|
||||
[[ "$OSTYPE" == linux-android ]]
|
||||
}
|
||||
|
|
|
@ -5,11 +5,8 @@
|
|||
# Sorin Ionescu <sorin.ionescu@gmail.com>
|
||||
#
|
||||
|
||||
# Load dependencies.
|
||||
pmodload 'helper'
|
||||
|
||||
# Return if requirements are not found.
|
||||
if ! is-darwin && ! is-linux; then
|
||||
if ! is-darwin || ! is-linux; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
|
@ -39,9 +36,21 @@ alias brewu='brew upgrade'
|
|||
alias brewx='brew uninstall'
|
||||
|
||||
# Homebrew Cask
|
||||
alias caski='brew install --cask'
|
||||
alias caskl='brew list --cask'
|
||||
alias casko='brew outdated --cask'
|
||||
alias casks='brew search --cask'
|
||||
alias casku='brew upgrade --cask'
|
||||
alias caskx='brew uninstall --cask'
|
||||
alias cask='brew cask'
|
||||
alias caskc='hb_deprecated brew cask cleanup'
|
||||
alias caskC='hb_deprecated brew cask cleanup'
|
||||
alias caski='brew cask install'
|
||||
alias caskl='brew cask list'
|
||||
alias casko='brew cask outdated'
|
||||
alias casks='hb_deprecated brew cask search'
|
||||
alias caskx='brew cask uninstall'
|
||||
|
||||
function hb_deprecated {
|
||||
local cmd="${@[3]}"
|
||||
local cmd_args="${@:4}"
|
||||
|
||||
printf "'brew cask %s' has been deprecated, " "${cmd}"
|
||||
printf "using 'brew %s' instead\n" "${cmd}"
|
||||
|
||||
command brew "${cmd}" "${=cmd_args}"
|
||||
}
|
||||
|
|
|
@ -5,79 +5,70 @@
|
|||
# Sorin Ionescu <sorin.ionescu@gmail.com>
|
||||
# Sebastian Wiesner <lunaryorn@googlemail.com>
|
||||
# Patrick Bos <egpbos@gmail.com>
|
||||
# Indrajit Raychaudhuri <irc@indrajit.com>
|
||||
#
|
||||
|
||||
# Load dependencies.
|
||||
pmodload 'helper'
|
||||
# Load manually installed pyenv into the path
|
||||
if [[ -s "${PYENV_ROOT:=$HOME/.pyenv}/bin/pyenv" ]]; then
|
||||
path=("${PYENV_ROOT}/bin" $path)
|
||||
eval "$(pyenv init - --no-rehash zsh)"
|
||||
|
||||
# Load manually installed or package manager installed pyenv into the shell
|
||||
# session.
|
||||
if [[ -s "${local_pyenv::=${PYENV_ROOT:-$HOME/.pyenv}/bin/pyenv}" ]] \
|
||||
|| (( $+commands[pyenv] )); then
|
||||
|
||||
# Ensure manually installed pyenv is added to path when present.
|
||||
[[ -s $local_pyenv ]] && path=($local_pyenv:h $path)
|
||||
|
||||
# pyenv 2+ requires shims to be added to path before being initialized.
|
||||
autoload -Uz is-at-least
|
||||
if is-at-least 2 ${"$(pyenv --version 2>&1)"[(w)2]}; then
|
||||
eval "$(pyenv init --path zsh)"
|
||||
fi
|
||||
|
||||
eval "$(pyenv init - zsh)"
|
||||
# Load pyenv into the current python session
|
||||
elif (( $+commands[pyenv] )); then
|
||||
eval "$(pyenv init - --no-rehash zsh)"
|
||||
|
||||
# Prepend PEP 370 per user site packages directory, which defaults to
|
||||
# ~/Library/Python on macOS and ~/.local elsewhere, to PATH. The
|
||||
# path can be overridden using PYTHONUSERBASE.
|
||||
else
|
||||
if [[ -n "$PYTHONUSERBASE" ]]; then
|
||||
path=($PYTHONUSERBASE/bin(N) $path)
|
||||
path=($PYTHONUSERBASE/bin $path)
|
||||
elif is-darwin; then
|
||||
path=($HOME/Library/Python/*/bin(N) $path)
|
||||
else
|
||||
# This is subject to change.
|
||||
path=($HOME/.local/bin(N) $path)
|
||||
path=($HOME/.local/bin $path)
|
||||
fi
|
||||
fi
|
||||
|
||||
unset local_pyenv
|
||||
|
||||
# Return if requirements are not found.
|
||||
if (( ! $#commands[(i)python[23]#] && ! $+functions[pyenv] && ! $+commands[conda] )); then
|
||||
if (( ! $+commands[python] && ! $+commands[pyenv] )); then
|
||||
return 1
|
||||
fi
|
||||
|
||||
function _python-workon-cwd {
|
||||
# Check if this is a Git repo.
|
||||
local GIT_REPO_ROOT="$(git rev-parse --show-toplevel 2> /dev/null)"
|
||||
# Get absolute path, resolving symlinks.
|
||||
local PROJECT_ROOT="$PWD:A"
|
||||
# Check if this is a Git repo
|
||||
local GIT_REPO_ROOT=""
|
||||
local GIT_TOPLEVEL="$(git rev-parse --show-toplevel 2> /dev/null)"
|
||||
if [[ $? == 0 ]]; then
|
||||
GIT_REPO_ROOT="$GIT_TOPLEVEL"
|
||||
fi
|
||||
# Get absolute path, resolving symlinks
|
||||
local PROJECT_ROOT="${PWD:A}"
|
||||
while [[ "$PROJECT_ROOT" != "/" && ! -e "$PROJECT_ROOT/.venv" \
|
||||
&& ! -d "$PROJECT_ROOT/.git" && "$PROJECT_ROOT" != "$GIT_REPO_ROOT" ]]; do
|
||||
PROJECT_ROOT="$PROJECT_ROOT:h"
|
||||
&& ! -d "$PROJECT_ROOT/.git" && "$PROJECT_ROOT" != "$GIT_REPO_ROOT" ]]; do
|
||||
PROJECT_ROOT="${PROJECT_ROOT:h}"
|
||||
done
|
||||
if [[ $PROJECT_ROOT == "/" ]]; then
|
||||
if [[ "$PROJECT_ROOT" == "/" ]]; then
|
||||
PROJECT_ROOT="."
|
||||
fi
|
||||
# Check for virtualenv name override.
|
||||
# Check for virtualenv name override
|
||||
local ENV_NAME=""
|
||||
if [[ -f "$PROJECT_ROOT/.venv" ]]; then
|
||||
ENV_NAME="$(<$PROJECT_ROOT/.venv)"
|
||||
ENV_NAME="$(cat "$PROJECT_ROOT/.venv")"
|
||||
elif [[ -f "$PROJECT_ROOT/.venv/bin/activate" ]]; then
|
||||
ENV_NAME="$PROJECT_ROOT/.venv"
|
||||
elif [[ $PROJECT_ROOT != "." ]]; then
|
||||
ENV_NAME="$PROJECT_ROOT:t"
|
||||
elif [[ "$PROJECT_ROOT" != "." ]]; then
|
||||
ENV_NAME="${PROJECT_ROOT:t}"
|
||||
fi
|
||||
if [[ -n $CD_VIRTUAL_ENV && "$ENV_NAME" != "$CD_VIRTUAL_ENV" ]]; then
|
||||
# We've just left the repo, deactivate the environment.
|
||||
# Note: this only happens if the virtualenv was activated automatically.
|
||||
# We've just left the repo, deactivate the environment
|
||||
# Note: this only happens if the virtualenv was activated automatically
|
||||
deactivate && unset CD_VIRTUAL_ENV
|
||||
fi
|
||||
if [[ $ENV_NAME != "" ]]; then
|
||||
# Activate the environment only if it is not already active.
|
||||
if [[ "$ENV_NAME" != "" ]]; then
|
||||
# Activate the environment only if it is not already active
|
||||
if [[ "$VIRTUAL_ENV" != "$WORKON_HOME/$ENV_NAME" ]]; then
|
||||
if [[ -n "$WORKON_HOME" && -e "$WORKON_HOME/$ENV_NAME/bin/activate" ]]; then
|
||||
if [[ -e "$WORKON_HOME/$ENV_NAME/bin/activate" ]]; then
|
||||
workon "$ENV_NAME" && export CD_VIRTUAL_ENV="$ENV_NAME"
|
||||
elif [[ -e "$ENV_NAME/bin/activate" ]]; then
|
||||
source $ENV_NAME/bin/activate && export CD_VIRTUAL_ENV="$ENV_NAME"
|
||||
|
@ -86,17 +77,17 @@ function _python-workon-cwd {
|
|||
fi
|
||||
}
|
||||
|
||||
# Load auto workon cwd hook.
|
||||
if zstyle -t ':prezto:module:python:virtualenv' auto-switch; then
|
||||
# Auto workon when changing directory.
|
||||
# Load auto workon cwd hook
|
||||
if zstyle -t ':prezto:module:python:virtualenv' auto-switch 'yes'; then
|
||||
# Auto workon when changing directory
|
||||
autoload -Uz add-zsh-hook
|
||||
add-zsh-hook chpwd _python-workon-cwd
|
||||
fi
|
||||
|
||||
# Load virtualenvwrapper into the shell session, if pre-requisites are met
|
||||
# and unless explicitly requested not to
|
||||
if (( $+VIRTUALENVWRAPPER_VIRTUALENV || $+commands[virtualenv] )) \
|
||||
&& zstyle -T ':prezto:module:python:virtualenv' initialize ; then
|
||||
if (( $+VIRTUALENVWRAPPER_VIRTUALENV || $+commands[virtualenv] )) && \
|
||||
zstyle -T ':prezto:module:python:virtualenv' initialize ; then
|
||||
# Set the directory where virtual environments are stored.
|
||||
export WORKON_HOME="${WORKON_HOME:-$HOME/.virtualenvs}"
|
||||
|
||||
|
@ -111,40 +102,70 @@ if (( $+VIRTUALENVWRAPPER_VIRTUALENV || $+commands[virtualenv] )) \
|
|||
# can exist in 'pyenv' synthesized paths (e.g., '~/.pyenv/plugins') instead.
|
||||
local -a pyenv_plugins
|
||||
if (( $+commands[pyenv] )); then
|
||||
pyenv_plugins=(${(@oM)${(f)"$(pyenv commands --no-sh 2> /dev/null)"}:#virtualenv*})
|
||||
pyenv_plugins=(${(@oM)${(f)"$(pyenv commands --no-sh 2>/dev/null)"}:#virtualenv*})
|
||||
fi
|
||||
|
||||
# Optionally activate 'virtualenv' plugin when available.
|
||||
if (( $pyenv_plugins[(i)virtualenv-init] <= $#pyenv_plugins )); then
|
||||
# Enable 'virtualenv' with 'pyenv'.
|
||||
eval "$(pyenv virtualenv-init - zsh)"
|
||||
|
||||
# Optionally activate 'virtualenvwrapper' plugin when available.
|
||||
if (( $pyenv_plugins[(i)virtualenvwrapper(_lazy|)] <= $#pyenv_plugins )); then
|
||||
pyenv "$pyenv_plugins[(R)virtualenvwrapper(_lazy|)]"
|
||||
fi
|
||||
else
|
||||
# Fallback to 'virtualenvwrapper' without 'pyenv' wrapper if available
|
||||
# in '$path' or in an alternative location on a Debian based system.
|
||||
#
|
||||
# If homebrew is installed and the python location wasn't overridden via
|
||||
# environment variable we fall back to python3 then python2 in that order.
|
||||
# This is needed to fix an issue with virtualenvwrapper as homebrew no
|
||||
# longer shadows the system python.
|
||||
if [[ -z "$VIRTUALENVWRAPPER_PYTHON" ]] && (( $+commands[brew] )); then
|
||||
if (( $+commands[python3] )); then
|
||||
export VIRTUALENVWRAPPER_PYTHON=$commands[python3]
|
||||
elif (( $+commands[python2] )); then
|
||||
export VIRTUALENVWRAPPER_PYTHON=$commands[python2]
|
||||
fi
|
||||
fi
|
||||
|
||||
virtenv_sources=(
|
||||
${(@Ov)commands[(I)virtualenvwrapper(_lazy|).sh]}
|
||||
/usr/share/virtualenvwrapper/virtualenvwrapper(_lazy|).sh(OnN)
|
||||
)
|
||||
if (( $#virtenv_sources )); then
|
||||
source "${virtenv_sources[1]}"
|
||||
fi
|
||||
|
||||
unset virtenv_sources
|
||||
fi
|
||||
|
||||
# Optionally activate 'virtualenvwrapper' plugin when available.
|
||||
if (( $pyenv_plugins[(i)virtualenvwrapper(_lazy|)] <= $#pyenv_plugins )); then
|
||||
pyenv "$pyenv_plugins[(R)virtualenvwrapper(_lazy|)]"
|
||||
fi
|
||||
|
||||
unset pyenv_plugins
|
||||
|
||||
else
|
||||
# Fallback to 'virtualenvwrapper' without 'pyenv' wrapper if 'python' is
|
||||
# available in '$path'.
|
||||
if (( ! $+VIRTUALENVWRAPPER_PYTHON )) && (( $#commands[(i)python[23]#] )); then
|
||||
VIRTUALENVWRAPPER_PYTHON=$commands[(i)python[23]#]
|
||||
fi
|
||||
|
||||
virtenv_sources=(
|
||||
${(@Ov)commands[(I)virtualenvwrapper(_lazy|).sh]}
|
||||
/usr/share/virtualenvwrapper/virtualenvwrapper(_lazy|).sh(OnN)
|
||||
)
|
||||
if (( $#virtenv_sources )); then
|
||||
source "$virtenv_sources[1]"
|
||||
fi
|
||||
|
||||
unset virtenv_sources
|
||||
fi
|
||||
|
||||
# Load conda into the shell session, if requested.
|
||||
# Load PIP completion.
|
||||
if (( $#commands[(i)pip(|[23])] )); then
|
||||
cache_file="${TMPDIR:-/tmp}/prezto-pip-cache.$UID.zsh"
|
||||
|
||||
# Detect and use one available from among 'pip', 'pip2', 'pip3' variants
|
||||
pip_command="$commands[(i)pip(|[23])]"
|
||||
|
||||
if [[ "$pip_command" -nt "$cache_file" \
|
||||
|| "${ZDOTDIR:-$HOME}/.zpreztorc" -nt "$cache_file" \
|
||||
|| ! -s "$cache_file" ]]; then
|
||||
# pip is slow; cache its output. And also support 'pip2', 'pip3' variants
|
||||
$pip_command completion --zsh \
|
||||
| sed -e "s/\(compctl -K [-_[:alnum:]]* pip\).*/\1{,2,3}{,.{0..9}}/" \
|
||||
>! "$cache_file" \
|
||||
2> /dev/null
|
||||
fi
|
||||
|
||||
source "$cache_file"
|
||||
|
||||
unset cache_file pip_command
|
||||
fi
|
||||
|
||||
# Load conda into the shell session, if requested
|
||||
zstyle -T ':prezto:module:python' conda-init
|
||||
if (( $? && $+commands[conda] )); then
|
||||
if (( $(conda ..changeps1) )); then
|
||||
|
|
|
@ -10,9 +10,6 @@ if (( ! $+commands[rsync] )); then
|
|||
return 1
|
||||
fi
|
||||
|
||||
# Load dependencies.
|
||||
pmodload 'helper'
|
||||
|
||||
#
|
||||
# Aliases
|
||||
#
|
||||
|
@ -20,19 +17,14 @@ pmodload 'helper'
|
|||
_rsync_cmd='rsync --verbose --progress --human-readable --compress --archive \
|
||||
--hard-links --one-file-system'
|
||||
|
||||
autoload -Uz is-at-least
|
||||
if is-at-least 3.1 ${"$(rsync --version 2>&1)"[(w)3]}; then
|
||||
if grep -q 'xattrs' <(rsync --help 2>&1); then
|
||||
_rsync_cmd="${_rsync_cmd} --acls --xattrs"
|
||||
fi
|
||||
|
||||
# ACL and extended attributes support
|
||||
if grep -q 'xattrs' <(rsync --help 2>&1); then
|
||||
_rsync_cmd="${_rsync_cmd} --acls --xattrs"
|
||||
fi
|
||||
|
||||
# macOS Enhancements
|
||||
# https://bombich.com/kb/ccc5/credits
|
||||
if is-darwin && grep -q 'file-flags' <(rsync --help 2>&1); then
|
||||
_rsync_cmd="${_rsync_cmd} --crtimes --fileflags --force-change"
|
||||
fi
|
||||
# macOS and HFS+ Enhancements
|
||||
# https://bombich.com/kb/ccc5/credits
|
||||
if is-darwin && grep -q 'file-flags' <(rsync --help 2>&1); then
|
||||
_rsync_cmd="${_rsync_cmd} --crtimes --fileflags --protect-decmpfs --force-change"
|
||||
fi
|
||||
|
||||
alias rsync-copy="${_rsync_cmd}"
|
||||
|
|
Loading…
Reference in a new issue