fix(install): #54 safety guards + recovery hint
All checks were successful
Check / eval (push) Successful in 3m7s
All checks were successful
Check / eval (push) Successful in 3m7s
Offline compose-lock failure now fail-closes (reusing the cache.nixos.org probe) instead of falling back to a network `nix flake lock`; a disk-review warn fires when the target already carries Windows/BitLocker/NTFS/LUKS (before the wipe); account password requires ≥8 chars like LUKS; on HM pre-activate failure the installer drops a NOMARCHY-DESKTOP-NOT-THEMED.txt recovery hint in the target home so first login still shows the fix. Worktree agent; diff reviewed + cherry-picked. V0 flake check + V1 nomarchy-install build. Password ≥8 is V0-complete; the offline/NTFS/ pre-activate scenarios are V2-pending (crafted install runs). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -89,7 +89,9 @@ export NIX_CONFIG="flake-registry = $SHARE/registry.json"
|
||||
# substituter resolves to the TARGET store (i.e. itself), so without
|
||||
# this nothing flows from the ISO and nix bootstraps gcc from source.
|
||||
NIXOS_INSTALL_OPTS=()
|
||||
OFFLINE=false
|
||||
if ! timeout 3 bash -c '</dev/tcp/cache.nixos.org/443' 2>/dev/null; then
|
||||
OFFLINE=true
|
||||
info "No network — substituting from the ISO store only."
|
||||
NIX_CONFIG+=$'\nsubstituters =\nextra-substituters = daemon?trusted=1\nbuilders ='
|
||||
# Must ALSO go through nixos-install as a flag: it passes its own
|
||||
@@ -122,6 +124,15 @@ fi
|
||||
[[ -b "$TARGET_DISK" ]] || fail "$TARGET_DISK is not a block device."
|
||||
info "Target: $TARGET_DISK"
|
||||
|
||||
# Single whole-disk install only (no dual-boot path) — if the chosen disk
|
||||
# already carries a recognizable OS/filesystem signature, call it out
|
||||
# explicitly before the pre-wipe below destroys it.
|
||||
existing_sig="$(lsblk -no FSTYPE,LABEL "$TARGET_DISK" 2>/dev/null || true
|
||||
blkid "$TARGET_DISK"* 2>/dev/null || true)"
|
||||
if grep -qiE 'ntfs|bitlocker|microsoft|crypto_luks' <<< "$existing_sig"; then
|
||||
warn "$TARGET_DISK has existing data (Windows/BitLocker/NTFS or LUKS) — it will be destroyed."
|
||||
fi
|
||||
|
||||
# ─── Encryption ─────────────────────────────────────────────────────────
|
||||
section "Disk encryption"
|
||||
|
||||
@@ -181,8 +192,8 @@ else
|
||||
warn "Invalid username (lowercase letters, digits, - and _)."
|
||||
done
|
||||
while true; do
|
||||
PASSWORD=$(gum input --password --placeholder "password for $USERNAME")
|
||||
[[ -n "$PASSWORD" ]] || { warn "Empty password."; continue; }
|
||||
PASSWORD=$(gum input --password --placeholder "password for $USERNAME (min 8 chars)")
|
||||
[[ ${#PASSWORD} -ge 8 ]] || { warn "Too short (min 8 chars)."; continue; }
|
||||
p2=$(gum input --password --placeholder "repeat password")
|
||||
[[ "$PASSWORD" == "$p2" ]] && break
|
||||
warn "Passwords don't match."
|
||||
@@ -445,6 +456,9 @@ PYJSON
|
||||
# `nix flake update` on the installed machine re-resolves normally).
|
||||
if ! python3 "$SHARE/compose-lock.py" "$SHARE/flake.lock" "$FLAKE_DIR/flake.lock" \
|
||||
"$NOMARCHY_LOCKED_JSON" "$NOMARCHY_ORIGINAL_JSON"; then
|
||||
if [[ "$OFFLINE" == true ]]; then
|
||||
fail "Offline lock composition failed and there is no network to fall back to — cannot finish an offline install."
|
||||
fi
|
||||
warn "Offline lock composition failed — resolving over the network."
|
||||
(cd "$FLAKE_DIR" && nix --extra-experimental-features "nix-command flakes" flake lock)
|
||||
fi
|
||||
@@ -577,6 +591,20 @@ else
|
||||
warn "on the installed system); after first login run:"
|
||||
warn " home-manager switch --flake ~/.nomarchy -b bak"
|
||||
tail -n 5 /mnt/var/log/nomarchy-hm-preactivate.log 2>/dev/null || true
|
||||
# The live session (and this warning) ends with this install — drop a
|
||||
# durable hint on the TARGET so the fix still surfaces on first login.
|
||||
# Numeric ids: the account doesn't exist in the live environment yet
|
||||
# (same reasoning as the $FLAKE_DIR chown above).
|
||||
hint_file="/mnt/home/$USERNAME/NOMARCHY-DESKTOP-NOT-THEMED.txt"
|
||||
cat > "$hint_file" <<HINT
|
||||
Desktop pre-activation failed during install — see
|
||||
/var/log/nomarchy-hm-preactivate.log for details. Finish it with:
|
||||
|
||||
home-manager switch --flake ~/.nomarchy -b bak
|
||||
|
||||
(delete this file once done)
|
||||
HINT
|
||||
chown 1000:100 "$hint_file"
|
||||
fi
|
||||
rm -f /mnt/root/nomarchy-hm-activate.sh
|
||||
|
||||
|
||||
Reference in New Issue
Block a user