My dotfiles synced from localhost and remote machines.
git clone <this repo> && cd dotfiles
make install # base machine (servers too)
make install-full # desktop: base + GUI apps (firefox, element)
make install runs, in order:
install-deps— Nerd Fonts (curl installer)install-nix— nix then the CLI tool set fromflake.nix(nix profile add .#cli, includes stow)install-dotfiles— submodules,stow, tmux plugins (via TPM), and a.zshrc_localseed
Desktop machines run make install-full (= install +
install-apps), which additionally adds the GUI package
(nix profile add .#apps). Every target is idempotent — re-running
upgrades the corresponding profile.
Everything tool-like — including stow itself — comes from the flake.
config/<tool>/ one stow package per tool, mirroring the tool's
full target layout: home dotfiles AND XDG subdirs
One stow root (config/), one target ($HOME): stow strips the
package dir from the link path and creates intermediate dirs, so
config/zsh/.zshrc -> ~/.zshrc
config/zsh/.config/zsh/*.zsh -> ~/.config/zsh/*.zsh
config/starship/.config/… -> ~/.config/starship/…
config/ghostty/.config/… -> ~/.config/ghostty/…
The Makefile runs stow * (every top-level dir is a package),
installs the tmux plugins with TPM, and seeds .zshrc_local.
Machine/personal values never live in the repo: they go in
_local files next to the stowed config (~/.zshrc_local,
~/.gitconfig_local), included by the stowed file and created
per host.