Collection of dotfiles and helper scripts
Clone this repo, and run ./bootstrap.sh. This will copy all the dotfiles (but not helper scripts) into your home directory.
Installer scripts in ./scripts/ are designed to be idempotent and safe to re-run. They skip already-installed components where possible and use unattended install modes for tools like Oh My Zsh.
The ./bootstrap.sh script will sync files from this repo to your home directory. It uses a static list of files (./files.txt) to explicitly know what to copy. If you add new files to this repo that need to be copied to the home directory, ensure they are added to that list.
This list was built using:
find . -type f ! -name '*.sh' ! -name '*.md' ! -path './.git/*' > files.txtIf you've updated your local copies of these files in your home directory, and want to commit them back to this repo, use the following command to copy them over (this is the reverse of what is in ./bootstrap.sh).
bash ./scripts/sync-back.shThis helper script is intentionally stricter than a plain reverse rsync:
- It syncs entries from
files.txtas usual. - For
./.local/bin/, it copies back only files that already exist in this repository. - Any host-only scripts in
~/.local/binare ignored and will not be copied into this repo.
If you have access to another system over SSH (such as a Mac with "Remote Login" enabled), you can copy files and folders from the remote system to your local with the following command. This will recursively bring over any files and folders specified, excluding files which would, within a folder, have been ignored by that folder's .gitignore file.
rsync -avr --no-perms --filter=':- .gitignore' remote-system:~/<PATH>/ ~/<PATH>These dotfiles are primarily used on a Mac, with Homebrew. To install supporting tools and CLIs from brew, a Brewfile is provided.
Note: items in the Brewfile are installed as part of ./scripts/brew.sh.
# Install applications from Homebrew
brew bundle install --file=Brewfile
# Backup a list of installed applications to the Brewfile
# This needs --force to overwrite the current Brewfile
brew bundle dump --no-vscode --file=Brewfile --forceShell scripts in this repository are linted with shellcheck and formatting-checked with shfmt.
Sourced Bash dotfiles such as .aliases, .functions, and .bashrc are validated with shellcheck.
The .zshrc file is validated with zsh -n syntax checks.
To run locally:
bash ./scripts/lint-shell.shPython scripts (detected via #!/usr/bin/env python-style shebangs, including python3) are linted with ruff.
To run locally:
bash ./scripts/lint-python.sh