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.
Before you start
gitinstalled 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.
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/Gerrrt/dotfiles-MacBook ~/dotfiles-MacBook $ cd ~/dotfiles-MacBook -
Preview the plan (optional)
A dry run prints every symlink it would create and changes nothing.
$ ./bootstrap.sh --links-only --dry-run -
Provision + wire
Homebrew, brew bundle, then symlinks. Idempotent — re-run any time.
$ ./bootstrap.sh $ exec zsh -
Optional 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/Gerrrt/dotfiles-Windows/main/bootstrap.ps1 | iex -
Or install manually
Clone, then run the installer. -DryRun previews everything; -SkipPackages only re-wires links.
PS> git clone https://github.com/Gerrrt/dotfiles-Windows.git PS> cd dotfiles-Windows PS> .\install.ps1 -
Finish 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/Gerrrt/dotfiles-Kali ~/dotfiles-Kali $ cd ~/dotfiles-Kali -
Provision + wire
Full run installs apt base + offensive tools + symlinks. Add --no-offensive to skip the heavy tools.
$ ./bootstrap.sh -
Apply 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/Gerrrt/dotfiles-Fedora ~/dotfiles-Fedora $ cd ~/dotfiles-Fedora -
Preview 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-only -
Provision + wire
Installs the distro package layer, then symlinks. Idempotent — re-run any time. exec zsh to land in the new shell.
$ ./bootstrap.sh $ exec zsh -
Per-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.
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/Gerrrt/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.