Files
spyder-desktop-docker/start-spyder.sh
2025-10-13 20:27:10 +02:00

61 lines
1.9 KiB
Bash

#!/bin/bash
set -euo pipefail
DEFAULT_ARGS=("spyder" "--new-instance")
TARGET_UID=${UID:-1000}
TARGET_GID=${GID:-1000}
TARGET_USER=${HOST_USER:-spyder}
TARGET_GROUP=${HOST_GROUP:-$TARGET_USER}
TARGET_HOME=${SPYDER_HOME:-/home/${TARGET_USER}}
TARGET_WORKSPACE=${SPYDER_WORKSPACE:-${TARGET_HOME}/workspace}
if [ "$#" -eq 0 ]; then
set -- "${DEFAULT_ARGS[@]}"
fi
existing_group=$(getent group "${TARGET_GID}" || true)
if [ -z "${existing_group}" ]; then
# Reconcile group entry so host files stay accessible.
if getent group "${TARGET_GROUP}" >/dev/null 2>&1; then
groupmod --gid "${TARGET_GID}" "${TARGET_GROUP}"
else
groupadd --gid "${TARGET_GID}" "${TARGET_GROUP}"
fi
else
TARGET_GROUP=$(printf '%s' "${existing_group}" | cut -d: -f1)
fi
existing_user=$(getent passwd "${TARGET_UID}" || true)
if [ -z "${existing_user}" ]; then
# Mirror host UID/GID inside the container.
if id "${TARGET_USER}" >/dev/null 2>&1; then
usermod --uid "${TARGET_UID}" --gid "${TARGET_GID}" --home "${TARGET_HOME}" --shell /bin/bash "${TARGET_USER}"
else
useradd --uid "${TARGET_UID}" --gid "${TARGET_GID}" --home-dir "${TARGET_HOME}" --shell /bin/bash "${TARGET_USER}"
fi
else
TARGET_USER=$(printf '%s' "${existing_user}" | cut -d: -f1)
TARGET_HOME=$(printf '%s' "${existing_user}" | cut -d: -f6)
fi
install -d -m 0755 "${TARGET_HOME}" "${TARGET_WORKSPACE}"
# Ensure mounts are owned by the runtime user.
chown "${TARGET_UID}:${TARGET_GID}" "${TARGET_HOME}" "${TARGET_WORKSPACE}"
for lock in \
"${TARGET_HOME}/.config/spyder/spyder.lock" \
"${TARGET_HOME}/.local/share/spyder/spyder.lock" \
"${TARGET_HOME}/.spyder-py3/spyder.lock"
do
# Remove stale Spyder locks that can survive bind mounts.
rm -f "$lock"
done
export HOME="${TARGET_HOME}"
export USER="${TARGET_USER}"
export QTWEBENGINE_DISABLE_SANDBOX="${QTWEBENGINE_DISABLE_SANDBOX:-1}"
cd "${TARGET_WORKSPACE}"
exec gosu "${TARGET_UID}:${TARGET_GID}" micromamba run -n base "$@"