From 7d81e6804953cf623cf84b47b3b255ada8cf9988 Mon Sep 17 00:00:00 2001 From: Ethan Paul Date: Wed, 5 Nov 2025 18:21:30 -0500 Subject: [PATCH] Complete reimplementation to support cross platform usage without namespaces --- .post-commit-hook | 20 ----- Makefile | 19 +++++ README.md | 4 +- bashrc.sh | 35 +++++++++ completions.d/dev.completion | 5 ++ configure.sh | 5 -- Containerfile => container/Containerfile | 19 ++--- container/github-install.bash | 75 +++++++++++++++++++ container/profile.d/99-aliases.sh | 13 ++++ .../profile.d/99-load-user-bashrc.sh | 3 - container/static-repos/README.md | 2 + .../static-repos/google-cloud-sdk.repo | 0 .../static-repos/kubernetes.repo | 0 inputrc | 1 + install-bins.bash | 56 -------------- install-rpms.bash | 30 -------- scripts.d/00-directories.sh | 3 + scripts.d/01-aliases.sh | 17 +++++ scripts.d/02-direnv.sh | 3 + scripts.d/10-cardstat.sh | 12 +++ scripts.d/10-powerline.sh | 6 ++ scripts.d/10-random.sh | 8 ++ scripts.d/10-up.sh | 1 + scripts.d/50-dev.sh | 54 +++++++++++++ 24 files changed, 263 insertions(+), 128 deletions(-) delete mode 100755 .post-commit-hook create mode 100644 Makefile create mode 100644 bashrc.sh create mode 100644 completions.d/dev.completion delete mode 100755 configure.sh rename Containerfile => container/Containerfile (68%) create mode 100755 container/github-install.bash create mode 100644 container/profile.d/99-aliases.sh rename load-user-bashrc.sh => container/profile.d/99-load-user-bashrc.sh (84%) create mode 100644 container/static-repos/README.md rename google-cloud-sdk.repo => container/static-repos/google-cloud-sdk.repo (100%) rename kubernetes.repo => container/static-repos/kubernetes.repo (100%) create mode 100644 inputrc delete mode 100755 install-bins.bash delete mode 100755 install-rpms.bash create mode 100644 scripts.d/00-directories.sh create mode 100644 scripts.d/01-aliases.sh create mode 100644 scripts.d/02-direnv.sh create mode 100644 scripts.d/10-cardstat.sh create mode 100644 scripts.d/10-powerline.sh create mode 100644 scripts.d/10-random.sh create mode 100644 scripts.d/10-up.sh create mode 100644 scripts.d/50-dev.sh diff --git a/.post-commit-hook b/.post-commit-hook deleted file mode 100755 index 879fe07..0000000 --- a/.post-commit-hook +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash - -set -e - -BASE_IMAGE=$(git config get toolbox-dev-env.base-image.name) -if git config get toolbox-dev-env.base-image.version-script &>/dev/null; then - BASE_IMAGE_VERSION=$(eval $(git config get toolbox-dev-env.base-image.version-script)) -else - BASE_IMAGE_VERSION=$(git config get toolbox-dev-env.base-image.version) -fi -BUILD_NONCE=$(git rev-parse HEAD) - -ENV_NAME=$(git config get toolbox-dev-env.name) - -podman build . \ - --tag "localhost/${ENV_NAME}:latest" \ - --build-arg BASE_IMAGE="${BASE_IMAGE}" \ - --build-arg BASE_IMAGE_VERSION="${BASE_IMAGE_VERSION}" \ - --build-arg BUILD_NONCE="${BUILD_NONCE}" \ - --build-arg ENV_NAME="${ENV_NAME}" diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..137e113 --- /dev/null +++ b/Makefile @@ -0,0 +1,19 @@ +BUILD_COMMIT = $(shell git rev-parse HEAD) +BASE_IMAGE = registry.fedoraproject.org/fedora-toolbox +BASE_IMAGE_VERSION = $(shell cat /etc/os-release | grep VERSION_ID | cut -d = -f 2) +REPOSITORY = localhost/toolbox-dev-env + +build: + podman build ./container/ --tag $(REPOSITORY):$(BUILD_COMMIT) --build-arg BASE_IMAGE="$(BASE_IMAGE)" --build-arg BASE_IMAGE_VERSION="$(BASE_IMAGE_VERSION)" --build-arg BUILD_COMMIT="$(BUILD_COMMIT)" + podman tag $(REPOSITORY):$(BUILD_COMMIT) $(REPOSITORY):latest + +install: build + + mkdir --parents ~/.config/bashrc.d + cp scripts.d/*.sh ~/.config/bashrc.d/ + + mkdir --parents ~/.config/completions.d + cp completions.d/*.completion ~/.config/completions.d/ + + cp bashrc.sh ~/.bashrc + cp inputrc ~/.inputrc \ No newline at end of file diff --git a/README.md b/README.md index 2b5aca7..94d90d7 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # toolbox dev env -A base development environment for building [Toolbox](https://containertoolbx.org/) containers from +My personal development environment for using [Toolbox](https://containertoolbx.org/) containers. -For initial repo setup, be certain to run `./setup.sh`. After initial setup, use `./configure.sh` +To install, run `make install`. To update the image use `make build` and then recreate any running toolbox containers. diff --git a/bashrc.sh b/bashrc.sh new file mode 100644 index 0000000..bc81cfd --- /dev/null +++ b/bashrc.sh @@ -0,0 +1,35 @@ +# .bashrc + +# Source global definitions +if [ -f /etc/bashrc ]; then + . /etc/bashrc +fi + +if [ -f '/run/.toolboxenv' ]; then + export LOCATION="Toolbox: $(cat /run/.containerenv | grep name | cut -d '=' -f 2)" +else + export LOCATION="Host: $(hostname)" +fi + +export HISTFILE="$HOME/.bash_history" +export PYTHON_HISTORY="$HOME/.python_history" + +# User specific environment +if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]] +then + PATH="$HOME/.local/bin:$HOME/bin:$PATH" +fi +export PATH + +# Uncomment the following line if you don't like systemctl's auto-paging feature: +# export SYSTEMD_PAGER= + +# Basically this is here to support the nonsense I'm doing with toolbox alt-home +# locations. This determines the current path of the current script so that we +# don't need to hardcode paths +currdir=$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd) + +for b in ${currdir}/.config/bashrc.d/*.sh; do source $b; done +for c in ${currdir}/.config/completions.d/*.completion; do source $c; done + +unset currdir diff --git a/completions.d/dev.completion b/completions.d/dev.completion new file mode 100644 index 0000000..bc476be --- /dev/null +++ b/completions.d/dev.completion @@ -0,0 +1,5 @@ +function _dev_completion() { + local cur=${COMP_WORDS[COMP_CWORD]}; + COMPREPLY=( $(compgen -W "$(command ls $PROJECTS_PATH)" -- $cur) ); +} +complete -F _dev_completion dev \ No newline at end of file diff --git a/configure.sh b/configure.sh deleted file mode 100755 index 264980e..0000000 --- a/configure.sh +++ /dev/null @@ -1,5 +0,0 @@ -cp .post-commit-hook .git/hooks/post-commit -git config set toolbox-dev-env.name voyager-base -git config set toolbox-dev-env.base-image.name registry.fedoraproject.org/fedora-toolbox -git config set toolbox-dev-env.base-image.version-script 'cat /etc/os-release | grep VERSION_ID | cut -d = -f 2' -git config unset toolbox-dev-env.base-image.version diff --git a/Containerfile b/container/Containerfile similarity index 68% rename from Containerfile rename to container/Containerfile index 6ea911b..7bb6471 100644 --- a/Containerfile +++ b/container/Containerfile @@ -3,16 +3,12 @@ ARG BASE_IMAGE_VERSION FROM ${BASE_IMAGE}:${BASE_IMAGE_VERSION} -ARG BUILD_NONCE -ARG ENV_NAME +ARG BUILD_COMMIT -ENV TOOLBOX_ENV=${ENV_NAME} +LABEL local.build.commit=${BUILD_COMMIT} -LABEL local.${ENV_NAME}.nonce=${BUILD_NONCE} - -ADD load-user-bashrc.sh /etc/profile.d/99-load-user-bashrc.sh -ADD google-cloud-sdk.repo /etc/yum.repos.d/google-cloud-sdk.repo -ADD kubernetes.repo /etc/yum.repos.d/kubernetes.repo +ADD static-repos/google-cloud-sdk.repo /etc/yum.repos.d/google-cloud-sdk.repo +ADD static-repos/kubernetes.repo /etc/yum.repos.d/kubernetes.repo ADD https://rpm.releases.hashicorp.com/fedora/hashicorp.repo /etc/yum.repos.d/hashicorp.repo ADD https://cli.github.com/packages/rpm/gh-cli.repo /etc/yum.repos.d/github-cli.repo ADD https://download.docker.com/linux/fedora/docker-ce.repo /etc/yum.repos.d/docker-ce.repo @@ -60,10 +56,9 @@ RUN dnf install --assumeyes \ virt-install \ xxhash-devel -ADD install-rpms.bash /tmp/install-rpms.bash -RUN bash /tmp/install-rpms.bash && rm -rf /tmp/install-rpms.bash +ADD github-install.bash /tmp/github-install.bash +RUN bash /tmp/github-install.bash && rm -rf /tmp/github-install.bash -ADD install-bins.bash /tmp/install-bins.bash -RUN bash /tmp/install-bins.bash && rm -rf /tmp/install-bins.bash +ADD profile.d/*.sh /etc/profile.d/ RUN ln -s /usr/bin/podman-remote /usr/bin/podman diff --git a/container/github-install.bash b/container/github-install.bash new file mode 100755 index 0000000..bb0ae5d --- /dev/null +++ b/container/github-install.bash @@ -0,0 +1,75 @@ +#!/usr/bin/env bash + +set -e + +function get_latest() { + local repo="${1}" + echo $(curl -sSL "https://api.github.com/repos/${repo}/releases/latest" | jq -r '.tag_name') +} + +function do_install() { + local name + name="${1}" + + local url + url="${2}" + + local working + working=$(mktemp -d) + + local current + current=$(pwd) + + echo "Downloading ${name} from ${url}" + + if [[ "${url}" == *.tar.gz ]]; then + curl --fail-with-body -sSLo "${working}/${name}.tar.gz" "${url}" + cd "${working}" + tar -xf "${name}.tar.gz" + elif [[ "${url}" == *.zip ]]; then + curl --fail-with-body -sSLo "${working}/${name}.zip" "${url}" + cd "${working}" + unzip "${name}.zip" + elif [[ "${url}" == *.rpm ]]; then + curl --fail-with-body -sSLo "${working}/${name}.rpm" "${url}" + else + curl --fail-with-body -sSLo "${working}/${name}" "${url}" + fi + + if [[ "${url}" == *.rpm ]]; then + dnf install --assumeyes "${working}/${name}.rpm" + else + mv "${working}/${name}" "/usr/local/bin/${name}" + chmod +x "/usr/local/bin/${name}" + fi + + cd "${current}" + rm -rf "${working}" +} + +doctl=$(get_latest digitalocean/doctl) +do_install "doctl" "https://github.com/digitalocean/doctl/releases/download/${doctl}/doctl-${doctl:1}-linux-amd64.tar.gz" + +tflint=$(get_latest terraform-linters/tflint) +do_install "tflint" "https://github.com/terraform-linters/tflint/releases/download/${tflint}/tflint_linux_amd64.zip" + +butane=$(get_latest coreos/butane) +do_install "butane" "https://github.com/coreos/butane/releases/download/${butane}/butane-x86_64-unknown-linux-gnu" + +act=$(get_latest nektos/act) +do_install "act" "https://github.com/nektos/act/releases/download/${act}/act_Linux_x86_64.tar.gz" + +hadolint=$(get_latest hadolint/hadolint) +do_install "hadolint" "https://github.com/hadolint/hadolint/releases/download/${hadolint}/hadolint-Linux-x86_64" + +tenv=$(get_latest tofuutils/tenv) +do_install "tenv" "https://github.com/tofuutils/tenv/releases/download/${tenv}/tenv_${tenv}_amd64.rpm" + +sops=$(get_latest getsops/sops) +do_install "sops" "https://github.com/getsops/sops/releases/download/${sops}/sops-${sops:1}-1.x86_64.rpm" + +cosign=$(get_latest sigstore/cosign) +do_install cosign "https://github.com/sigstore/cosign/releases/download/${cosign}/cosign-${cosign:1}-1.x86_64.rpm" + +codium=$(get_latest VSCodium/vscodium) +do_install codium "https://github.com/VSCodium/vscodium/releases/download/${codium}/codium-${codium}-el8.x86_64.rpm" \ No newline at end of file diff --git a/container/profile.d/99-aliases.sh b/container/profile.d/99-aliases.sh new file mode 100644 index 0000000..cc51fbc --- /dev/null +++ b/container/profile.d/99-aliases.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +alias dnf='echo "WARNING: Package installs should require a toolbox rebuild, use dnf-local to override"' +alias dnf-local='command dnf' + +alias prun="poetry run" +alias psync="poetry install --sync" +alias code='codium' +alias ssh='ssh -F ~/.ssh/config' + +alias bk='cd -' +alias fuck='sudo $(history -p \!\!)' +alias cls='clear' \ No newline at end of file diff --git a/load-user-bashrc.sh b/container/profile.d/99-load-user-bashrc.sh similarity index 84% rename from load-user-bashrc.sh rename to container/profile.d/99-load-user-bashrc.sh index 2a1727d..c5dc993 100644 --- a/load-user-bashrc.sh +++ b/container/profile.d/99-load-user-bashrc.sh @@ -15,6 +15,3 @@ fi if [ -f "${HOME}"/.bashrc ]; then source "${HOME}/.bashrc"; fi - -alias dnf='echo "WARNING: Package installs should require a toolbox rebuild, use dnf-local to override"' -alias dnf-local='command dnf' diff --git a/container/static-repos/README.md b/container/static-repos/README.md new file mode 100644 index 0000000..d83be4f --- /dev/null +++ b/container/static-repos/README.md @@ -0,0 +1,2 @@ +These repository files have no canonical home online so need to be statically +saved and directly added to the container. diff --git a/google-cloud-sdk.repo b/container/static-repos/google-cloud-sdk.repo similarity index 100% rename from google-cloud-sdk.repo rename to container/static-repos/google-cloud-sdk.repo diff --git a/kubernetes.repo b/container/static-repos/kubernetes.repo similarity index 100% rename from kubernetes.repo rename to container/static-repos/kubernetes.repo diff --git a/inputrc b/inputrc new file mode 100644 index 0000000..900f0de --- /dev/null +++ b/inputrc @@ -0,0 +1 @@ +set completion-ignore-case On \ No newline at end of file diff --git a/install-bins.bash b/install-bins.bash deleted file mode 100755 index b4333f3..0000000 --- a/install-bins.bash +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env bash - -set -e - -latest_doctl=$(curl -sSL https://api.github.com/repos/digitalocean/doctl/releases/latest | jq -r '.tag_name') -latest_tflint=$(curl -sSL https://api.github.com/repos/terraform-linters/tflint/releases/latest | jq -r '.tag_name') -latest_butane=$(curl -sSL https://api.github.com/repos/coreos/butane/releases/latest | jq -r '.tag_name') -latest_act=$(curl -sSL https://api.github.com/repos/nektos/act/releases/latest | jq -r '.tag_name') -latest_hadolint=$(curl -sSL https://api.github.com/repos/hadolint/hadolint/releases/latest | jq -r '.tag_name') - -mkdir -p /tmp/bins - -working=$(mktemp -d) -doctl_url="https://github.com/digitalocean/doctl/releases/download/${latest_doctl}/doctl-${latest_doctl:1}-linux-amd64.tar.gz" -echo "Downloading doctl-${latest_doctl}: ${doctl_url}" -curl --fail-with-body -sSLo "${working}/doctl.tar.gz" "${doctl_url}" -cd "${working}" -tar -xf doctl.tar.gz -mv "${working}/doctl" /tmp/bins/doctl -chmod +x /tmp/bins/doctl -cd ~ -rm -rf "${working}" - -working=$(mktemp -d) -tflint_url="https://github.com/terraform-linters/tflint/releases/download/${latest_tflint}/tflint_linux_amd64.zip" -echo "Downloading tflint-${latest_tflint}: ${tflint_url}" -curl --fail-with-body -sSLo "${working}/tflint.zip" "${tflint_url}" -cd "${working}" -unzip tflint.zip -mv tflint /tmp/bins/tflint -chmod +x /tmp/bins/tflint -cd ~ -rm -rf "${working}" - -butane_url="https://github.com/coreos/butane/releases/download/${latest_butane}/butane-x86_64-unknown-linux-gnu" -echo "Downloading butane-${latest_butane}: ${butane_url}" -curl --fail-with-body -sSLo "/tmp/bins/butane" "${butane_url}" -chmod +x /tmp/bins/butane - -working=$(mktemp -d) -act_url="https://github.com/nektos/act/releases/download/${latest_act}/act_Linux_x86_64.tar.gz" -echo "Downloading act-${latest_act}: ${act_url}" -curl --fail-with-body -sSLo "${working}/act.tar.gz" "${act_url}" -cd "${working}" -tar -xf act.tar.gz -mv "${working}/act" /tmp/bins/act -chmod +x /tmp/bins/act -cd ~ -rm -rf "${working}" - -hadolint_url="https://github.com/hadolint/hadolint/releases/download/${latest_hadolint}/hadolint-Linux-x86_64" -echo "Downloading hadolint-${latest_hadolint}: ${hadolint_url}" -curl --fail-with-body -sSLo "/tmp/bins/hadolint" "${hadolint_url}" -chmod +x /tmp/bins/hadolint - -mv /tmp/bins/* /usr/local/bin/ diff --git a/install-rpms.bash b/install-rpms.bash deleted file mode 100755 index 3728298..0000000 --- a/install-rpms.bash +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash - -set -e - -latest_tenv=$(curl -sSL https://api.github.com/repos/tofuutils/tenv/releases/latest | jq -r '.tag_name') -latest_sops=$(curl -sSL https://api.github.com/repos/getsops/sops/releases/latest | jq -r '.tag_name') -latest_cosign=$(curl -sSL https://api.github.com/repos/sigstore/cosign/releases/latest | jq -r '.tag_name') -latest_codium=$(curl -sSL https://api.github.com/repos/VSCodium/vscodium/releases/latest | jq -r '.tag_name') - -mkdir -p /tmp/rpms - -tenv_url="https://github.com/tofuutils/tenv/releases/download/${latest_tenv}/tenv_${latest_tenv}_amd64.rpm" -echo "Downloading tenv-${latest_tenv}: ${tenv_url}" -curl --fail-with-body -sSLo /tmp/rpms/tenv.rpm "${tenv_url}" - -sops_url="https://github.com/getsops/sops/releases/download/${latest_sops}/sops-${latest_sops:1}-1.x86_64.rpm" -echo "Downloading sops-${latest_sops}: ${sops_url}" -curl --fail-with-body -sSLo /tmp/rpms/sops.rpm "${sops_url}" - -cosign_url="https://github.com/sigstore/cosign/releases/download/${latest_cosign}/cosign-${latest_cosign:1}-1.x86_64.rpm" -echo "Downloading cosign-${latest_cosign}: ${cosign_url}" -curl --fail-with-body -sSLo /tmp/rpms/cosign.rpm "${cosign_url}" - -codium_url="https://github.com/VSCodium/vscodium/releases/download/${latest_codium}/codium-${latest_codium}-el8.x86_64.rpm" -echo "Downloading vscodium-${latest_codium}: ${codium_url}" -curl -sSLo /tmp/rpms/codium.rpm "${codium_url}" - -dnf install --assumeyes /tmp/rpms/*.rpm - -rm -rf /tmp/rpms diff --git a/scripts.d/00-directories.sh b/scripts.d/00-directories.sh new file mode 100644 index 0000000..e001fec --- /dev/null +++ b/scripts.d/00-directories.sh @@ -0,0 +1,3 @@ +export rc="$HOME/.bashrc" +export rcr="$HOME/.config/bashrc.d" +export PROJECTS_PATH="$HOME/Projects" \ No newline at end of file diff --git a/scripts.d/01-aliases.sh b/scripts.d/01-aliases.sh new file mode 100644 index 0000000..9024a79 --- /dev/null +++ b/scripts.d/01-aliases.sh @@ -0,0 +1,17 @@ +alias fuck='sudo $(history -p \!\!)' +alias cls='clear' +alias ls='/usr/bin/ls -lshF --color --group-directories-first --time-style=long-iso' +alias gmtime='/usr/bin/date -u --iso-8601=seconds' +alias date='/usr/bin/date --iso-8601=seconds' +alias whatismyip='curl https://icanhazip.com/' +alias uuid="python3 -c 'import uuid; print(uuid.uuid4());'" +alias epoch="python3 -c 'import time; print(time.time());'" +alias uptime="command uptime --pretty" +alias doc='cd ~/Documents' +alias dn='cd ~/Downloads' +alias pic='cd ~/Pictures' +alias prun="poetry run" +alias psync="poetry install --sync" +alias code='codium' +alias ssh='ssh -F ~/.ssh/config' +alias whereami='echo $LOCATION' \ No newline at end of file diff --git a/scripts.d/02-direnv.sh b/scripts.d/02-direnv.sh new file mode 100644 index 0000000..f49243a --- /dev/null +++ b/scripts.d/02-direnv.sh @@ -0,0 +1,3 @@ +if direnv --version &>/dev/null; then + eval "$(direnv hook bash)"; +fi \ No newline at end of file diff --git a/scripts.d/10-cardstat.sh b/scripts.d/10-cardstat.sh new file mode 100644 index 0000000..ebc6d14 --- /dev/null +++ b/scripts.d/10-cardstat.sh @@ -0,0 +1,12 @@ +cardstat() { + local workdir="${GNUPGHOME:-$HOME/.gnupg}" + + if ! gpg --card-status &>/dev/null; then + systemctl restart pcscd; + fi + touch "${workdir}/unlock.txt"; + gpg --sign "${workdir}/unlock.txt"; + rm -f "${workdir}/unlock.txt.gpg"; + rm -f "${workdir}/unlock.txt"; + gpg --card-status; +} \ No newline at end of file diff --git a/scripts.d/10-powerline.sh b/scripts.d/10-powerline.sh new file mode 100644 index 0000000..b068e6a --- /dev/null +++ b/scripts.d/10-powerline.sh @@ -0,0 +1,6 @@ +if [ -f `which powerline-daemon` ]; then + powerline-daemon -q + POWERLINE_BASH_CONTINUATION=1 + POWERLINE_BASH_SELECT=1 + . /usr/share/powerline/bash/powerline.sh +fi \ No newline at end of file diff --git a/scripts.d/10-random.sh b/scripts.d/10-random.sh new file mode 100644 index 0000000..da07ce8 --- /dev/null +++ b/scripts.d/10-random.sh @@ -0,0 +1,8 @@ +function random() { + if [[ $# -eq 0 ]]; then + num=32 + else + num=$1 + fi + cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w $num | head -n 1 +} \ No newline at end of file diff --git a/scripts.d/10-up.sh b/scripts.d/10-up.sh new file mode 100644 index 0000000..4d4678b --- /dev/null +++ b/scripts.d/10-up.sh @@ -0,0 +1 @@ +function up() { cd $(eval printf '../'%.0s {1..$1}); } \ No newline at end of file diff --git a/scripts.d/50-dev.sh b/scripts.d/50-dev.sh new file mode 100644 index 0000000..77fdca9 --- /dev/null +++ b/scripts.d/50-dev.sh @@ -0,0 +1,54 @@ +DEVENV_IMAGE='localhost/toolbox-dev-env:latest' + +function dev() { + if [ ${#} -lt 1 ]; then + echo "WARNING: Missing project name"; + project="" + else + project="${2}" + fi + + if [ -f '/run/.toolboxenv' ]; then + cd "${PROJECTS_DIR}/${project}"; + + if [ -f "${PWD}/ansible.cfg" ]; then + export ANSIBLE_CONFIG="${PWD}/ansible.cfg"; + export ANSIBLE_COLLECTIONS_PATH="${PWD}/.ansible" + fi + + if [ -f "${PWD}/pyproject.toml" ]; then + poetry_venv=$(poetry env info --path) + + if [ ! -z "${poetry_venv}" ]; then + source "${poetry_venv}/bin/activate"; + fi + fi + else + if [ ! -d "${PROJECTS_PATH}/${project}" ]; then + echo "ERROR: Project path ${PROJECTS_PATH}/${project} does not exist"; + return 1 + fi + + local slug=$(random 8) + local container_name="toolbox-${project:-generic}-${slug}" + + toolbox create --image="${DEVENV_IMAGE}" "${container_name}" &>/dev/null || return 1 + + local current=$(pwd) + cd "${PROJECTS_PATH}/${project}" + echo ">>> Loading project: ${project}" + echo ">>> ${PWD}" + toolbox enter "${container_name}" + echo ">>> Exited: ${namespace}" + cd ${current} + + podman container stop "${container_name}" &>/dev/null + podman container rm --force "${container_name}" &>/dev/null + fi +} + +if [ -f '/run/.toolboxenv' ]; then + if [ "${PWD}" == "$PROJECTS_PATH/*" ]; then + dev $(basename "${PWD}") + fi +fi \ No newline at end of file