feat(timezone): opt-in automatic, location-following timezone
nomarchy.system.autoTimezone (off by default): geoclue + automatic- timezoned drive /etc/localtime from your location, so travelling to another zone updates the Waybar clock on its own. Menu-driven, in-flake state (the night-light / keyboard philosophy): the flag is settings.autoTimezone in theme-state.json (git-tracked); a System-menu entry toggles it. Because it's a SYSTEM service — not a user unit it can start/stop instantly like night-light — the toggle (nomarchy-autotimezone, run in a terminal) writes the flag --no-switch then drives `sudo nixos-rebuild` (bakes the service + the time.timeZone override) plus `home-manager switch` (the Waybar-refresh watcher); both sides read the one flag. - modules/nixos/timezone.nix: parses settings.autoTimezone from nomarchy.system.stateFile (like Plymouth), gates geoclue2 + automatic-timezoned, and mkForce-nulls time.timeZone — automatic- timezoned sets it null at normal priority, which collides with the installer's static value (a hard eval error), so force wins and reverts cleanly when disabled. Ships the nomarchy-autotimezone toggle. - modules/home/timezone.nix: a tiny user service watching timedate1's change signal that reloads Waybar (SIGUSR2) on a real zone change, so the clock follows live (Waybar captures the zone at construction). Gated on the same flag via nomarchy.settings.autoTimezone. - rofi menu: "Auto timezone (on/off)" in the System submenu. - option + template example + ROADMAP entry; theme.nix seeds the flag. Eval-verified on (geoclue+daemon on, tz forced null over a static installer value, watcher present) and off (static tz intact, nothing extra); home + system both build green. Needs an on-hardware check (geoclue detection + the SIGUSR2 clock refresh aren't CI-testable). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -492,6 +492,30 @@ how to override it. Items marked ✓ are shipped.
|
||||
sunset/sunrise (would mean wlsunset, which schedules by location). Pending an
|
||||
on-machine check (first enable rebuilds + comes on; later toggles instant; off
|
||||
persists across reboot via ExecCondition; stopping hyprsunset restores gamma).
|
||||
- ✓ **Automatic timezone (location-following clock):** `nomarchy.system.autoTimezone`
|
||||
(opt-in, off by default) — geoclue + `services.automatic-timezoned` drive
|
||||
`/etc/localtime` from your location, so travelling to another zone updates the
|
||||
Waybar clock on its own. **Menu-driven, in-flake state** (the night-light /
|
||||
keyboard philosophy): the flag is `settings.autoTimezone` in theme-state.json,
|
||||
git-tracked; the System-menu entry (`nomarchy-menu autotimezone` →
|
||||
`nomarchy-autotimezone`) writes it and rebuilds. **Not instant like
|
||||
night-light** — it's a *system* service (not a user unit you can start/stop),
|
||||
so the toggle drives a `sudo nixos-rebuild` (bakes the service + the
|
||||
`time.timeZone` override) plus a `home-manager switch` (the Waybar-refresh
|
||||
watcher), both off the one flag. **time.timeZone handling:** a runtime zone
|
||||
needs `/etc/localtime` writable; automatic-timezoned sets `time.timeZone = null`
|
||||
itself, but the installer's static value would collide (a hard eval error), so
|
||||
the module forces it null (`mkForce`) over the installer's value when enabled,
|
||||
and reverts to it when disabled. **Live clock refresh:** Waybar's clock module
|
||||
captures the zone at construction, so `modules/home/timezone.nix` runs a tiny
|
||||
user service that watches timedate1's change signal and reloads Waybar
|
||||
(SIGUSR2) on a real zone change (also catches a manual `timedatectl
|
||||
set-timezone`). Eval-verified both ways (on: geoclue+daemon on, tz forced null
|
||||
over a static installer value, watcher present; off: static tz intact, no
|
||||
service/watcher). **Pending an on-hardware check** — geoclue detection and the
|
||||
SIGUSR2 clock refresh aren't testable in CI (if SIGUSR2 proves insufficient,
|
||||
fall back to restarting waybar). Remaining (optional): a Waybar tooltip line
|
||||
showing the detected zone.
|
||||
- **Keyboard layouts (per-device + switching):**
|
||||
- ✓ **Per-device declarative layout:** `nomarchy.keyboard.devices`
|
||||
(`{ "<hyprctl-device-name>" = { layout; variant; }; }`) generates Hyprland
|
||||
|
||||
Reference in New Issue
Block a user