# Backlog — the prioritized task queue **This is the only executable work list for agents.** Product themes and v1.0 intent live in [`docs/VISION.md`](../docs/VISION.md); design history in [`docs/ROADMAP.md`](../docs/ROADMAP.md); map in [`docs/README.md`](../docs/README.md) and [`agent/README.md`](README.md). **Rules:** - Agents take the topmost actionable item (see LOOP.md). Finished items are **deleted** here — the journal + git log are the record; durable design notes get a ✓-entry in docs/ROADMAP.md (and/or a note in VISION) if worth keeping. - Item numbers are **stable IDs** — never renumbered or reused. A gap in the sequence means shipped (or dropped) work; new items take the next free number regardless of tier. - Tags: `[blocked:hw]` needs real hardware (see HARDWARE-QUEUE.md) · `[human]` needs Bernardo · `[stuck]` two failed attempts, needs help · `[big]` must be split before starting. - Agents may append to **PROPOSED** and **Decisions** freely (include `VISION § …` or `ROADMAP § …` when relevant); only Bernardo moves items *out* of PROPOSED into the tiers. --- ## NOW *(empty — NEXT's top item is the queue head)* ## NEXT ### 79. Auto time-of-day theme pair (`VISION § D`) `[big]` — split Auto light/dark theme switch through the **existing** engine (a timer runs `nomarchy-theme-sync apply`), one pipeline. State: `settings.autoTheme` `{enable, day, night, sunrise, sunset}` in theme-state.json. Slices: 1. ~~**CLI primitive + schema**~~ ✓ shipped 2026-07-10 — `nomarchy-theme-sync auto` resolves day/night from `settings.autoTheme.{enable,day,night,sunrise,sunset}` and applies (only if different — idempotent, so the timer won't needlessly rebuild); `--which` prints the decision, `--force`/`--no-switch` too. `cmd_apply` core factored into `apply_named` (behavior unchanged). V1 + functional tests (day/night/disabled/missing-slugs, apply writes state, idempotent). 2. **Timer/hook** — systemd user timers at sunrise+sunset running `nomarchy-theme-sync auto`, gated on `settings.autoTheme.enable`; apply the correct theme at session start too. V2 (runNixOSTest). 3. **Menu** — Look & Feel › Auto theme: enable/disable, pick day/night themes, set times. Writes state. ### 76. Hibernation default — all agent work shipped `[blocked:hw]` Hibernation + zram on by default (product intent, Bernardo 2026-07-10). **All V0/V1/V2 slices done** (2026-07-10); only the V3 check remains — on a machine **actually running Nomarchy** (the dev box runs Bernardo's own NixOS, not Nomarchy, so it can't close it). Steps in HARDWARE-QUEUE. Design record in **ROADMAP § Hibernation + zram by default**. Shipped: - zram default (`modules/nixos/oom.nix`, zstd/50%/prio 100) — `checks.zram-swap`. - Installer/template already default new installs to a RAM-sized encrypted `@swap` swapfile + `resume_offset` wiring; `swapSize=0` = no-swap opt-out. - `docs/MIGRATION.md` enable-hibernation runbook (existing machines). - `rofi.nix` Power → Hibernate: kept unconditional, **notifies on failure**. - `checks.hibernate` VM test (V2 PASS) — hibernate→resume→crash round-trip; zram (prio 100) doesn't swallow the image, disk swap carries it. **V3 remaining:** real hibernate→resume on the LUKS+@swap swapfile+offset layout (QEMU can't feed a boot-time offset / drive LUKS-initrd) + the no-swap notify in a real session. Steps queued in HARDWARE-QUEUE. Close #76 on PASS. ## LATER - **Wallpapers artifact split** (ROADMAP § Faster switches — decided, deferred): pinned `Nomarchy-wallpapers` input so a state write stops re-copying 86 MB. Follow-on: pre-built theme variants if switches are still slow after. - **Installer round 2** (ROADMAP § Installer): multi-disk BTRFS RAID, impermanence, BIOS/legacy boot. - **Boot-from-snapshot**: a systemd-boot equivalent of grub-btrfs. - **Night-light geo mode**: lat/long auto sunset/sunrise (means wlsunset). - **MIPI/IPU software-ISP camera** support (no-UVC machines). - **VPN exit-node richer display** (country/city) (optional). - **NixOS release bump → v2** `[human]`: deliberate, hand-edited, never automated; the previous attempt was discarded (2026-06-22) over a Hyprland OOM blocker — see MEMORY.md before retrying (NOW#3 should also soften that blocker class). ## FUTURE (decided deferred — not the agent queue head) Work we **intend** someday but explicitly **not** NEXT. Agents do not pick these unless Bernardo promotes one into NEXT/NOW. ### 20. KVM runner → VM suite in CI `[human]` **Status (2026-07-10):** keep **eval-only** CI on the current Gitea stack (act_runner in docker-compose on the 4c/4 GB IONOS VPS). Nested KVM + RAM headroom on that host are a poor fit next to Gitea; full `checks.*` VMs stay local / promotion-time until a **separate** KVM-capable machine exists. **When ready:** register a second runner (host-mode nix + `/dev/kvm`, label `nix-kvm` — not the existing docker eval runner), then uncomment the `vm-checks` job in `.gitea/workflows/check.yml` (`runs-on: nix-kvm`, `nix flake check` + toplevel/HM builds). Do not enable the job until that label is online (Gitea queues forever otherwise). ### Formatter — adopt later `[human]` **Intent:** add a Nix formatter (likely `nixfmt-rfc-style`) in a dedicated pass: reformat the tree once, document in CONVENTIONS, optional CI check. **Not** the queue head — no drive-by reformats until that pass. ### Hibernation + zram **Promoted → NEXT #76** (2026-07-10). ## PROPOSED (agent suggestions — await human triage) *Agents: append here with a one-paragraph pitch (what/why/cost). Do not implement. Bernardo moves accepted items into a tier.* *Open work only. Shipped exam/A–C items (#47–#63, #14, #52 theme high-ROI, etc.) live in the journal + ROADMAP — not here.* ### Product / day-2 _(Doctor hibernate/sleep section → promoted to **NEXT #77** 2026-07-10.)_ _(Battery charge-limit instant → shipped 2026-07-10; V3 PASS Latitude 5310: Custom charge type + live menu + unplug re-apply.)_ _(Portal/Flatpak IR camera → **#71** docs (a); (b)/(c) still need T14s.)_ _(Post-install hardware hints residual → **#73**.)_ _(Look & Feel submenu → already shipped (Theme / wallpaper / night light); 2026-07-10: Reset wallpaper (auto) row; root stays six.)_ - **NVIDIA first-class options** — **deferred past v1** (Bernardo 2026-07-10). Keep #59 commented install guidance; no `nomarchy.hardware.nvidia.*` until a hybrid maintainer + queue. ### Installer / template _(Installer ↔ template SoT CI → **#72**; V2 install → **#75**.)_ _(Installer chown flake dir → **#65**.)_ _(MIGRATION.md snapshot layout → **#64**.)_ _(Unattended-install test matrix → **#74**.)_ _(Friendlier mkFlake theme-state errors → **#66**.)_ ### Theme polish - **Auto time-of-day theme pair** (`VISION § D`) `[big]` — no scheduled light/dark theme switch exists today (only night-light gamma via hyprsunset + wallpaper `bg auto`). Let a user pair two shipped themes (e.g. summer-day ↔ summer-night) and switch on a schedule/sunset through the **existing** engine — a systemd timer running `nomarchy-theme-sync apply ` — staying one theme engine (GOALS: no second pipeline). Split before starting: (a) state schema for the pair + schedule, (b) the timer/ hook, (c) menu surface. Cost: multi-slice; verify each `apply` still bakes one clean generation. (Verified 2026-07-10: no time-of-day/auto-theme scheduler in the tree.) _(#52 residual ANSI → **#68** ✓.)_ _(Fidelity / hierarchy nits → **#67** ✓.)_ _(Import pipeline hierarchy → **#70** ✓.)_ _(audit-theme-design identity exemptions → **#69** ✓.)_ _(summer-day/night pair polish + status CSS + preview recapture → shipped 2026-07-10: JSON SoT, status states, theme-shot previews for executive-slate + neon-glass.)_ _(Identity taste retunes + hand `btop.theme` for white/vantablack/lumon/ hackerman/matte-black/miasma/neon-glass/boreal/executive-slate → shipped 2026-07-10.)_ ### Docs / narrative _(Omarchy migrant one-pager → shipped 2026-07-10 as **#78**: `docs/OMARCHY.md` — config-model shift, install, bindings, theming, packages, update/rollback; verified commands/slugs/binds.)_ ### v1.0 pointer See **VISION**. Shipped: doctor hibernate #77, Omarchy migrant doc #78. Open PROPOSED: auto time-of-day theme pair (`§D`, big); NVIDIA wrappers deferred past v1; IR portal (b)/(c) hardware. Browser default = Chromium; power = PPD. ## Decisions `[human]` Open calls only Bernardo can make; agents add options/evidence but never decide. **Resolved** entries stay for history; agents treat them as closed. ### Resolved (2026-07-10) - **Docs site vs Markdown-in-repo** — **markdown in-repo for now** (`docs/`, README). A rendered docs site is FUTURE if wanted. - **Default browser** — **ship Chromium** in `templates/downstream/home.nix`; mime → `chromium-browser.desktop`. Opt out: delete the line / override mime. - **Default power backend** — **keep PPD** (`nomarchy.system.power.backend` default). TLP remains the one-line opt-in. Rationale: stability + live profile API for menu/Waybar; Omarchy’s TLP experiment reverted. ### Resolved (2026-07-10, more) - **Formatter adoption** — **yes, but not now.** Tracked as FUTURE (below). Nix-source style only (`nixfmt-rfc-style` or similar); one bulk reformat + CI/check when promoted. Until then: hand-aligned style per CONVENTIONS. - **Hibernation** — **want by default** (product intent). Needs a disk-backed swap (file or partition) sized for resume; not zram alone. Implementation is a future/NEXT item when designed (installer + resume device + encrypted-root story). ### Resolved (2026-07-10, #76 design) - **Swap sizing** — **exactly RAM** (installer default, unchanged). Hibernate image ≤ RAM; zram takes day-to-day paging. **`swapSize=0`** stays no-swap. - **Migration** — **docs runbook** (`docs/MIGRATION.md`), not a tool. - **No-swap Hibernate** — keep the menu row; **notify on failure**.