From fdd74a0e4f07e822c2bb1cf564dcbe7cfdabc19b Mon Sep 17 00:00:00 2001 From: Bernardo Magri Date: Tue, 2 Jun 2026 18:49:43 +0100 Subject: [PATCH] fix(installer): resolve /etc/nomarchy symlink before getFlake MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `generate_state` loads `nixpkgs.lib` for the state-schema eval via `builtins.getFlake "$NOMARCHY_REPO"`. On the live ISO that path is a symlink chain (/etc/nomarchy -> /etc/static/nomarchy -> /nix/store/…-source), and Nix 2.31+ rejects getFlake on a symlink ("path '…-source' is a symlink"), aborting every real-hardware install right after hardware config generation — single or multi disk. Resolve the repo to its real store directory with `realpath` at detection so getFlake receives a plain directory. The dev-checkout branch already used realpath, so only the live-ISO path was affected. Reproduced and fixed in a live VM (Nix 2.31.4). Co-Authored-By: Claude Opus 4.8 --- docs/ROADMAP.md | 1 + installer/install.sh | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index bd533c3..6da628c 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -177,6 +177,7 @@ Pillar is **done** when every component has had a live VM pass and the roadmap c (Move items here when they land — keep them brief, link the commit/PR.) +- _2026-06-02_ — **Installer: real-hardware install was broken at "Creating system configuration" (every install, single or multi disk).** `generate_state` evaluates `lib/state-schema.nix` by calling `builtins.getFlake "$NOMARCHY_REPO"` to load `nixpkgs.lib`, with `NOMARCHY_REPO=/etc/nomarchy`. On the live ISO that's a symlink chain (`/etc/nomarchy → /etc/static/nomarchy → /nix/store/…-source`), and Nix 2.31+ rejects `getFlake` on a symlink path (`error: path '…-source' is a symlink`) — aborting the install right after hardware config generation. Reproduced the exact error in a live VM (Nix 2.31.4). **Fix:** resolve the repo to its real store directory with `realpath` at detection (`install.sh:261`). The dev-checkout branch already used `realpath`, so only the live-ISO path was affected. Verified the resolved path makes `getFlake` + the state-schema eval succeed in-VM. - _2026-05-31_ — **Ironclad: Overlap & Conflict Proofing complete.** Verified that manual Nix overrides in `home.nix` take precedence over UI choices without causing evaluation errors. **Fixed:** Updated `nomarchy-sync-nix-state` and the installer to wrap all machine-generated values in `nomarchy-state.nix` with `lib.mkDefault`. This ensures a user can manually set `nomarchy.theme = "catppuccin"` in their config, safely overriding the UI state without triggering "conflicting definition values" errors in the module system. - _2026-05-31_ — **Ironclad: Input Method (Fcitx5) Functional Pass complete.** Verified that non-ASCII input (Pinyin/Mozc) is functional in the live VM. **Fixed:** Enabled `i18n.inputMethod.fcitx5.waylandFrontend = true` in `core/system/input-method.nix` to properly bind Fcitx5 to the Wayland text-input protocol, resolving missing environment variable issues and ensuring the candidate window renders correctly in Hyprland. - _2026-05-31_ — **Ironclad: Multi-Monitor Integrity complete.** Verified Hyprland, Waybar, and Walker behavior on dual-screen setups (simulated via dual `virtio-vga` VM devices). **Fixed:** Removed a hardcoded `"output": "DP-2"` parameter from the `summer-day` Waybar configuration, ensuring the bar spawns seamlessly across all connected monitors. Confirmed Walker inherently follows the active monitor as expected. diff --git a/installer/install.sh b/installer/install.sh index ce974dd..375857e 100755 --- a/installer/install.sh +++ b/installer/install.sh @@ -257,9 +257,14 @@ check_environment() { fi success "UEFI boot detected" - # Find Nomarchy repo + # Find Nomarchy repo. Resolve symlinks: on the live ISO /etc/nomarchy is a + # symlink chain (/etc/nomarchy -> /etc/static/nomarchy -> /nix/store/…-source). + # `builtins.getFlake` (used below to load nixpkgs.lib for the state-schema + # eval) rejects a symlink path with "path '…-source' is a symlink" on Nix + # 2.31+, which aborted every real-hardware install at "Creating system + # configuration". Pass it the resolved store directory instead. if [[ -d "/etc/nomarchy" ]]; then - NOMARCHY_REPO="/etc/nomarchy" + NOMARCHY_REPO="$(realpath /etc/nomarchy)" elif [[ -d "$(dirname "$0")/.." ]] && [[ -f "$(dirname "$0")/../flake.nix" ]]; then NOMARCHY_REPO="$(realpath "$(dirname "$0")/..")" fi