A small Apple Silicon macOS setup with:
- one small bootstrap command
- one package install command
- modern Zsh, Vim, Ghostty, and Git defaults
- an opt-in macOS defaults script
- a small Linux profile for owned SSH hosts
Install packages:
./install-packagesLink the dotfiles:
./bootstrapApply macOS defaults:
./macos-defaults.shOwned Linux hosts can use the Linux profile:
./linux/install-packages
./linux/bootstrapThe Linux package installer targets Debian, Ubuntu, and other apt-based hosts. It warns about package names missing from the host's apt repositories and installs the packages it can find. When Debian package names expose commands as batcat or fdfind, it creates ~/.local/bin/bat and ~/.local/bin/fd aliases if those commands are otherwise missing. The Linux profile links the shared Vim and Git ignore files, but uses linux/.zshrc and linux/git/config.
linux/bootstrap also sets zsh as the login shell when root or passwordless sudo is available.
~/.config/git/config~/.config/git/ignore~/.zshrc~/.vimrc~/.config/ghostty
If a destination already exists as a real file or directory, bootstrap moves it into ~/.dotfiles-backups/<timestamp>/ before linking.
linux/bootstrap links:
~/.config/git/config~/.config/git/ignore~/.zshrc~/.vimrc
Linux uses linux/git/config, which keeps shared Git defaults but leaves workstation-specific signing and delta configuration out of the base server profile.
The Linux zsh config assumes Debian/Ubuntu package paths for fzf and zsh plugins under /usr/share.
Brewfile includes the core tooling this setup expects:
bat,eza,fd,fzf,mise,ripgrep,zoxidegit,gh,gnupggit-deltashellcheckzsh-autosuggestions,zsh-syntax-highlightingghosttyfont-jetbrains-mono-nerd-font
Check shell config and scripts with:
zsh -n .zshrc
zsh -n linux/.zshrc
bash -n bootstrap linux/bootstrap install-packages linux/install-packages macos-defaults.sh
shellcheck bootstrap linux/bootstrap install-packages linux/install-packages macos-defaults.shOn macOS, Git diff, show, and patch logs are rendered through delta. Use z <directory hint> to jump to frequent directories, and bat <file> when you want a nicer file read than cat.
Work-laptop Dart and Flutter paths stay supported in .zshrc, but only when ~/.pub-cache/bin or ~/Development/flutter/bin exist.
mise is installed and activated on macOS for project-local tool versions. This repo does not pin global language runtimes; individual projects can use mise.toml or .tool-versions. Local-only mise overrides such as mise.local.toml and .mise.local.toml are ignored globally.
If Docker is installed, install-packages generates zsh completions into ~/.local/share/zsh/site-functions.
The macOS Git config signs commits by default. Keep machine-specific signing keys out of the repo by setting them in ~/.config/git/config.local:
cp git/config.local.example ~/.config/git/config.local
git config --file ~/.config/git/config.local user.signingkey <your-gpg-key-fingerprint>Both zsh profiles set GPG_TTY for terminal-based GPG passphrase prompts. The Linux Git config keeps signing opt-in through config.local so server profiles can stay lightweight.