Minimal, XDG-first dotfiles with one shell entrypoint, explicit linking, and optional package installs.
git clone https://github.com/YOUR_USER/dotfiles.git ~/.dotfiles
~/.dotfiles/installers/link.shAdd to your shell config:
[ -r "$HOME/.dotfiles/init.sh" ] && . "$HOME/.dotfiles/init.sh"cd ~/.dotfiles
./installWhat ./install does:
- Links configs via
installers/link.sh - Installs OS packages
- Optionally runs
mise installandzimfw build - Runs post-install setup (default: enabled)
.dotfiles/
├── config/ # app configs + shell modules/plugins
├── installers/ # link + OS installers
├── scripts/ # legacy loader (compat)
├── bin/ # user scripts -> ~/.local/bin
└── init.sh # shell entrypoint
.dotfiles
├─ config
│ ├─ alacritty, ghostty, nvim, tmux, mise, zimfw
│ ├─ env
│ ├─ shell/core.sh
│ ├─ loaders/manifest.sh
│ └─ plugins/* (mise, fzf, zoxide, tmux, os/arch)
├─ installers
│ ├─ link.sh
│ ├─ install-arch.sh
│ ├─ install-macos.sh
│ └─ install-windows.ps1
├─ bin
└─ init.sh
Shell init:
~/.zshrc
└─ source ~/.dotfiles/init.sh
├─ config/env
├─ config/shell/core.sh
├─ config/loaders/manifest.sh
│ └─ config/plugins/*
├─ zimfw init (zsh)
└─ config/aliases
Linking:
installers/link.sh
├─ ensure ~/.config + ~/.local/bin
├─ link app configs -> ~/.config/<app>
└─ link bin/* -> ~/.local/bin/*
Install:
./install
├─ detect OS
├─ run installers/link.sh
├─ run OS installer
├─ run mise install (optional)
├─ run zimfw build (optional)
└─ run post-install (optional)
DOTFILES_DEBUG=1log whatinit.shsourcesDOTFILES_ENABLE_FZF=0disable fzf plugin (same for ZOXIDE, TMUX, OS_ARCH)DOTFILES_MISE_INSTALL=0skipmise installDOTFILES_ZIMFW_BUILD=0skipzimfw buildDOTFILES_POST_INSTALL=0skip post-install setupDOTFILES_POST_INSTALL_ZSH=0skip setting zsh as defaultDOTFILES_POST_INSTALL_PATH=0skip adding~/.local/binto PATHDOTFILES_POST_INSTALL_XDG_DIRS=0skip creating XDG dirsDOTFILES_POST_INSTALL_GIT=0skip git defaults (including side-by-side diffs)DOTFILES_ARCH_ASSUME_YES=1pacman/paru non-interactiveDOTFILES_TMUX_AUTOSTART=0disable tmux autostartDOTFILES_TMUX_SESSION=...set tmux session name