This is a collection of dotfiles and scripts I use for customizing my dev-setup. It contains all my configuration files. See https://dotfiles.github.io/ for more details.
OS related setup scripts can be found in setup folder.
- Sane defaults for macOS
- Zsh with Powerlevel10k, autosuggestions, and syntax highlighting
- Fast shell startup and a curated CLI toolset (mise, yazi, zoxide, fzf)
- Editor and terminal configs: Zed, Ghostty, VS Code
- Git config and aliases
- vim
cd ~
git clone --recursive https://github.com/CuriousLearner/dotfiles.git
cd ~/dotfilesbash setup/setup_mac.shbash setup/osx_defaults.shThis uses GNU stow to symlink every dotfile package (shell, zsh, git, editors, terminal, etc.) from your home directory into this repo, keeping everything maintainable in git:
bash install.shEach top-level directory is a stow "package" whose contents mirror where they land under $HOME (e.g. zsh/.zshrc → ~/.zshrc, ghostty/.config/ghostty/config → ~/.config/ghostty/config).
pip3 install -r setup/requirements.pipZed, Ghostty, and yazi configs are already symlinked by install.sh (step 4). VS Code is separate because it also installs extensions and lives in a non-standard path:
cd ~/dotfiles/setup/vscode && bash setup-vs-code.sh # VS Code settings + extensionsZed is the primary editor; VS Code stays configured for the projects that need it.
Tip: Use the alias eve to regenerate the VS Code extensions list in ~/dotfiles/setup/vscode/install-extensions.sh
Clone the shared common config plus whichever private overlay repos this machine is entitled to, into this dotfiles dir, then run setup:
git clone <claude-config-common repo> claude-config-common # shared, non-sensitive core
git clone <a claude-config-* overlay> claude-config-personal # per-context private overlay
bash setup/claude-config.shSetup assembles ~/.claude from claude-config-common plus every claude-config-*
overlay cloned next to it (auto-discovered, no list to edit): it symlinks skills,
CLAUDE.md, settings.json, and mcp.json, and merges each overlay's plugins and
settings. A machine activates exactly the overlays it cloned, so a locked-down machine
that clones only common never sees an overlay's material. Not tracked here and not a
submodule, so this public repo never references a private URL; the script skips quietly
if claude-config-common/ isn't cloned.
On a machine that is already set up, pull the latest and re-stow:
cd ~/dotfiles && git pull && bash install.shstow is idempotent, so re-running install.sh just refreshes the symlinks.
If a machine was set up before the move to GNU stow (when dotfiles were symlinked straight from the repo root), those old symlinks now point at files that have moved into package directories, so they are broken. Clean up the stale links once, then stow:
cd ~/dotfiles && git pull
# Remove the now-broken symlinks the old bootstrap created (broken links that
# still point into this repo), then let stow recreate them in the new layout.
for l in ~/.[!.]* ~/.config/*/*; do
[ -L "$l" ] && [ ! -e "$l" ] && readlink "$l" | grep -q /dotfiles/ && rm "$l"
done
brew install stow # if not already installed
bash install.shAfter this one-time cleanup, future updates are just the git pull && bash install.sh above.
I actively watch the following repositories and add the best changes to this repository:
This is what I want. It might not be what you want. Don't worry, you have options:
If you have differences in your preferred setup, I encourage you to fork this to create your own version. Once you have your fork working, let me know and I'll add it to a 'Similar dotfiles' list here. It's up to you whether or not to rename your fork.
I also accept pull requests on this, if they're small, atomic, and if they make my own project development experience better.
The code is available under the MIT license.