Delegate Snapper setup to Omarchy packages

This commit is contained in:
Ryan Hughes committed 2026-06-21 02:29:09 -04:00
1 parent 58221e5ed6
commit 8c77631f68
4 files changed
+6 -70

No files matched your search

-5
View File
@@ -1314,11 +1314,6 @@ cat <<-_EOF_ >user_configuration.json
}
},
"disk_config": {
"btrfs_options": {
"snapshot_config": {
"type": "Snapper"
}
},
"config_type": "default_layout",
"device_modifications": [
{
@@ -9,9 +9,9 @@ Phase ordering (full-disk and protected/pre-mounted):
pre_mounted_config; no-op for full-disk installs
arch_install_system → one archinstall flow for partition/mount-or-use,
base install, early Omarchy packages, Limine setup,
useradd, runtime Omarchy packages, Snapper, fstab
useradd, runtime Omarchy packages, fstab
configure_hibernation → root-owned swap/resume drop-ins
run_system_finalizer → arch-chroot root omarchy-setup-system
run_system_finalizer → arch-chroot root omarchy-setup-system, including Snapper
finalize_limine_boot → final Limine config/UKI build after hardware drop-ins
run_chroot_finalizer → arch-chroot -u user omarchy-finalize-user
configure_login → sddm state + encrypted-install autologin
@@ -275,9 +275,6 @@ def arch_install_system(ctx: InstallContext) -> None:
finally:
_unmask_mkinitcpio_pacman_hooks(ctx)
info("› configuring root Snapper snapshots")
_configure_snapper_root(ctx)
# Standard arch finishers.
if config.timezone:
installer.set_timezone(config.timezone)
@@ -540,57 +537,6 @@ def _installer_esp_mount(installer) -> str:
return "/boot"
def _configure_snapper_root(ctx: InstallContext) -> None:
"""Configure Omarchy's root-only Snapper setup during the archinstall
phase, not inside the finalizer chroot.
archinstall's own setup_btrfs_snapshot() uses `snapper --no-dbus` because
snapperd/DBus are not available in arch-chroot. We mirror that proven
chroot-safe call, but only create the root config: Omarchy intentionally
does not snapshot /home user data.
"""
config_path = ctx.target / "etc" / "snapper" / "configs" / "root"
if not config_path.exists():
subprocess.run(
[
"arch-chroot",
"-S",
str(ctx.target),
"snapper",
"--no-dbus",
"-c",
"root",
"create-config",
"/",
],
check=True,
)
template_candidates = [
ctx.target / "etc" / "snapper" / "config-templates" / "omarchy",
ctx.target / "usr" / "share" / "omarchy" / "default" / "snapper" / "root",
]
template = next((path for path in template_candidates if path.exists()), None)
if template is None:
searched = "\n ".join(str(path) for path in template_candidates)
raise RuntimeError(f"Snapper root template not found. Searched:\n {searched}")
config_path.parent.mkdir(parents=True, exist_ok=True)
shutil.copy2(template, config_path)
conf_path = ctx.target / "etc" / "conf.d" / "snapper"
conf_path.parent.mkdir(parents=True, exist_ok=True)
if conf_path.exists():
text = conf_path.read_text()
if re.search(r"^SNAPPER_CONFIGS=", text, flags=re.MULTILINE):
text = re.sub(r'^SNAPPER_CONFIGS=.*$', 'SNAPPER_CONFIGS="root"', text, flags=re.MULTILINE)
else:
text = text.rstrip() + '\nSNAPPER_CONFIGS="root"\n'
conf_path.write_text(text)
else:
conf_path.write_text('SNAPPER_CONFIGS="root"\n')
def _limine_template(ctx: InstallContext, filename: str) -> Path:
candidates = [
@@ -1134,11 +1080,6 @@ def finalize_limine_boot(ctx: InstallContext) -> None:
check=False,
capture_output=True,
)
subprocess.run(
["arch-chroot", str(ctx.target), "systemctl", "enable", "limine-snapper-sync.service"],
check=True,
)
if "Omarchy" not in limine_conf.read_text():
raise RuntimeError(f"{limine_conf} has no Omarchy entry")
if "cryptdevice=" in cmdline and "cryptdevice=" not in limine_conf.read_text():
+2 -2
View File
@@ -1429,11 +1429,11 @@
"uid": 0,
"user": "root"
},
"/etc/systemd/system/timers.target.wants/snapper-timeline.timer": {
"/etc/systemd/system/timers.target.wants/snapper-cleanup.timer": {
"gid": 0,
"group": "root",
"mode": "0o777",
"target": "/usr/lib/systemd/system/snapper-timeline.timer",
"target": "/usr/lib/systemd/system/snapper-cleanup.timer",
"type": "symlink",
"uid": 0,
"user": "root"
+2 -2
View File
@@ -1381,11 +1381,11 @@
"uid": 0,
"user": "root"
},
"/etc/systemd/system/timers.target.wants/snapper-timeline.timer": {
"/etc/systemd/system/timers.target.wants/snapper-cleanup.timer": {
"gid": 0,
"group": "root",
"mode": "0o777",
"target": "/usr/lib/systemd/system/snapper-timeline.timer",
"target": "/usr/lib/systemd/system/snapper-cleanup.timer",
"type": "symlink",
"uid": 0,
"user": "root"