#!/bin/sh id="$(echo "$@" | grep -Eo ' [a-zA-Z0-9]{64} ' | tr -d ' ')" PODMAN_COMMAND="$(command -v podman 2> /dev/null)" DISTROBOX_COMMAND="$(command -v distrobox 2> /dev/null)" # if we're in a flatpak, use podman-remote # else we fallback to host-spawn if [ -n "$FLATPAK_ID" ]; then if command -v podman-remote > /dev/null 2>&1; then PODMAN_COMMAND="podman-remote" else PODMAN_COMMAND="flatpak-spawn --host podman" fi DISTROBOX_COMMAND="flatpak-spawn --host distrobox" fi # This little workaround is used to ensure # we use our distrobox to properly enter the container if echo "$@" | grep -q 'exec'; then # if exec && distrobox -> use distrobox-enter -- if [ "$($PODMAN_COMMAND inspect --type container --format '{{ index .Config.Labels "manager" }}' "${id}")" = "distrobox" ]; then # Ensure that our distrobox containers will use different vscode-servers by symlinking to different paths if [ -n "${id}" ]; then $PODMAN_COMMAND exec -u "$USER" "${id}" /bin/sh -c ' if [ ! -L "${HOME}/.vscode-server" ]; then [ -e "${HOME}/.vscode-server" ] && mv "${HOME}/.vscode-server" /var/tmp [ -d /var/tmp/.vscode-server ] && mkdir /var/tmp/.vscode-server ln -sf /var/tmp/.vscode-server "$HOME" elif [ ! -e "${HOME}/.vscode-server" ]; then mkdir /var/tmp/.vscode-server fi' fi # Remove everything from $@ and leave only the execution part, we start # capturing after we meet our ID dbox_args="-e A=B" capture="false" for i; do if [ $capture = "true" ]; then set -- "$@" "$i" elif echo "$i" | grep -q "VSCODE"; then dbox_args="$dbox_args -e $i" elif echo "$i" | grep -q "\-w"; then dbox_args="$dbox_args -w $2" fi if [ "$i" = "${id}" ]; then capture="true" fi shift done $DISTROBOX_COMMAND enter --additional-flags "${dbox_args}" "${id}" -- "$@" exit $? fi fi $PODMAN_COMMAND "$@"