Install in three commands
Every repo follows the same shape: clone, optionallydry-run to preview the symlink plan, thenbootstrap. 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.
macOS
Apple Silicon or Intel. Homebrew does the heavy lifting; Core is vendored, so a clone is ready to go.
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-MacBookPreview the plan (optional)
A dry run prints every symlink it would create and changes nothing.
$ ./bootstrap.sh --links-only --dry-runProvision + wire
Homebrew, brew bundle, then symlinks. Idempotent — re-run any time.
$ ./bootstrap.sh $ exec zshOptional system prefs
Apply the opt-in macOS defaults (may require a logout).
$ ./bootstrap.sh --macos-defaults
Windows
PowerShell 7 + Developer Mode (or run elevated) so symlinks work. The host layer only — WSL distros configure themselves.
One-line bootstrap
Clones the repo and runs the installer. Needs git and pwsh 7+.
PS> irm https://raw.githubusercontent.com/dotgibson/dotfiles-Windows/main/bootstrap.ps1 | iexOr install manually
Clone, then run the installer. -DryRun previews everything; -SkipPackages only re-wires links.
PS> git clone https://github.com/dotgibson/dotfiles-Windows.git PS> cd dotfiles-Windows PS> .\install.ps1Finish up
Open a new PowerShell window, set git identity, and apply mirrored WSL networking.
# set name/email in ~/.gitconfig.local, then: PS> wsl --shutdown
Kali (WSL2)
Three layers: Core + apt OS layer + the offensive role layer. Built for Kali on WSL2. Engagement data never lives in the repo.
Clone the repo
$ git clone https://github.com/dotgibson/dotfiles-Kali ~/dotfiles-Kali $ cd ~/dotfiles-KaliProvision + wire
Full run installs apt base + offensive tools + symlinks. Add --no-offensive to skip the heavy tools.
$ ./bootstrap.shApply WSL networking
WSL2 is NAT’d — a listener isn’t reachable from your LAN until you enable mirrored networking on the Windows side.
# drop windows.wslconfig.example at %UserProfile%\.wslconfig, then from Windows: $ wsl.exe --shutdown
Linux distros
Fedora is the template; Arch, openSUSE, Alpine, and Gentoo are stamped from it — same structure every time, only the package manager and a few distro quirks change. Pick the repo for your distro; the flow below is identical across all of them.
Clone your distro’s repo
Swap Fedora for Arch, openSUSE, Alpine, or Gentoo. Core is already vendored under core/, so the clone is self-contained.
$ git clone https://github.com/dotgibson/dotfiles-Fedora ~/dotfiles-Fedora $ cd ~/dotfiles-FedoraPreview the symlink plan (optional)
--links-only re-wires symlinks without touching the package manager; pair it with the bootstrap to see what changes first.
$ ./bootstrap.sh --links-onlyProvision + wire
Installs the distro package layer, then symlinks. Idempotent — re-run any time. exec zsh to land in the new shell.
$ ./bootstrap.sh $ exec zshPer-distro flags
Fedora / openSUSE: --no-flatpak skips Flatpak. Gentoo: --no-sync skips the slow emerge --sync on re-runs. Arch: a manual/minimal box needs the stage-0 prep in SETUP.md first (git, sudo, a UTF-8 locale). Alpine: run as root or with doas; enable the community repo.