Better Dotfiles
Tool comparisons (stow, bare git, dotfile managers)
- Many use GNU stow: keep a
dotfilestree mirroring$HOME, then symlink packages (e.g.,mail,sway,i3) into place. - Others track
$HOMEdirectly with git (often as a bare repo) and rely on.gitignoreto exclude most files, sometimes with aliases to simplify commands. - Some prefer variants like yadm or dotbot, which layer features such as machine-specific configs and simple provisioning on top of git and symlinks.
- Limitations of “version-control $HOME” noted: harder to manage different hosts, config outside
$HOME, and annoyance of every subdirectory being “inside a repo,” though some mitigate with git settings.
Chezmoi and other “full-featured” managers
- Chezmoi receives strong praise:
- Built-in templating (Go templates) for per-host/per-OS differences.
- Integration with secrets tools (e.g., age, password managers) so repos can stay public.
- Deterministic “apply” model reduces ad-hoc scripting and speeds deployment.
- Good cross-OS support, including Windows.
- Several commenters describe migrating from simpler tools (bare git, yadm, stow) to chezmoi for templates and secrets.
- Nix + home-manager is described as an “end-game” solution for managing dotfiles, packages, and entire environments across machines.
Custom / script-based workflows
- Many prefer minimal bespoke scripts:
- Simple
findor Makefile-based symlinkers mirroring$HOME. - Git repo in
~/.config, plus small scripts or Makefiles to symlink legacy dotfiles. - Using includes and environment variables from a single symlinked shell rc file to point other tools to configs in a central repo.
- Simple
- Some just keep ln commands in a README or skeleton directories and run them manually.
Critiques of the article’s “ln-in-comments” approach
- Seen as a clever hack but essentially a custom dotfile manager in awk/shell.
- Concerns:
- Doesn’t naturally handle directories, commands, or JSON configs without comments.
- Adds in-band metadata to config files instead of using external mapping (e.g., Makefile).
- A few like the idea for generating ln commands but still prefer running them manually.
Scope and philosophy
- Disagreement on whether dotfiles should be “pure config” vs. part of a broader “personal environment” including provisioning, language toolchains, cron/timers, fonts, plugins, etc.
- Some argue you should use existing mature tools to avoid maintenance; others defend building bespoke setups for learning, control, and experimentation.
- Side debates touch on Unix configuration chaos, XDG adoption, and precise terminology for “link” vs. “symlink”/“hardlink.”