This repository uses GNU Stow to deploy the common package and, when
available, a platform package (macos, linux, or wsl). It deliberately
deploys a broad configuration tree, while package-local .stow-local-ignore
files exclude credentials, generated files, and mutable runtime state.
Clone with the pinned Neovim and TPM submodules, then run bootstrap. The
bootstrap script detects the host by default; --platform macos|linux|wsl
overrides detection.
git clone --recurse-submodules git@github.com:johnseth97/.dotfiles.git ~/.dotfiles
~/.dotfiles/common/.bin/bootstrapOn macOS, bootstrap uses Homebrew (installing it after Command Line Tools if
needed) and applies macos/Brewfile. On Linux and WSL it
uses Homebrew when present, otherwise apt, dnf, or pacman to install the core
shell/deployment dependencies. Use --dry-run to show the Stow deployment,
--skip-packages when dependencies are already installed, or
--skip-tmux-plugins to defer TPM's initial plugin installation.
Run bootstrap-git-signing separately after installing 1Password if you want
Git SSH signing configured through its agent.
Stow and Git solve different problems:
.gitignorecontrols what is committed..stow-local-ignorecontrols what is deployed to$HOME.- Application-owned caches, secrets, and plugin checkouts stay local even if an application writes them below a configuration directory.
Do not invoke stow .. Use the wrapper so platform selection and ignore
policy stay consistent:
~/.dotfiles/common/.bin/dotfiles-stow --dry-run
~/.dotfiles/common/.bin/dotfiles-stow --restowNeovim is an independently versioned project and remains a pinned submodule. Bootstrap and sync check out the revision pinned by this repository; they do not pull its branch. TPM is likewise a pinned submodule, while its installed plugins are mutable local state managed by TPM.
sync-dotfiles updates only the dotfiles repository and its pinned
submodules, then restows the selected packages. It refuses a dirty worktree
or dirty submodule rather than overwriting local work.
sync-dotfilesPackage updates remain the responsibility of the platform package manager
(Homebrew and brew-watchtower on macOS). Antidote is loaded from a packaged
installation when one is available; a legacy ~/.antidote clone is only a
fallback for hosts without one.