Better Dotfiles

Tool comparisons (stow, bare git, dotfile managers)

  • Many use GNU stow: keep a dotfiles tree mirroring $HOME, then symlink packages (e.g., mail, sway, i3) into place.
  • Others track $HOME directly with git (often as a bare repo) and rely on .gitignore to 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 find or 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.
  • 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.”