fix(install): bake dconf, seed main, name ISO, display modes (#123–#126)
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:
2026-07-15 09:58:53 +01:00
parent 25e498a5ef
commit 748d4af414
13 changed files with 118 additions and 178 deletions

View File

@@ -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 dont 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

View File

@@ -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 machines
`~/.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

View File

@@ -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.

View File

@@ -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