feat(theme-sync): #79 slice 1 — auto day/night theme primitive
All checks were successful
Check / eval (push) Successful in 3m58s
All checks were successful
Check / eval (push) Successful in 3m58s
First slice of the auto time-of-day theme pair (VISION § D, split into
CLI / timer / menu). `nomarchy-theme-sync auto` reads
settings.autoTheme.{enable,day,night,sunrise,sunset}, picks day vs night
from the local clock, and applies the matching preset — but only if it
differs from the current one, so the slice-2 timer can fire freely
without triggering needless rebuilds. `--which` prints the decision
without switching; `--force` and `--no-switch` included.
cmd_apply's core is factored into apply_named() so `auto` drives the
exact same one engine (no second pipeline). apply behavior is unchanged.
Verification: V1 (package builds) + functional tests on the built binary
against scratch state — wide-day window → day slug, a 00:00–00:01 day
span → night, disabled → no-op, missing day/night → clear die, auto
--no-switch writes state, a re-run no-ops as "already on", and plain
apply still writes (refactor intact). V0 py_compile + flake check +
checks.theme-sync-validate green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -17,6 +17,25 @@ Template:
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-10 — #79 slice 1: auto time-of-day theme CLI primitive
|
||||
- **Task:** Split BACKLOG #79 (`VISION § D`, `[big]`) into 3 slices (CLI /
|
||||
timer / menu); took slice 1.
|
||||
- **Did:** `nomarchy-theme-sync auto` — reads
|
||||
`settings.autoTheme.{enable,day,night,sunrise,sunset}`, computes day/night
|
||||
by the local clock, and applies the matching preset **only if different**
|
||||
(idempotent → the slice-2 timer won't rebuild needlessly). `--which`
|
||||
prints the decision without switching; `--force`/`--no-switch` too.
|
||||
Factored `cmd_apply`'s core into `apply_named` so `auto` reuses the exact
|
||||
same one engine (GOALS: no second pipeline).
|
||||
- **Verified:** **V1** package builds; functional tests on the built bin
|
||||
against scratch state: wide-day→day slug, 00:00–00:01 window→night,
|
||||
disabled→no-op, missing day/night→die, `auto --no-switch` writes state,
|
||||
re-run→"already on" no-op, plain `apply` still writes (refactor intact).
|
||||
**V0** py_compile + flake check + `checks.theme-sync-validate` green.
|
||||
- **Pending:** slices 2 (systemd sunrise/sunset timers + login apply, V2)
|
||||
and 3 (Look & Feel menu) remain under #79.
|
||||
- **Next suggestion:** #79 slice 2 — the timer/hook (V2 runNixOSTest).
|
||||
|
||||
## 2026-07-10 — #78 Omarchy migrant doc (docs/OMARCHY.md)
|
||||
- **Task:** BACKLOG #78 (promoted from PROPOSED) — Omarchy→Nomarchy
|
||||
one-pager (`VISION § F`).
|
||||
|
||||
Reference in New Issue
Block a user