fix(install): bake dconf, seed main, name ISO, display modes (#123–#126)
Some checks failed
Check / eval (push) Has been cancelled
Some checks failed
Check / eval (push) Has been cancelled
Batch of existing-bug fixes from Acer/XPS install findings: - #123: HM pre-activate creates /run/user/$UID and prefers dbus-run-session so dconf no longer aborts the desktop bake - #124: main-built ISOs seed ?ref=main; patch-template rewrites inputs.nomarchy.url from NOMARCHY_FLAKE_URL (was set but unused) - #125: image.baseName → nomarchy-live-….iso (not nixos-live-…) - #126: Display mode list sorted by pixel area; toast shows hyprctl size; TESTING notes QEMU fixed-window scaling illusion Verified: V0 flake check, installer-safety, baseName eval, patch-template flakeUrl rewrite, mode-sort fixture.
This commit is contained in:
144
agent/BACKLOG.md
144
agent/BACKLOG.md
@@ -31,150 +31,6 @@ post-boot sessions). Preserve separation: the installer bake failure and the
|
||||
flake pin are different root causes even when they show up on the same machine.
|
||||
(Terminal / Ghostty-on-Acer → shipped as Kitty-only, #95.)
|
||||
|
||||
### 125. Live/install ISO artifact is still named `nixos-…`
|
||||
|
||||
**Observed:** a built live image lands as e.g.
|
||||
`result/iso/nixos-live-26.05.20260710.8f0500b-x86_64-linux.iso` — users (and
|
||||
USB writers) still see **NixOS**, not Nomarchy.
|
||||
|
||||
**Already branded elsewhere:** `isoImage.volumeID = "NOMARCHY_LIVE"`,
|
||||
`isoImage.edition = "live"`, splash/GRUB theme, `system.nixos.distroName` /
|
||||
`distroId = "nomarchy"` (os-release). The **filename** comes from
|
||||
`image.baseName` / `image.fileName` (nixpkgs ISO module; formerly
|
||||
`isoImage.isoBaseName` / `isoName`), which still default to the NixOS
|
||||
template prefix.
|
||||
|
||||
**Fix direction:** set `image.baseName` (or the current nixpkgs equivalent)
|
||||
to something like `nomarchy-live` in `hosts/live.nix` (and any install ISO
|
||||
target if split later). Confirm boot menu strings / isolinux labels if they
|
||||
still say NixOS after the rename. Guard: a cheap check or docs note that
|
||||
`result/iso/nomarchy-*.iso` is the expected path (TESTING / README build
|
||||
snippet).
|
||||
|
||||
**Pass:** `nix build …isoImage` produces a `nomarchy-…` ISO filename (not
|
||||
`nixos-…`); volume label and user-facing boot branding stay Nomarchy.
|
||||
|
||||
### 126. Display resolution picker: choosing higher modes makes the image smaller (live VM)
|
||||
|
||||
**Observed (Bernardo, live ISO in a VM):** System › Display resolution
|
||||
picker — the **higher** the listed mode he picked, the **lower** the
|
||||
on-screen resolution *appeared* (inverted / wrong mapping). Live session,
|
||||
not necessarily install.
|
||||
|
||||
**Code path:** `modules/home/rofi.nix` `display)` — builds a mode list from
|
||||
Hyprland tokens + `hyprctl monitors -j` → `.availableModes[]`, then
|
||||
`sort -rV -u`, applies with
|
||||
`hyprctl keyword monitor "$name,$mode,$pos,$scale"` and persists
|
||||
`settings.monitors.$name`.
|
||||
|
||||
**Likely causes to separate:**
|
||||
1. **Menu/sort bug** — labels or `sort -rV` on `WxH@R` strings don’t match
|
||||
what Hyprland applies (wrong mode string applied).
|
||||
2. **QEMU/viewer scaling** — guest mode really increases while the host
|
||||
window is fixed, so content *looks* smaller (not a Nomarchy bug; document).
|
||||
3. **Scale factor interaction** — keeping current `.scale` while changing
|
||||
mode on virtio-gpu yields surprising logical size.
|
||||
|
||||
**Fix direction:** reproduce in QEMU with `tools/test-live-iso.sh` (or
|
||||
manual), log `hyprctl monitors -j` before/after each pick, assert applied
|
||||
`width`/`height` match the chosen token. Fix sort/format if wrong; if pure
|
||||
viewer scaling, tell the user and optionally show current mode from
|
||||
`hyprctl` after apply. Prefer a permanent guard on mode-string formatting
|
||||
if the bug is in our list/apply path.
|
||||
|
||||
**Pass:** picking `1920x1080@…` yields a monitor at 1920×1080 (hyprctl);
|
||||
picking a lower mode yields lower; menu order is highest-first and honest.
|
||||
If the only inversion is QEMU window chrome, document it in TESTING.md and
|
||||
close with that finding — do not “fix” real hardware that was fine.
|
||||
|
||||
### 123. Installer HM pre-activate aborts on dconf / missing XDG_RUNTIME_DIR
|
||||
|
||||
**Seen on both machines** (Dell XPS 9350 and Acer M5-481T), same log shape at
|
||||
the end of `nomarchy-install` after "✓ System installed":
|
||||
|
||||
```
|
||||
— Baking the desktop —
|
||||
Building the desktop generation...
|
||||
▲ Desktop pre-activation failed (see /var/log/nomarchy-hm-preactivate.log
|
||||
on the installed system); after first login run:
|
||||
home-manager switch --flake ~/.nomarchy -b bak
|
||||
Activating dconfSettings
|
||||
dconf-CRITICAL **: Unable to create directory '/run/user/1001/dconf':
|
||||
Permission denied. dconf will not work properly.
|
||||
error: Could not connect: No such file or directory
|
||||
```
|
||||
|
||||
Install still reports success and offers reboot — so first boot lands on a
|
||||
**partial** Home Manager activation. That matches the post-boot pain Bernardo
|
||||
had to fix by hand on both boxes: **GTK theme looking wrong** (Stylix/dconf
|
||||
color-scheme never landed) and **missing nm-applet tray icon**
|
||||
(`services.network-manager-applet` is on in `modules/home/default.nix`, but
|
||||
only after a complete HM generation/activation). Do **not** file those as
|
||||
separate product bugs until this bake succeeds; re-check them as acceptance
|
||||
criteria of the fix.
|
||||
|
||||
**Root cause (code path):** `pkgs/nomarchy-install/nomarchy-install.sh`
|
||||
"Baking the desktop" runs `$out/activate` via `runuser` inside `nixos-enter`.
|
||||
There is no user session: `/run/user/$UID` is missing or unwritable, so the
|
||||
dconf activation step dies and the scripted activate aborts mid-way. #83
|
||||
already surfaces the recovery one-liner; the *bake itself* is what is broken.
|
||||
|
||||
**Fix direction:** before `runuser … activate`, create a private runtime dir
|
||||
the target user owns (`mkdir -p /run/user/$UID && chown`, export
|
||||
`XDG_RUNTIME_DIR`), and/or give activate a session bus if dconf still needs
|
||||
one. Prefer making pre-activate succeed over papering over dconf. Keep the
|
||||
existing failure hint for genuine failures.
|
||||
|
||||
**Pass:** a `tools/test-install.sh` (or equivalent) run ends with
|
||||
"Desktop pre-activated — first boot is fully themed", **not** the dconf
|
||||
CRITICAL; `/var/log/nomarchy-hm-preactivate.log` is absent or clean; first
|
||||
graphical login has Stylix GTK theming + nm-applet in the tray **without** a
|
||||
manual `home-manager switch`. V3: same on at least one of the two boxes that
|
||||
regressed (HARDWARE-QUEUE).
|
||||
|
||||
### 124. Install seeds `?ref=v1` while writing main-era config (and v1 lags hard)
|
||||
|
||||
**Seen on Acer after install** (and inherent in every current install):
|
||||
|
||||
- ISO was built from **main**.
|
||||
- Generated `~/.nomarchy/flake.nix` still has
|
||||
`inputs.nomarchy.url = "…?ref=v1"` (`templates/downstream/flake.nix` +
|
||||
`flake.nix` `flakeUrl` / `originalNode.ref = "v1"`).
|
||||
- Installer **also** writes live `nomarchy.hardware.*` lines into
|
||||
`system.nix` (`patch-template.py` — e.g. `nomarchy.hardware.intel.enable`).
|
||||
- `v1` is far behind main (hundreds of commits; currently lacks the modern
|
||||
`nomarchy.hardware` surface). After a pull / lock re-resolve to the forge,
|
||||
rebuild dies with:
|
||||
|
||||
```
|
||||
error: The option 'nomarchy.hardware' does not exist.
|
||||
… intel = { enable = true; };
|
||||
Did you mean 'nomarchy.services' or 'nomarchy.system'?
|
||||
```
|
||||
|
||||
So a main-built ISO writes config that **only main understands**, then points
|
||||
the machine at a release branch that does not have those options. Offline
|
||||
compose-lock papers over first boot (path-locked to the ISO store), but the
|
||||
first intentional update re-resolves to ancient v1 and the machine breaks.
|
||||
|
||||
**Product tension:** the standing branch model is "downstreams pin `v1`"
|
||||
(ROADMAP / CONVENTIONS) — correct once `v1` is a real release pointer. While
|
||||
`v1` lags development this hard, **installs from a main ISO must not leave
|
||||
users on that lagging ref**.
|
||||
|
||||
**Fix direction (pick one and document):** (a) ISO build injects the ref the
|
||||
image was built from (`main` or `v1`) into the template + `flakeUrl`; (b) pin
|
||||
`original` to the exact ISO `rev` and only advance on explicit
|
||||
`nomarchy-pull`; (c) stop writing options that do not exist on the pinned
|
||||
ref (worse — loses hardware enablement). Prefer (a) or (b).
|
||||
|
||||
**Pass:** a machine installed from a main-built ISO has a flake whose nomarchy
|
||||
input evaluates the same option surface the installer wrote (no
|
||||
`nomarchy.hardware does not exist` on `nomarchy-rebuild` / first pull policy
|
||||
as documented); a release ISO built from `v1` still pins `v1`. Guard: install
|
||||
safety / template check that written options ⊆ pinned module surface, or that
|
||||
the seeded ref matches the ISO source ref.
|
||||
|
||||
### 94. Live ISO/install: no default browser observed
|
||||
|
||||
**Progress 2026-07-13:** installed path VERIFIED at V1 — the exact HM
|
||||
|
||||
@@ -427,24 +427,18 @@ the **T14s** (webcam case).
|
||||
template installs). Firefox is deliberately absent; its absence is
|
||||
correct, not a miss.
|
||||
- [ ] **#123 install bake: first boot fully themed without manual HM switch**
|
||||
— after a fix for the dconf / XDG_RUNTIME_DIR abort lands, re-install
|
||||
(or re-run bake) on **either** the Acer M5-481T or the Dell XPS 9350.
|
||||
**Pass:** install ends with "Desktop pre-activated", no
|
||||
`dconf-CRITICAL` / `Permission denied` in
|
||||
— re-install from a main ISO (this commit+) on **either** the Acer
|
||||
M5-481T or the Dell XPS 9350. **Pass:** install ends with "Desktop
|
||||
pre-activated", no `dconf-CRITICAL` in
|
||||
`/var/log/nomarchy-hm-preactivate.log`, first graphical login has
|
||||
coherent Stylix GTK theming **and** nm-applet in the Waybar tray
|
||||
**without** running `home-manager switch` by hand. **Fail** = still
|
||||
need the recovery one-liner, or GTK/nm-applet still wrong until a
|
||||
manual switch (then the bake is still incomplete).
|
||||
Stylix GTK + nm-applet **without** hand `home-manager switch`.
|
||||
- [ ] **#95 Kitty-only terminal on Acer M5-481T** — after rebuild/install
|
||||
from main: SUPER+Return opens **themed Kitty**; System › Doctor opens
|
||||
a floating classed Kitty window. No Ghostty on PATH required.
|
||||
- [ ] **#124 flake pin after main-ISO install** — on a machine installed
|
||||
from a **main-built** ISO (post-fix): `~/.nomarchy/flake.nix`
|
||||
nomarchy input must not re-resolve to a lagging `v1` that lacks
|
||||
options the installer wrote. **Pass:** `nomarchy-rebuild` (and a
|
||||
deliberate pull policy as documented by the fix) does **not** die
|
||||
with `The option 'nomarchy.hardware' does not exist`.
|
||||
- [ ] **#124 flake pin after main-ISO install** — installed machine’s
|
||||
`~/.nomarchy/flake.nix` has `?ref=main` (not lagging v1). **Pass:**
|
||||
`nomarchy-rebuild` does not die with
|
||||
`The option 'nomarchy.hardware' does not exist`.
|
||||
|
||||
## AMD dev box only
|
||||
- [ ] **#118 smartd still runs where drives DO have SMART** (this commit) — the
|
||||
|
||||
@@ -19,6 +19,20 @@ Template:
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-15 — Fix batch #123–#126 (install bake, flake ref, ISO name, display)
|
||||
- **Task:** Fix-only NOW batch: #123 dconf pre-activate, #124 main flake
|
||||
seed, #125 ISO filename, #126 display mode list.
|
||||
- **Did:** (123) pre-activate creates `/run/user/$UID` + prefers
|
||||
`dbus-run-session -- activate`. (124) seed `?ref=main`; patch-template
|
||||
rewrites `inputs.nomarchy.url` from NOMARCHY_FLAKE_URL (was unused);
|
||||
template default main. (125) `image.baseName` → nomarchy-live-….iso.
|
||||
(126) sort modes by pixel area; toast shows hyprctl size; TESTING QEMU note.
|
||||
- **Verified:** V0 flake check; installer-safety; `image.baseName` eval
|
||||
`nomarchy-live-…`; patch-template flakeUrl rewrite; mode sort unit fixture.
|
||||
- **Pending:** V3 reinstall on Acer/XPS (#123/#124); optional full
|
||||
`test-install.sh` V2 when time allows.
|
||||
- **Next suggestion:** #112 disk-picker fd0, or V2 test-install for #123.
|
||||
|
||||
## 2026-07-15 — File #125 ISO name + #126 display resolution invert (no code)
|
||||
- **Task:** Bernardo: (1) installer ISO still named nixos; (2) live VM
|
||||
Display picker — higher modes made the screen look lower-res.
|
||||
|
||||
@@ -137,6 +137,19 @@ iteration would otherwise rediscover.
|
||||
without a hierarchy pass.
|
||||
|
||||
## Gotchas (cost a debugging session once)
|
||||
- **Installer HM pre-activate needs XDG_RUNTIME_DIR (+ session bus) (#123):**
|
||||
`runuser … activate` inside `nixos-enter` has no user session. Without
|
||||
`mkdir -p /run/user/$UID` owned by the install user and
|
||||
`XDG_RUNTIME_DIR` (prefer `dbus-run-session -- activate`), dconf dies
|
||||
with Permission denied and the bake aborts mid-way — first boot looks
|
||||
unthemed / missing nm-applet even though the system installed.
|
||||
- **ISO filename is `image.baseName` (#125):** volumeID alone does not rename
|
||||
`result/iso/…`; force `image.baseName` to `nomarchy-…` or the artifact
|
||||
stays `nixos-live-….iso`.
|
||||
- **Install flake ref must match the ISO branch (#124):** while `v1` lags
|
||||
`main`, seed `?ref=main` (and compose-lock original) from main-built ISOs;
|
||||
`NOMARCHY_FLAKE_URL` must actually rewrite `inputs.nomarchy.url` (was set
|
||||
but unused until #124).
|
||||
- Gum `filter` returns unmatched typed text by default; catalog-only pickers
|
||||
require `--strict` plus an independent exact-membership validation boundary.
|
||||
- Waybar `layer: top` renders above **even real-fullscreen windows** — the
|
||||
|
||||
Reference in New Issue
Block a user