Skip to content

Setup from the app, one Drive folder per Mac, README for Homebrew - #10

Merged
mbeczynski merged 3 commits into
i18n/englishfrom
feat/brew-setup
Oct 6, 2026
Merged

mbeczynski merged 3 commits into
i18n/englishfrom
feat/brew-setup

Conversation

@mbeczynski

Copy link
Copy Markdown
Contributor

Built on #9 (translation). Merge #9 first; this PR then retargets to main automatically.

One Drive folder per Mac

Until now, the folder and the image were the constant mac-studio on every Mac. Two Macs on one Google account would have shared one image, because drive.file access is per OAuth client, not per token.

  • Where the name lives: each Mac stores its folder name in ~/Library/Application Support/CloudMachine/drive-folder.
  • When it is chosen: configure-remote decides it once, before creating the rclone remote. The default comes from the computer name, or set it with --folder NAME.
  • Existing installations: a Mac whose rclone remote already exists predates this setting and keeps mac-studio. That is this Mac: drive-status shows Drive folder: gdrive:CloudMachine/mac-studio. With no file at all, the legacy name is used too.
  • No switching: a stored or legacy folder is never switched to another name. That would start an empty backup and orphan the old one, so the request is refused.
  • DriveFolderTests cover every branch, including the refusals.

Setup from the app

The Required Setup Steps card used to list only commands to copy. The controller's install, create and attach actions were connected to nothing. The card now shows the next steps in order, each with a button:

  1. Install rclone, Install FUSE-T.
  2. Connect Google Drive: command to copy (OAuth waits for the browser in Terminal).
  3. Open Full Disk Access settings.
  4. Install agents.
  5. Create image (with a size field), then Attach image.
  6. Point Time Machine at CloudMachine: sudo command to copy.

Google comes before anything that mounts, because that is where the folder is chosen. State not measured yet never produces a step. SetupPlan is a pure function, covered by SetupPlanTests.

README

  • Homebrew only: Getting started → open the app → follow the card. Includes several Macs on one account, and upgrading/uninstalling.
  • Running it: starts with the menu bar and the window; the CLI follows.
  • Terminal setup stays as the alternative, in an order that works. The old README ran create-image before install-launchd, but create-image refuses without the mount, which install-launchd starts.
  • Moved out: building from source, local installs, tests, releases and the harnesses → docs/building.md.
  • Cask caveats point to the app and #getting-started.

Checks

  • swift test: 323 tests, 0 failures. swift format lint --strict passes.
  • Cask template: brew style passes.
  • Not run here: the GUI buttons themselves. This Mac runs the production instance, and the setup actions install agents and create images. They call the same Core functions as the CLI subcommands. Worth one run-through on a clean Mac or a second macOS user before the first release.

🤖 Generated with Claude Code

mbeczynski and others added 3 commits October 6, 2026 09:04
…ccount

The folder and the image were the constant `mac-studio` on every Mac, so a
second Mac on the same Google account would have shared both. drive.file
access is per OAuth client, not per token, so two Macs with the same
credentials do see each other's files.

Each Mac now keeps its folder name in Application Support/drive-folder,
decided once by `configure-remote` (default: the machine key, or
`--folder NAME`) BEFORE the remote is created. An installation that already
has the rclone remote predates this setting and keeps `mac-studio`, where
its backup lives; with no file at all the legacy name is used too. A stored
or legacy folder can never be switched - that would start an empty backup
and orphan the old one - so such a request is refused.

`drive-status` shows the folder.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
After `brew install` the app is the first thing a person opens, but the
setup card only listed commands to copy, and the controller's install,
create and attach actions were wired to nothing. The card now shows the
next steps in order, each with a button: install rclone, install FUSE-T,
open Full Disk Access settings, install the agents, create the image (with
a size field), attach it. Two steps stay commands to copy: Google sign-in
(`configure-remote` waits for the browser in a terminal) and pointing Time
Machine at the volume (needs sudo).

Google comes before anything that mounts, because that is where this Mac's
Drive folder is chosen. State not measured yet (`nil`) never produces a
step. The plan is a pure function, covered by SetupPlanTests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Getting started: `brew install`, open the app, follow the setup card;
  per-Mac Drive folders; upgrading and uninstalling.
- Setting up from Terminal kept as the alternative, in an order that works:
  `install-launchd` (which mounts Drive) before `create-image`, which
  refuses without the mount. The old order failed at that step.
- Running it starts with the menu bar and the window; the CLI follows.
- Building from source, local installs, tests, releases and the harnesses
  move to docs/building.md; the README covers Homebrew only.
- Limitations: one-Mac-per-account and Polish-only are gone; unenforced
  per-machine budgets stay. The log grep looks for "backup failure", which
  is what the English logs now say.
- Cask caveats point to the app and #getting-started.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@mbeczynski
mbeczynski merged commit e96b25a into i18n/english Oct 6, 2026
3 checks passed
@mbeczynski
mbeczynski deleted the feat/brew-setup branch October 6, 2026 07:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant