Installation — how to actually run it
The single curl one-liner, the manual git-clone path, dry-run preview, --only and --skip flag selection, and what to expect in the first few seconds.
This page is about running the installer. For the inventory of what gets installed, see Installing. For the questions you’ll be asked the first time, see Asking important questions.
The one command
curl -fsSL https://dotfiles.rafay99.com/install.sh | bash That’s it. The URL serves a small bootstrap script that clones the repo to ~/dotfiles then hands off to the real installer at ~/dotfiles/install.sh.
What happens, in order
When you run the one-liner (or ./install.sh from a manual clone), the installer goes through these phases in order:
- Prereqs check — confirms macOS, prompts to install Xcode Command Line Tools if missing.
- First-run config wizard — asks ~7 questions (code directory, git identity, NAS yes/no, Time Machine, auto-sort Downloads, archive-project) and writes your answers to
~/.config/dotfiles/local.env. Re-runs ofinstall.shskip this step — see Asking important questions. - Interactive module picker — choose which install modules to run (Homebrew, window manager, symlinks, LaunchAgents, macOS tweaks, …). Default selection is “symlinks only” on first run.
- Each selected module runs — modules whose feature you said “no” to in the wizard skip themselves silently.
- Summary — what was installed, what was already up to date, what (if anything) errored.
Flags worth knowing
| Flag | What it does |
|---|---|
--dry-run | Preview every action without making any changes. Symlinks aren’t created, Homebrew isn’t
invoked, no |
--yes / -y | Run all modules, auto-confirm every sub-prompt. Skips the picker. |
--only=symlinks,macos | Run only these modules (skips the picker). Mutually exclusive with --skip. |
--skip=wm,homebrew | Run everything except these. |
--reconfigure | Re-run the wizard, re-asking every question. Use this to change your NAS, fix a typo, flip a feature on/off. |
--modules | Print the module list and exit. |
--man | Open the full manpage. |
--help | Short usage summary. |
How the installation script links into the rest
- It calls into the wizard —
install.d/05-configure.sh— which is documented under Asking important questions. - The wizard’s answers land in Your local.env, which every other script (sort-downloads, archive-project, the install modules themselves) reads at runtime.
- The picker source-of-truth is
install.d/01-menu.sh— a pure-bash arrow-key picker, nowhiptail/dialogdependency. - Each module is
install.d/NN-name.shexposing one functionmodule_<name>(). The orchestrator (install.shat the repo root) sources them in dependency order.
Where to go next
- Quick install — just the command, nothing else.
- Manual install —
git clone+./install.shif you’d rather see the repo before running anything. - Multi-machine portability — no
/Users/<name>/baked anywhere, works on any Mac with any username. - Asking important questions — what the wizard will ask you the first time.