Personal bootstrap script for quickly configuring CTF boxes, Kali VMs, and macOS with my preferred shell, vim, tmux, Go, and pentest tooling setup.
curl -fsSL https://raw.githubusercontent.com/intrudir/vm-setup.sh/main/vm-setup.sh | bash -s -- --profile ctfBy default, the script prompts before making changes. On a throwaway box where you want it to run unattended:
curl -fsSL https://raw.githubusercontent.com/intrudir/vm-setup.sh/main/vm-setup.sh | bash -s -- --profile ctf --yesPreview what would happen without changing files:
curl -fsSL https://raw.githubusercontent.com/intrudir/vm-setup.sh/main/vm-setup.sh | bash -s -- --profile full --dry-runIf the target has no internet access, copy a zip of this repo to the box, unzip it, and run the config profile in offline mode:
unzip vm-setup.sh-main.zip
cd vm-setup.sh-main
bash vm-setup.sh --profile configs --offlineFor unattended offline config installation:
bash vm-setup.sh --profile configs --offline --yes--offline never fetches from GitHub. It only uses the dotfiles/ directory next to vm-setup.sh and fails clearly if those files are missing.
configs: install vim, tmux, aliases, functions, and bash/zsh source blocks onlyctf: configs, base packages, Go, and the curated CTF tool setfull: everything inctfplus the larger tool setmac: macOS/Homebrew path for configs, base packages, Go, and the curated tool set
--profile <configs|ctf|full|mac>
--only <configs,base,go,tools>
--yes
--dry-run
--offline
--backup-dir <path>
--source-url <url>
--tools-dir <path>
--force-go
--helpExamples:
# Just configs
./vm-setup.sh --profile configs
# Install only Go
./vm-setup.sh --only go
# Full local install without prompts
./vm-setup.sh --profile full --yes- Existing dotfiles are backed up before replacement.
- Shell startup files are edited through managed blocks, so reruns do not duplicate entries.
- The installer configures bash and zsh, but never switches your shell and never runs
exec zsh. - Unsupported operating systems or package managers fail before install steps run.
git clone https://github.com/intrudir/vm-setup.sh.git
cd vm-setup.sh
./vm-setup.sh --dry-run --profile ctfCompatibility wrappers still exist:
./install-configs.sh
./install-golang.sh
./install-tools.sh -t ctf