Drop shipped #52 high-ROI theme bullets, neon-glass quarantine, empty installer audit sections, resolved template seed drift, and #50 soft gaps. PROPOSED is open work only (day-2, installer follow-ups, theme polish residuals, tooling).
10 KiB
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; design history
in docs/ROADMAP.md; map in
docs/README.md and agent/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 § …orROADMAP § …when relevant); only Bernardo moves items out of PROPOSED into the tiers.
NOW
(empty — NEXT's top item is the queue head)
NEXT
20. KVM runner → VM suite in CI [human]
The remaining stretch of the CI item — checks-on-push is live and
green (run #58; runner = gitea/act_runner docker, eval tier).
Register a second runner on a host with /dev/kvm + nix (host-mode
label nix-kvm), then an agent uncomments the workflow's vm-checks
job: the checks.* VM suite + real toplevel/HM builds on every push
that later upgrades the bump gate from eval-only to the full suite.
41. Floating-window audit — residual GTK portal class [blocked:hw]
(Raised by Bernardo, 2026-07-07 — item 11.) Conservative cut + 2026-07-10
slice shipped: mixer, blueman, system-config-printer, calendar,
hyprpolkitagent + pinentry-qt (classes from package app-id
strings; softGL capture harness could not materialize dialogs).
Still open: GTK file-chooser portal (xdg-desktop-portal-gtk) —
class not discoverable headlessly. On hardware: open a portal file
picker, hyprctl clients, append float/center rules if needed; confirm
polkit/pinentry/blueman actually float.
LATER
- Wallpapers artifact split (ROADMAP § Faster switches — decided,
deferred): pinned
Nomarchy-wallpapersinput 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).
- Per-theme icon overrides / more icon packs (ROADMAP § Icon themes).
- 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).
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
-
Battery charge-limit — make the toggle instant
[blocked:hw]Menu/CC writesettings.power.batteryChargeLimitbut need a rebuild. Instant path: udev group-writablecharge_control_end_thresholdon system batteries + liveechoalongside state persist. Decide first whether a local user may set the charge cap. Cost: medium; hw confirm. -
Portal/Flatpak IR camera still listed (libcamera path). WirePlumber v4l2 hide is shipped; Flatpak Zoom can still pick the IR node. Options: (a) document; (b) libcamera monitor rule; (c) udev/libcamera quirk. Rec: (a) until T14s session. Cost: (b)/(c)
[blocked:hw]. -
Post-install hardware hints residual — #43 shipped Firmware MOTD; still open: fingerprint + doctor one-liners (once/dismissible). Cost: small; V2/V3.
-
Look & Feel submenu (ROADMAP optional) — night-light, wallpaper cycle, blur/gaps with Theme; root stays six entries. Product call.
-
NVIDIA first-class options
[big][blocked:hw]— thinnomarchy.hardware.nvidia.*only with hybrid maintainer + queue. Prefer shipped #59 commented guidance until then.
Installer / template
-
Installer ↔ template SoT follow-ups — core copy+patch shipped. Remaining: (1) optional CI that install share matches template; (2) V2
test-install.shafter ISO rebuild (larger HM pre-activate closure). Cost: CI + KVM time. -
Installer soft gap: chown flake dir —
chown -R 1000:100assumes first-user UID/GID. Cost: small. (usbutils PATH + flake package exports → #50 ✓.) -
MIGRATION.md snapshot layout — still says top-level
@home-snapshots; installer uses@snapshots+ nested/home/.snapshots. One clarifying paragraph. Cost: docs only. -
Unattended-install test matrix — document/script no-swap and no-LUKS paths in
test-install.sh(env flags only). Cost: script + KVM. Do not grow the interactive installer. -
Fail-closed / friendlier theme-state errors in
mkFlake— missing or invalidtheme-state.jsonshould point at schema/docs early. Related:settings.displayProfile*defaults, unknown border role. Cost: medium lib UX.
Theme polish
-
#52 residual ANSI — after high-ROI fixes: vantablack
ansi[8]still#fdfdfd(diverges frommuted #666666); osaka-jadeansi[3]still warn-green#459451whilewarnis#E5C736. Decide identity vs bug per theme. Cost: tiny JSON; V0 contrast. -
summer-day / summer-night pair polish — waybar CSS vs JSON dual SoT; night
subtext=muted=overlay; day/night font + battery threshold + VPN pill drift. Pick JSON as SoT (or document EF split). Cost: CSS/JSON; V3. -
summer-* CSS status module states — missing
.on/.available/.recordingpolish vs boreal/generated. Cost: CSS; V3. -
theme preview recapture nicety — executive-slate + neon-glass previews are bare desktop+bar, not the floating-terminal composition of the other 21; optional identity
btop.themes. Cost: asset/V3. -
Fidelity / hierarchy nits (popular ports) — gruvbox Material vs classic name+btop split; nord inverted subtext/text; tokyo-night btop warm fg; ethereal surface=base; retro-82 surface darker than base; ristretto subtext=text + btop bg drift; flexoki-light bright-black. Cost: small JSON/btop each; V0–V1.
-
Identity optional taste retunes — white / lumon / hackerman / matte-black / miasma hierarchy or status L-steps only (no traffic-light forced on identity themes). Product call per theme.
-
Import pipeline hierarchy when ANSI 0==8 —
import-palettes.pycollapses surface/overlay; light themes get sludge mantle. Allow role overrides independent of ANSI. Cost: tool + convention. -
audit-theme-design identity exemptions — document expected CVD/ hue noise for white/vantablack/lumon/hackerman/matte-black/miasma. Cost: docs or small script.
v1.0 pointer
See VISION for release bar. Day-2 surfaces largely shipped (#43–#45, #55–#58). Remaining product-ish PROPOSED: charge-limit instant, IR portal doc, first-boot hint residual, theme polish above.
Decisions [human]
Open calls only Bernardo can make; agents add options/evidence but never decide.
-
Formatter adoption: repo deliberately has none;
nixfmt-rfc-stylewould flatten the aligned hand-formatting of ~33 files. Adopt or declare never? -
Docs site vs Markdown-in-repo (from the docs-review item).
-
zram swap: faster under pressure and pairs with NOW#3, but it interacts with the hibernation-swapfile story (resume device/priority ordering) — adopt, adopt-with-hibernation-guard, or skip?
-
Default browser: the template comments Firefox out. The shipped mime defaults (item 8, done) point
text/html/http(s) atfirefox.desktopas inert entries — they activate the moment Firefox is installed and are skipped otherwise, so the remaining call is only: ship a browser active in the suite, or stay browserless-by-default? -
Default power backend — PPD vs TLP: (raised by Bernardo 2026-07-08: would TLP be more power-efficient, and should it be the default?) TLP does get more idle battery life, but only from device-level knobs PPD deliberately omits — PCIe ASPM, disk/NVMe link PM, USB autosuspend, runtime PM — which are the same knobs behind NVMe/USB flakiness that pillar 1 (rock-stable, never fight your machine) guards against. Evidence (2026-07-08): no credible hard-watt benchmarks exist — TLP's own maintainer declines to quote any ("measure on your hardware") and says PPD's power-saver gives similar savings under load; TLP's edge is idle-only (linrunner.de/tlp/faq/ppd.html — PPD covers a subset of TLP, "no settings to reduce consumption when the CPU is idle"). Our sibling distro Omarchy ran this exact experiment — a "replace Power Profiles with TLP for battery" guide — and the author reverted to PPD ("more headaches and weird issues"); Omarchy shipped PPD auto-switching instead (basecamp/omarchy#3907). PPD 3.4.0 now does AC/battery auto-switching, closing part of TLP's UX gap. Cost of TLP-default: TLP has no live D-Bus profile API, so the
powermgmtmenu + Waybar profile indicator + low-battery auto power-saver (allpowerprofilesctl) would need a rework — it's not a one-line backend swap. Agent rec (evidence, not a decision): keep PPD default; chase battery via targeted low-risk tweaks (PCIe ASPM policy, battery-side EPP, the charge start threshold, PPD auto-switching) and keep TLP the documented one-line opt-in it already is (nomarchy.system.power.backend = "tlp"). Options: (i) status quo + targeted tweaks [rec]; (ii) TLP default (reworks the profile UX); (iii) nothing.