6 min read

A Mirror, Not a Backup

What if you wake up tomorrow morning and your Mac won’t boot? The projects you’re in the middle of, the folders that run your work, all of it sits on one dead machine.

Time Machine has you covered, eventually. You’ll buy or borrow a Mac, plug in the drive, and restore. That’s a few hours, maybe a day. And “covered” deserves an asterisk on a laptop, because the backup drive isn’t connected all the time. Mine can go days between Time Machine backups. Git handles the critical source code I touch daily, so I don’t sweat the gap, but everything else is only as fresh as the last time I plugged in the external drive. The client who needs a file at 9 AM doesn’t care about your restore window, and doesn’t care that your last backup was Thursday. What you want in that moment is simpler: the current copy of some subset of critical folders (in my case my Desktop), reachable from any device signed into your iCloud account. Your phone. Your iPad. A borrowed Mac.

The Desktop

The push for me wasn’t hypothetical. It was a single folder: an Obsidian vault I depend on daily to run my practice sitting on my Desktop. Clients, projects, goals, journals, the planning behind every engagement. I’m in it every day, more than any single codebase.

The vault is more than a collection of notes. It talks to RediPlatform, the internal suite of applications I’ve used for years to run my practice. Today it can create and update leads in my CRM from a working session, and over time I’ll add more connections into other parts of the platform. This combination gives me the best of both worlds. I have a central source of truth in RediPlatform my team and I can rely on for decision making while using the vault and AI agents to augment and enhance that decision making.

This vault is the exception to my git safety net. Project source code lives in git repositories with remotes; if the laptop dies, that work is a clone away. The vault lives in a git repository but there is no remote to clone from. It’s Markdown in folders, and every copy of it lived on one machine. So the thing I touch most had the least protection: a Time Machine copy that could be days stale, and nothing else.

That’s what I wanted mirrored. Not restorable someday but reachable now, from a phone if it comes to that.

Why not Apple’s switch?

Apple sells that exact promise with “Desktop & Documents Folders” sync. One switch, and your Desktop lives in iCloud. So why did I write a script instead?

Because Apple’s version doesn’t copy your Desktop to iCloud. It moves it there. Flip the switch, and iCloud becomes the home of your files. Your Mac holds whatever iCloud decides to keep local, and with Optimize Mac Storage on, it can remove local files without warning. Files you haven’t touched lately become cloud-only stubs. The full copy exists somewhere you don’t control, on a schedule you don’t control. And if you ever turn the feature off, the files don’t come home. They stay in iCloud, and your local Desktop is suddenly empty.

That was the deal-breaker for me. I want my Mac to be the single source of truth, always, with a full local copy of everything, always. iCloud should be the mirror copy, never the home.

So the script is strictly one-way. Twice a day, it mirrors every folder on my Desktop into iCloud Drive. It never reads anything back. Nothing that happens in iCloud, no sync hiccup, no eviction, and no merge surprises. None of that can ever touch the files on my Mac. If my account had a bad day, my Desktop wouldn’t notice.

Three tools, three disasters

This is a mirror, not a backup with history. The mirror is exact: if I delete a folder on my Desktop, the next run deletes it in iCloud too. Within hours, my mistake is faithfully reproduced. So it protects against a dead Mac, not against me.

The vault is an exception because it lives in a git repository. There’s no remote, so git saves nothing if the Mac dies, but it gives me every version of every note and an undo for the times I break something myself. And because a git repository is just a folder of ordinary files sitting inside the vault, rsync copies it along with everything else. It doesn’t know what git is. That’s the point. The copy in iCloud isn’t a flat snapshot of my notes, it’s the repository, history and all.

Everything else on the Desktop gets the flat version, and that’s where Time Machine still earns its keep. Time Machine answers “I broke something last Tuesday.” Git answers the same question for the vault, faster and note by note. The mirror answers “my Mac is gone and I need that file now.”

What it will never do

There isn’t much to the script. Most of what’s in it is there to keep it from doing damage. It only deletes inside folders it mirrors, never across the whole iCloud Desktop, so anything else living there is invisible to it. It aborts if the destination folder doesn’t exist rather than creating one. It refuses to run at all if Apple’s sync is ever switched on, because at that point the “copy” and the “original” would be the same folder, and a mirror of yourself is not a backup.

Nothing about this is clever. It’s just a simple tool shaped exactly to the job: one direction, one purpose, no ambitions.

That’s the real argument, and it’s a theme I keep coming back to. When you control the system, you get to decide what it will never do. Apple’s switch optimizes for Apple’s average user. My script optimizes for one consultant who wants his files reachable from anywhere and his Mac answerable to no one.

Two rsync flags and a schedule. That’s the whole product. It’s exactly enough.

Want more like this?

New posts land on the home page, newest first, and the RSS feed carries the full text of every one.