Spaces:
Sleeping
Sleeping
set -euo pipefail | |
__wrap__() { | |
VERSION=${PIXI_VERSION:-latest} | |
PIXI_HOME=${PIXI_HOME:-"$HOME/.pixi"} | |
BIN_DIR="$PIXI_HOME/bin" | |
REPO=prefix-dev/pixi | |
PLATFORM=$(uname -s) | |
ARCH=$(uname -m) | |
if [[ $PLATFORM == "Darwin" ]]; then | |
PLATFORM="apple-darwin" | |
elif [[ $PLATFORM == "Linux" ]]; then | |
PLATFORM="unknown-linux-musl" | |
fi | |
if [[ $ARCH == "arm64" ]] || [[ $ARCH == "aarch64" ]]; then | |
ARCH="aarch64" | |
fi | |
BINARY="pixi-${ARCH}-${PLATFORM}" | |
if [[ $VERSION == "latest" ]]; then | |
DOWNLOAD_URL=https://github.com/${REPO}/releases/latest/download/${BINARY}.tar.gz | |
else | |
DOWNLOAD_URL=https://github.com/${REPO}/releases/download/${VERSION}/${BINARY}.tar.gz | |
fi | |
printf "This script will automatically download and install Pixi (${VERSION}) for you.\nGetting it from this url: $DOWNLOAD_URL\nThe binary will be installed into '$BIN_DIR'\n" | |
if ! hash curl 2> /dev/null && ! hash wget 2> /dev/null; then | |
echo "error: you need either 'curl' or 'wget' installed for this script." | |
exit 1 | |
fi | |
if ! hash tar 2> /dev/null; then | |
echo "error: you do not have 'tar' installed which is required for this script." | |
exit 1 | |
fi | |
TEMP_FILE=$(mktemp "${TMPDIR:-/tmp}/.pixi_install.XXXXXXXX") | |
cleanup() { | |
rm -f "$TEMP_FILE" | |
} | |
trap cleanup EXIT | |
if hash curl 2> /dev/null; then | |
HTTP_CODE=$(curl -SL --progress-bar "$DOWNLOAD_URL" --output "$TEMP_FILE" --write-out "%{http_code}") | |
if [[ ${HTTP_CODE} -lt 200 || ${HTTP_CODE} -gt 299 ]]; then | |
echo "error: '${DOWNLOAD_URL}' is not available" | |
exit 1 | |
fi | |
elif hash wget 2> /dev/null; then | |
if ! wget -q --show-progress --output-document="$TEMP_FILE" "$DOWNLOAD_URL"; then | |
echo "error: '${DOWNLOAD_URL}' is not available" | |
exit 1 | |
fi | |
fi | |
# Check that file was correctly created (https://github.com/prefix-dev/pixi/issues/446) | |
if [[ ! -s $TEMP_FILE ]]; then | |
echo "error: temporary file ${TEMP_FILE} not correctly created." | |
echo " As a workaround, you can try set TMPDIR env variable to directory with write permissions." | |
exit 1 | |
fi | |
# Extract pixi from the downloaded tar file | |
mkdir -p "$BIN_DIR" | |
tar -xzf "$TEMP_FILE" -C "$BIN_DIR" | |
update_shell() { | |
FILE=$1 | |
LINE=$2 | |
# shell update can be suppressed by `PIXI_NO_PATH_UPDATE` env var | |
[[ ! -z "${PIXI_NO_PATH_UPDATE-}" ]] && echo "No path update because PIXI_NO_PATH_UPDATE has a value" && return | |
# Create the file if it doesn't exist | |
if [ -f "$FILE" ]; then | |
touch "$FILE" | |
fi | |
# Append the line if not already present | |
if ! grep -Fxq "$LINE" "$FILE" | |
then | |
echo "Updating '${FILE}'" | |
echo "$LINE" >> "$FILE" | |
fi | |
} | |
case "$(basename "$SHELL")" in | |
bash) | |
if [ -f ~/.bash_profile ]; then | |
BASH_FILE=~/.bash_profile | |
else | |
# Default to bashrc as that is used in non login shells instead of the profile. | |
BASH_FILE=~/.bashrc | |
fi | |
LINE="export PATH=\$PATH:${BIN_DIR}" | |
update_shell $BASH_FILE "$LINE" | |
;; | |
fish) | |
LINE="fish_add_path ${BIN_DIR}" | |
update_shell ~/.config/fish/config.fish "$LINE" | |
;; | |
zsh) | |
LINE="export PATH=\$PATH:${BIN_DIR}" | |
update_shell ~/.zshrc "$LINE" | |
;; | |
*) | |
echo "Unsupported shell: $(basename "$0")" | |
;; | |
esac | |
chmod +x "$BIN_DIR/pixi" | |
echo "Please restart or source your shell." | |
}; __wrap__ | |