Files
code/code
2023-06-01 00:54:51 +02:00

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}" "$@"