# https://github.com/direnv/direnv/wiki/Python#poetry layout_poetry() { PYPROJECT_TOML="${PYPROJECT_TOML:-pyproject.toml}" if [[ ! -f "$PYPROJECT_TOML" ]]; then log_status "No pyproject.toml found. Executing \`poetry init\` to create a \`$PYPROJECT_TOML\` first." poetry init --python "^$(python3 --version 2>/dev/null | cut -d ' ' -f 2 | cur -d . -f 1-2)" fi if [[ -d ".venv" ]]; then VIRTUAL_ENV="$(pwd)/.venv" else VIRTUAL_ENV=$( poetry env info --path 2>/dev/null true ) fi if [[ -z $VIRTUAL_ENV || ! -d $VIRTUAL_ENV ]]; then log_status "No virtual environment exists. Executing \`poetry install\` to create one." poetry install VIRTUAL_ENV=$(poetry env info --path) fi PATH_add "$VIRTUAL_ENV/bin" export POETRY_ACTIVE=1 # or VENV_ACTIVE=1 export VIRTUAL_ENV } layout_sdkman() { if [[ ! -s "${SDKMAN_DIR}/bin/sdkman-init.sh" ]]; then log_status "No sdkman found." return fi [[ -s "${SDKMAN_DIR}/bin/sdkman-init.sh" ]] && source "${SDKMAN_DIR}/bin/sdkman-init.sh" SDKMANRC="${SDKMANRC:-.sdkmanrc}" if [[ ! -f "$SDKMANRC" ]]; then log_status "No $SDKMANRC found. Execution \`sdkman env init\`." sdk env init fi SDKMAN_OFFLINE_MODE=true sdk env install } # Create directory (bin by default) and add it to PATH layout_bin() { DIR=".direnv/${1:-bin}" mkdir -p "$DIR" PATH_add "$DIR" } # Extended go layout layout_go() { path_add GOPATH "$(direnv_layout_dir)/go" bindir="$(direnv_layout_dir)/go/bin" PATH_add "$bindir" export GOBIN="$bindir" mkdir -p "$GOPATH" gostate_file="$(direnv_layout_dir)/go_layout_state.txt" if [ -f "$gostate_file" ]; then if grep -q installed "$gostate_file"; then path_add GOROOT "$(direnv_layout_dir)/.go" PATH_add "$GOROOT/bin" fi return fi if command -v go >/dev/null; then read -rp "Go binary in path ($(command -v go)), keep using it? [Yn] " ans="${REPLY:-y}" if [ "${ans,,}" = y ]; then echo "use_existing" >"$gostate_file" return fi fi read -rp "Install go version ${1:-latest}? [Yn] " ans="${REPLY:-y}" if [ "${ans,,}" = n ]; then return fi path_add GOROOT "$(direnv_layout_dir)/.go" PATH_add "$GOROOT/bin" # Install go OS="$(uname -s)" ARCH="$(uname -m)" case "$OS" in Linux) case "$ARCH" in x86_64) ARCH=amd64 ;; aarch64) ARCH=arm64 ;; armv6 | armv7l) ARCH=armv6l ;; armv8) ARCH=arm64 ;; i686) ARCH=386 ;; .*386.*) ARCH=386 ;; esac PLATFORM="linux-$ARCH" ;; Darwin) case $ARCH in x86_64) ARCH=amd64 ;; arm64) ARCH=arm64 ;; esac PLATFORM="darwin-$ARCH" ;; esac if [ -z "$PLATFORM" ]; then echo "failed" >"$gostate_file" echo "Your operating system is not supported by the script." return fi if [ -d "$GOROOT" ]; then echo "failed" >"$gostate_file" echo "The Go install directory ($GOROOT) already exists. Exiting." return fi if [ $# -eq 0 ]; then VERSION=$(curl -sL "https://go.dev/VERSION?m=text" | head -n 1) else VERSION="$1" fi PACKAGE_NAME="$VERSION.$PLATFORM.tar.gz" mkdir -p "$GOROOT" echo "Downloading $PACKAGE_NAME ..." curl -sL "https://storage.googleapis.com/golang/$PACKAGE_NAME" | tar xz -C "$GOROOT" --strip-components=1 echo "installed" >"$gostate_file" }