Getting started

Install in three commands

Every repo follows the same shape: clone, optionally dry-run to preview the symlink plan, then bootstrap. Core is vendored, so a clone is self-contained — no submodule flags. Pick your platform below.

Not ready to install? Launch the Kali environment in your browser (opens in a new tab) — a Codespace boots straight into the offensive shell, nothing to clone.

Before you start

  • git installed and your identity ready (name + email).
  • macOS: Command Line Tools (the bootstrap installs Homebrew).
  • Windows: PowerShell 7 (pwsh) and Developer Mode (or run elevated) so symlinks work.
  • Kali: running under WSL2; engagement data is kept out of the repo by design.

Version

Pick a release to pin the commands below. Tagged releases are hermetic — Core is vendored, so an older tag installs exactly what it shipped with. main tracks the latest commit.

macOS

Apple Silicon or Intel. Homebrew does the heavy lifting; Core is vendored, so a clone is ready to go.

dotfiles-MacBook ↗
  1. Clone the repo

    The Core layer is already vendored under core/ — no submodule flags.

    $ git clone https://github.com/dotgibson/dotfiles-MacBook ~/dotfiles-MacBook
    $ cd ~/dotfiles-MacBook
  2. Preview the plan (optional)

    A dry run prints every symlink it would create and changes nothing.

    $ ./bootstrap.sh --links-only --dry-run
  3. Provision + wire

    Homebrew, brew bundle, then symlinks. Idempotent — re-run any time.

    $ ./bootstrap.sh
    $ exec zsh
  4. Optional system prefs

    Apply the opt-in macOS defaults (may require a logout).

    $ ./bootstrap.sh --macos-defaults

Keeping Core current

Core is authored in dotfiles-core and vendored into every OS repo. To pull the latest Core into a machine repo and re-wire links:

$ git subtree pull --prefix=core https://github.com/dotgibson/dotfiles-core main --squash
$ ./bootstrap.sh --links-only

Tracking a pinned release instead? Re-clone the new tag (or git fetch --tags && git checkout vX.Y.Z) — the vendored Core moves with it. Maintainers can fan a Core change out to every OS repo at once with scripts/sync-core.sh from dotfiles-core.