diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index f61fb95..299ded3 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -10,15 +10,19 @@ Because scripts are sourced (not executed in a subshell) they run in the current ## Project structure and conventions -- `bootstrap` (top-level): dispatches to a distro directory after reading `/etc/os-release`. +- `bootstrap` (top-level): dispatches to a distro directory after reading `/etc/os-release`. Supports Ubuntu, Pop!_OS, Fedora, and Arch. - `*/bootstrap` (per-distro): orchestrates other scripts in that distro folder and the shared `generic/` helpers. -- `generic/`: small reusable steps (create-ssh-key, install-jetbrains-tools, install-zsh-customizations, lazyvim, etc.). Treat these as library modules that are `source`d by distro bootstrappers. +- `generic/`: small reusable steps (create-ssh-key, install-jetbrains-tools, install-zsh-customizations, github-auth-login/logout, add-user-to-groups, create-directories, homebrew). Treat these as library modules that are `source`d by distro bootstrappers. - `*/*install-*-packages` files: contain package lists and package-manager-specific commands (apt, dnf, pacman, yay). Be careful when modifying package sets — keep package-manager flags and ordering intact. +- `test/`: contains Docker and QEMU testing infrastructure for validation (primarily for Ubuntu). +- `scripts/`: helper scripts like `check.sh` for local syntax and shellcheck validation. +- `Makefile`: provides convenient targets for testing, linting, and building test images. Examples to reference when changing behavior: - Distribution detection: `bootstrap` (reads `/etc/os-release` and branches on `ID`). - Arch essentials: `arch/install-essential-packages` (enables multilib, calls `pacman`, handles AUR with `yay`). - Ubuntu interactive flow: `ubuntu/bootstrap` (prompts with `read -p` and conditionally runs dev/desktop/media installs). +- Fedora/Pop!_OS flow: similar interactive prompts for optional component installation. ## Interaction & side-effects to watch for @@ -31,26 +35,92 @@ Examples to reference when changing behavior: - Preserve the `source <(curl -fsSL ...)` style where callers expect that pattern. If you introduce an alternate execution method, add a usage comment and keep backward compatibility. - When modifying package lists, keep package-manager specific flags (e.g., `--needed` for `pacman`, `-y`/`-qq` for `apt`) and preserve any pre-update steps (e.g., `apt-get update`). - Reuse `generic/` helpers rather than duplicating logic across distros. +- The `lazyvim` generic helper has been removed — LazyVim setup was previously auto-installed but is no longer part of the bootstrap process. ## Testing and validation (how to be productive quickly) -- Quick lint: run `bash -n