73 lines
1.9 KiB
Bash
Executable File
73 lines
1.9 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
# Config
|
|
readonly DEFAULT_VARIANT='core'
|
|
readonly LOOPBACK_ARGS=(
|
|
--network slirp4netns:allow_host_loopback=true
|
|
--add-host host:10.0.2.2
|
|
)
|
|
|
|
# Help text
|
|
readonly HELP="code [--publish <port-spec>] [--loopback]
|
|
[--<variant>] [--variants] [--help] [vim-params...]
|
|
|
|
--publish Publish port(s) from container
|
|
--loopback Allow host loopback
|
|
--<variant> Use editor variant <variant> (default: ${DEFAULT_VARIANT})
|
|
--variants Print list of available editor variants and exit
|
|
--help Show this help and exit"
|
|
|
|
# Get script directory
|
|
readonly DIR="$(dirname "$(readlink -f -- "$0")")"
|
|
|
|
# Parse arguments
|
|
ports=()
|
|
loopback=false
|
|
variant="$DEFAULT_VARIANT"
|
|
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--publish ) shift; ports+=("$1");;
|
|
--loopback ) loopback=true;;
|
|
--variants )
|
|
for f in "$DIR"/*; do
|
|
[[ "$f" == */template || ! -d "$f" ]] || echo "${f##*/}";
|
|
done
|
|
exit;;
|
|
-h | --help ) echo >&2 "$HELP"; exit;;
|
|
--* )
|
|
if [[ ! -d "${DIR}/${arg#--}" ]]; then break; fi
|
|
variant="${arg#--}";;
|
|
* ) break;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
# Collect additional arguments
|
|
args=()
|
|
readonly NAME="$(basename "$(pwd)")"
|
|
if [[ -f "${DIR}/${variant}/podman.args" ]]; then
|
|
mapfile -t custom < "${DIR}/${variant}/podman.args"
|
|
for arg in "${custom[@]}"; do
|
|
arg="${arg//'{NAME}'/"$NAME"}"
|
|
arg="${arg//'{DIR}'/"$DIR"}"
|
|
arg="${arg//'{HOME}'/"$HOME"}"
|
|
args+=("$arg")
|
|
done
|
|
fi
|
|
for port in "${ports[@]}"; do
|
|
[[ ! "$port" =~ ^[0-9]+$ ]] || port="${port}:${port}"
|
|
args+=(--publish "$port")
|
|
done
|
|
if $loopback; then args+=("${LOOPBACK_ARGS[@]}"); fi
|
|
|
|
# Start editor
|
|
exec podman run --rm -it \
|
|
--tz local \
|
|
--detach-keys ctrl-q,ctrl-q \
|
|
--volume ".:/work/$NAME" \
|
|
--workdir "/work/$NAME" \
|
|
--userns keep-id --user "$(id -u):$(id -g)" \
|
|
"${args[@]}" "code-${variant}" "$@"
|