2026-10-09 08:00:06 -04:00
#!/usr/bin/env bash
# Idempotent Archipelago developer environment bootstrap.
# Check by default; package installation requires --apply.
set -euo pipefail
APPLY = 0
2026-10-09 09:55:32 -04:00
# Codex is part of the standard developer environment. Keep --codex as a
# backwards-compatible no-op for existing setup commands.
CODEX = 1
2026-10-09 08:00:06 -04:00
for arg in " $@ " ; do
case " $arg " in
--apply) APPLY = 1 ;;
--codex) CODEX = 1 ;;
2026-10-09 09:55:32 -04:00
--help| -h) printf 'Usage: archy-developer-setup [--check] [--apply] [--codex]\n\nCodex is installed by default with --apply; authenticate with: codex login\n' ; exit 0 ;;
2026-10-09 08:00:06 -04:00
--check) ;;
*) printf 'archy-developer-setup: unknown option: %s\n' " $arg " >& 2; exit 2 ;;
esac
done
tools =( git tmux jq fzf rg fd nvim podman mise direnv)
missing =()
for tool in " ${ tools [@] } " ; do
if command -v " $tool " >/dev/null 2>& 1; then
printf 'ok\t%s\t%s\n' " $tool " " $( command -v " $tool " ) "
else
missing +=( " $tool " )
printf 'missing\t%s\n' " $tool "
fi
done
if command -v codex >/dev/null 2>& 1; then
printf 'ok\tcodex\t%s\n' " $( command -v codex) "
elif (( CODEX )) ; then
missing +=( codex)
printf 'missing\tcodex\n'
fi
if (( ! APPLY )) ; then
if [ " ${# missing [@] } " -gt 0 ] ; then
printf '\nMissing: %s\n' " ${ missing [*] } "
2026-10-09 09:55:32 -04:00
printf 'Re-run with --apply to install missing packages, including Codex.\n'
2026-10-09 08:00:06 -04:00
exit 1
fi
exit 0
fi
if ! command -v apt-get >/dev/null 2>& 1; then
printf 'No apt-get found; install the missing tools using the node distribution package manager.\n' >& 2
exit 1
fi
2026-10-09 09:55:32 -04:00
packages =( git tmux jq fzf ripgrep fd-find neovim podman direnv nodejs npm)
2026-10-09 08:00:06 -04:00
if [ " ${# missing [@] } " -gt 0 ] ; then
sudo -n apt-get update
sudo -n apt-get install -y " ${ packages [@] } "
fi
if (( CODEX )) && ! command -v codex >/dev/null 2>& 1; then
command -v npm >/dev/null 2>& 1 || { printf 'npm is required for Codex installation.\n' >& 2; exit 1; }
2026-10-09 09:55:32 -04:00
sudo -n npm install --global @openai/codex
2026-10-09 08:00:06 -04:00
fi
if command -v mise >/dev/null 2>& 1; then
mise trust --yes " $PWD " >/dev/null 2>& 1 || true
fi
printf 'developer setup complete; authenticate Codex interactively with: codex login\n'