[{"content":"This walks through scaffolding a fresh Homie repo, putting your first dotfile under management, and bootstrapping the same environment on a second machine. About five minutes if you already have git + GitHub set up.\n1. Install hm # Grab the latest static binary from Releases. One file, no runtime, no dependencies.\nARCH=$(uname -m | sed \u0026#39;s/x86_64/amd64/;s/aarch64/arm64/\u0026#39;) curl -fsSL -o /tmp/hm \\ \u0026#34;https://github.com/kurowski/homie/releases/latest/download/hm-linux-${ARCH}\u0026#34; chmod +x /tmp/hm sudo mv /tmp/hm /usr/local/bin/hm hm --version 2. Scaffold a user environment repo # hm init writes a starter repo — homie.toml, a bootstrap.sh, an example dotfile, an example template, and a sample script — that\u0026rsquo;s yours to grow into.\nhm init ~/dotfiles It\u0026rsquo;ll ask for your name, email, and GitHub username so it can wire up bootstrap.sh with the right clone URL.\n3. Push it to GitHub # Create an empty repo at github.com/\u0026lt;you\u0026gt;/dotfiles (or whatever you named it during hm init), then:\ncd ~/dotfiles git init -b main git add -A git commit -m \u0026#34;initial scaffold\u0026#34; git remote add origin git@github.com:\u0026lt;you\u0026gt;/dotfiles.git git push -u origin main 4. Apply on the machine you\u0026rsquo;re on # Reconcile your $HOME with the scaffolded repo:\nhm apply You\u0026rsquo;ll see Charm-styled progress as Homie installs the listed packages, symlinks your dotfiles, renders your templates, and runs your scripts.\n5. Bootstrap on a fresh machine # On any other Linux box — bare metal, VM, container, Codespace — run:\ncurl https://raw.githubusercontent.com/\u0026lt;you\u0026gt;/dotfiles/main/bootstrap.sh | bash That downloads hm, clones your repo, and runs hm apply. Done.\nWhere to next? # Commands — every hm subcommand explained. homie.toml — full config reference. Templates — conditionals, profile tags, the works. Recipes — concrete patterns for common setups. ","externalUrl":null,"permalink":"/docs/quickstart/","section":"Documentation","summary":"This walks through scaffolding a fresh Homie repo, putting your first dotfile under management, and bootstrapping the same environment on a second machine. About five minutes if you already have git + GitHub set up.\n1. Install hm # Grab the latest static binary from Releases. One file, no runtime, no dependencies.\nARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') curl -fsSL -o /tmp/hm \\ \"https://github.com/kurowski/homie/releases/latest/download/hm-linux-${ARCH}\" chmod +x /tmp/hm sudo mv /tmp/hm /usr/local/bin/hm hm --version 2. Scaffold a user environment repo # hm init writes a starter repo — homie.toml, a bootstrap.sh, an example dotfile, an example template, and a sample script — that’s yours to grow into.\n","title":"Quick start","type":"docs"},{"content":"Every Homie command except hm init expects to be run from the root of a user environment repo, or with HM_REPO set to its path.\nhm init # Interactively scaffolds a brand new user environment repo. Run this once on the first machine. Subsequent machines clone the result via bootstrap.sh.\nhm init ~/dotfiles You can also pass flags non-interactively (useful in CI):\nhm init \\ --name \u0026#34;Scout Homes\u0026#34; \\ --email scout@homie.sh \\ --github-user scouthomes \\ --github-repo dotfiles \\ --profile personal \\ --shell zsh \\ ~/dotfiles hm apply # Full reconciliation pass — detect → load config → install packages → symlink dotfiles → render templates → run scripts → summary.\nhm apply apply is idempotent. Running it twice in a row should produce a clean summary with nothing changed.\nFlags:\n--no-tty — force plain output (no Bubble Tea spinner). Auto-detected when stdout isn\u0026rsquo;t a terminal; this flag overrides the detection. --verbose — raise log level to Debug. hm link # Just the dotfile phase of apply. Walks dotfiles/ and ensures every file under it is symlinked into $HOME at the matching path.\nConflicts (a real file exists at the destination) are backed up to \u0026lt;path\u0026gt;.homie-backup-\u0026lt;timestamp\u0026gt; before linking — Homie never silently overwrites your data.\nhm render # Just the template phase. Walks templates/*.tmpl, renders each through Go text/template + Sprig with the active data set, and writes the output (without the .tmpl suffix) into $HOME. Source mode is preserved (so templates/bin/foo.sh.tmpl renders executable).\nhm install # Just the package phase. Resolves [packages].all + [packages].\u0026lt;distro\u0026gt; against the detected package manager and installs any missing entries. On unsupported distros, prints a friendly \u0026ldquo;not yet supported\u0026rdquo; notice and skips.\nhm run # Just the script phase. Runs scripts/*.sh in lexical order, each as a separate bash subprocess with HM_TAGS, HM_REPO, HM_HOME, and every [vars] entry exported to its environment.\nScripts are user code — Homie doesn\u0026rsquo;t enforce idempotency. Convention is that each script is individually idempotent (e.g. command -v X \u0026amp;\u0026amp; exit 0 at the top).\nhm status # Read-only view of what apply would do. No changes, no installs, no file writes. Useful for previewing, for CI checks, or for confidence before a real run.\nhm doctor # Walks the repo and reports:\nBroken symlinks (target doesn\u0026rsquo;t exist). Symlinks in $HOME that point outside the repo. Missing packages. Unrendered templates. Scripts that aren\u0026rsquo;t executable. Unknown distro detection. Exit code is 0 if everything is clean, 1 otherwise — useful as a post-deploy health check in CI.\nhm bootstrap # Installs the minimum tools needed for apply to proceed: git and ca-certificates. Called by bootstrap.sh on a fresh machine before the user repo is cloned. Most users never invoke this directly.\nGlobal flags # These work on every subcommand:\n--repo \u0026lt;path\u0026gt; — point at a user repo other than the cwd (or use HM_REPO=\u0026lt;path\u0026gt;). --no-tty — force plain output. --verbose — Debug-level logging. --version — print version and exit. ","externalUrl":null,"permalink":"/docs/commands/","section":"Documentation","summary":"Every Homie command except hm init expects to be run from the root of a user environment repo, or with HM_REPO set to its path.\nhm init # Interactively scaffolds a brand new user environment repo. Run this once on the first machine. Subsequent machines clone the result via bootstrap.sh.\nhm init ~/dotfiles You can also pass flags non-interactively (useful in CI):\n","title":"Commands","type":"docs"},{"content":"Coming soon — full reference for every table and field in homie.toml, with per-distro override examples and the defaults hm init writes.\n","externalUrl":null,"permalink":"/docs/config/","section":"Documentation","summary":"Coming soon — full reference for every table and field in homie.toml, with per-distro override examples and the defaults hm init writes.\n","title":"homie.toml","type":"docs"},{"content":"Coming soon — template syntax reference, the full Sprig function list, the hasTag helper, and a cookbook of common patterns (per-profile blocks, OS-conditional config, defaults).\n","externalUrl":null,"permalink":"/docs/templates/","section":"Documentation","summary":"Coming soon — template syntax reference, the full Sprig function list, the hasTag helper, and a cookbook of common patterns (per-profile blocks, OS-conditional config, defaults).\n","title":"Templates","type":"docs"},{"content":"Coming soon — the detailed comparison expanding on the matrix from the homepage. Honest take on where each tool wins and where Homie fits.\n","externalUrl":null,"permalink":"/docs/compare/","section":"Documentation","summary":"Coming soon — the detailed comparison expanding on the matrix from the homepage. Honest take on where each tool wins and where Homie fits.\n","title":"Compare","type":"docs"},{"content":"Coming soon — concrete patterns: work-laptop with tagged secrets, dotfiles + system fonts on Fedora, devcontainer setup, GitHub Codespaces, shared-server (no root) installs, and more.\n","externalUrl":null,"permalink":"/docs/recipes/","section":"Documentation","summary":"Coming soon — concrete patterns: work-laptop with tagged secrets, dotfiles + system fonts on Fedora, devcontainer setup, GitHub Codespaces, shared-server (no root) installs, and more.\n","title":"Recipes","type":"docs"},{"content":"Coming soon — quick answers to \u0026ldquo;Why TOML?\u0026rdquo;, \u0026ldquo;Why symlinks?\u0026rdquo;, \u0026ldquo;Is this Nix?\u0026rdquo;, \u0026ldquo;How does it differ from chezmoi?\u0026rdquo;, and other questions that come up often.\n","externalUrl":null,"permalink":"/docs/faq/","section":"Documentation","summary":"Coming soon — quick answers to “Why TOML?”, “Why symlinks?”, “Is this Nix?”, “How does it differ from chezmoi?”, and other questions that come up often.\n","title":"FAQ","type":"docs"},{"content":"Coming soon — how to add a new distro (// TODO(contrib) markers in source point at the gaps), how to add a package manager, how to run the e2e harness locally, and the contribution process.\n","externalUrl":null,"permalink":"/docs/contributing/","section":"Documentation","summary":"Coming soon — how to add a new distro (// TODO(contrib) markers in source point at the gaps), how to add a package manager, how to run the e2e harness locally, and the contribution process.\n","title":"Contributing","type":"docs"},{"content":"","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"The reference for getting Homie installed, configured, and onto every machine you live in.\nStart with the quick start if you\u0026rsquo;ve never used Homie before. If you\u0026rsquo;re coming from chezmoi, Ansible, Stow, or Nix, the comparison is a faster orientation.\n","externalUrl":null,"permalink":"/docs/","section":"Documentation","summary":"The reference for getting Homie installed, configured, and onto every machine you live in.\nStart with the quick start if you’ve never used Homie before. If you’re coming from chezmoi, Ansible, Stow, or Nix, the comparison is a faster orientation.\n","title":"Documentation","type":"docs"},{"content":" Make every Linux box feel like home. # Homie is a single binary that turns a fresh Linux install into your Linux install — dotfiles, packages, setup scripts, all from one repo you own. One command from a bare box to a working environment.\ncurl https://raw.githubusercontent.com/you/dotfiles/main/bootstrap.sh | bash That\u0026rsquo;s it. That\u0026rsquo;s the whole setup story.\nWhat you get # Symlinks, not copies. Edit ~/.zshrc and you\u0026rsquo;re editing the file in your repo. git diff shows what changed. No chezmoi edit indirection. One repo, three jobs. Dotfiles + system packages + setup scripts, declared in one homie.toml. No glue between separate tools. No state file. Every hm apply is a full reconciliation. Idempotent by construction — re-running is always safe. Static binary. No Python, no Ruby, no daemon. ~3 MB, single file. Charm-powered TUI. Spinners, progress, a friendly summary at the end. Plain output in CI. How it looks # # homie.toml [user] name = \u0026#34;Scout Homes\u0026#34; email = \u0026#34;scout@homie.sh\u0026#34; [profile] name = \u0026#34;personal\u0026#34; default_shell = \u0026#34;zsh\u0026#34; [packages] all = [\u0026#34;git\u0026#34;, \u0026#34;zsh\u0026#34;, \u0026#34;neovim\u0026#34;, \u0026#34;tmux\u0026#34;, \u0026#34;ripgrep\u0026#34;, \u0026#34;fd\u0026#34;, \u0026#34;fzf\u0026#34;] fedora = [\u0026#34;util-linux-user\u0026#34;] ubuntu = [\u0026#34;fd-find\u0026#34;] [vars] EDITOR = \u0026#34;nvim\u0026#34; dotfiles/ homie.toml bootstrap.sh dotfiles/ ← symlinked into $HOME .zshrc .gitconfig templates/ ← rendered into $HOME with var-sub + conditionals .gitconfig.tmpl scripts/ ← ordered setup steps 01-shell.sh 02-tools.sh Why not just\u0026hellip;? # Homie chezmoi Ansible Stow Nix Dotfile model 🔗 symlink 📋 copy + indirection 📋 copy / template 🔗 symlink ❄️ declarative store Provisioning ✅ ❌ ✅ ❌ ✅ State file ❌ ✅ ❌ ❌ ✅ Runtime ⚡ Native ⚡ Native 🐍 Python 🐪 Perl ❄️ Nix Weight 🐁 🐕 🐘 🐁 🐘 See the full comparison →\nGet started # Grab the latest binary from Releases. hm init ~/dotfiles to scaffold a starter repo. Edit homie.toml, commit, push. On any other Linux box: curl …/bootstrap.sh | bash. Read the quickstart →\n","externalUrl":null,"permalink":"/","section":"Homie","summary":"Make every Linux box feel like home. # Homie is a single binary that turns a fresh Linux install into your Linux install — dotfiles, packages, setup scripts, all from one repo you own. One command from a bare box to a working environment.\ncurl https://raw.githubusercontent.com/you/dotfiles/main/bootstrap.sh | bash That’s it. That’s the whole setup story.\nWhat you get # Symlinks, not copies. Edit ~/.zshrc and you’re editing the file in your repo. git diff shows what changed. No chezmoi edit indirection. One repo, three jobs. Dotfiles + system packages + setup scripts, declared in one homie.toml. No glue between separate tools. No state file. Every hm apply is a full reconciliation. Idempotent by construction — re-running is always safe. Static binary. No Python, no Ruby, no daemon. ~3 MB, single file. Charm-powered TUI. Spinners, progress, a friendly summary at the end. Plain output in CI. How it looks # # homie.toml [user] name = \"Scout Homes\" email = \"scout@homie.sh\" [profile] name = \"personal\" default_shell = \"zsh\" [packages] all = [\"git\", \"zsh\", \"neovim\", \"tmux\", \"ripgrep\", \"fd\", \"fzf\"] fedora = [\"util-linux-user\"] ubuntu = [\"fd-find\"] [vars] EDITOR = \"nvim\" dotfiles/ homie.toml bootstrap.sh dotfiles/ ← symlinked into $HOME .zshrc .gitconfig templates/ ← rendered into $HOME with var-sub + conditionals .gitconfig.tmpl scripts/ ← ordered setup steps 01-shell.sh 02-tools.sh Why not just…? # Homie chezmoi Ansible Stow Nix Dotfile model 🔗 symlink 📋 copy + indirection 📋 copy / template 🔗 symlink ❄️ declarative store Provisioning ✅ ❌ ✅ ❌ ✅ State file ❌ ✅ ❌ ❌ ✅ Runtime ⚡ Native ⚡ Native 🐍 Python 🐪 Perl ❄️ Nix Weight 🐁 🐕 🐘 🐁 🐘 See the full comparison →\n","title":"Homie","type":"page"},{"content":"","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"}]