This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
An interactive Bash installer for WSL2 + Ubuntu developer environments. Users run install.sh and pick tools from an interactive menu powered by gum.
sudo -v && ./install.sh
# Override language:
./install.sh --lang es
./install.sh --lang enThere is no build or test step — the scripts run directly in a WSL2 Ubuntu environment.
Entry point: install.sh
- Bootstraps
gumif missing - Loads language strings from
lang/<code>.sh(auto-detected from$LANG, overridden with--lang) - Defines the
TOOLSarray ("id|Name|Description"format) — this controls the menu and install order - Runs each selected tool's
scripts/<id>.shviagum spin(output captured to/tmp/devcobos_install_<id>.log) - Collects user inputs (e.g. Git name/email, Node version) before spawning each install script via
collect_inputs_<id>()functions — these run in the main shell to keep TTY access - Passes collected inputs to scripts as exported env vars (e.g.
GIT_NAME,GIT_EMAIL,NODE_VERSION,NODE_PKG_MANAGER,DOCKER_EXPOSE_TCP) APT_UPDATED=1is exported after the initialapt-get updateso scripts can skip redundant updates
Install scripts: scripts/<id>.sh
- Each script is self-contained and idempotent (checks if tool is already installed before acting)
- Scripts read env vars set by
collect_inputs_*in the main shell - Output is captured to a log file; version strings must match the
extract_version()regex patterns ininstall.shto appear in the summary table
Language files: lang/<code>.sh
- All user-visible strings are
readonlyvariables with theMSG_prefix - Sourced with
set -aso all variables are automatically exported to subshells
Windows Terminal setup: windows-terminal/
- Separate phase, run from PowerShell before the WSL installer
install-themes.ps1patchessettings.json;install-starship.ps1installs Starship for PowerShell
- Create
scripts/<id>.sh(use existing scripts as reference — checkAPT_UPDATED, output version string) - If the tool needs user input: add
collect_inputs_<id>()ininstall.shbeforecollect_inputs() - Register in the
TOOLSarray insideinit_tools()ininstall.sh - Add a
caseentry inextract_version()ininstall.shmatching the version string your script outputs - Add all
MSG_string keys to bothlang/en.shandlang/es.sh
- Scripts use
set -euo pipefail— any unhandled error aborts the script and marks the tool as failed - The
append_if_missingpattern inzsh.sh(check for a marker string, then append a block) is the standard way to make.zshrcmodifications idempotent - Theme colors (
C_PINK,C_LILAC, etc.) ininstall.shmatch the SynthWave palette inconfig/starship.toml - Install order is determined by the
TOOLSarray ininit_tools(), not by user selection order