Personal dotfiles for macOS and Linux. Managed with GNU Stow.
bash <(curl -fsSL https://raw.githubusercontent.com/itsjonny96/dotfiles/main/bootstrap.sh)Installs Homebrew (macOS) or the native package manager (Linux), symlinks all configs via Stow, and sets zsh as the default shell. Then reload:
exec zshdotfiles/
├── bootstrap.sh # cross-platform setup script
├── homebrew/
│ └── Brewfile # core packages (macOS)
├── zsh/
│ ├── .zshrc # main shell config (starship, fzf, completions)
│ ├── .zshenv # env vars loaded before .zshrc
│ └── aliases.zsh # shell aliases
├── nvim/ # neovim config (lazy.nvim)
├── tmux/ # tmux config (tpm)
├── starship/ # starship prompt config
└── taskwarrior/ # taskwarrior config and catppuccin theme
Two files are gitignored for machine-specific config:
| File | Purpose |
|---|---|
~/dotfiles/zsh/local.zsh |
Machine-specific aliases, PATH additions, project shortcuts |
~/.zshrc.local |
Anything that can't live in the dotfiles dir (e.g. work toolchain paths) |
Both are sourced automatically if they exist.
The Obsidian plugin reads vault paths from environment variables. Set these in ~/dotfiles/zsh/local.zsh or ~/.zshrc.local:
export OBSIDIAN_VAULT="$HOME/Documents/Obsidian"
export OBSIDIAN_TEMPLATES="Templates"
export OBSIDIAN_WEEKLY_DIR="$HOME/Documents/Obsidian/Weekly/$(date +%Y)"
export OBSIDIAN_WEEKLY_TEMPLATE="$HOME/Documents/Obsidian/Templates/Weekly Note.md"Sync config is machine-specific and never tracked. Create ~/.task/sync.taskrc locally and uncomment the include in taskwarrior/.taskrc.
Stow conflict on bootstrap — a file already exists at the symlink target. Back it up then re-run:
stow -v --restow <package>Wrong default shell after bootstrap:
chsh -s $(which zsh)