fix: ground + fix three Pillar-9 candidate bugs from the script sweep
All checks were successful
Check / eval-and-lint (push) Successful in 6m40s
All checks were successful
Check / eval-and-lint (push) Successful in 6m40s
All three confirmed real on inspection.
1. nomarchy-refresh-config was dead on every system: it read
/etc/nixos/nomarchy/{core/home/config,features} (the source tree never
lands there — only /etc/nomarchy on VM-guest/live ISO) and fell back to
~/.local/share/nomarchy/config, which nothing deployed despite SKILL.md
documenting it. Deploy the pristine core/home/config tree to
~/.local/share/nomarchy/config via xdg.dataFile and read from there, so it
works without a source checkout; its live caller nomarchy-refresh-fastfetch
now succeeds. Fix two stale SKILL.md examples (waybar/, hypr/) that pointed
at non-existent stock paths.
2. nomarchy-docs-scripts shipped a stale divergent copy in
features/scripts/utils/ (in the user nomarchy-system-scripts package)
beside the canonical bin/utils dev tool — it errored outside the repo.
Grounding it surfaced the identical bug in nomarchy-docs-keybindings.
Delete both duplicates, add them to the generator's self-reference
denylist so they don't show as false `missing`, regenerate docs/SCRIPTS.md.
3. Home ~/.config/nomarchy/state.json was never seeded on non-installer
systems, so nomarchy-installed-summary rendered "—" for theme/font/panel.
Add an idempotent home-manager activation seed in core/home/state.nix that
backfills the resolved values (defaults * existing — user choices and
runtime-only keys like welcome_done always win).
Verified: flake check + full eval matrix clean; refresh-config happy/error
paths and the seed deep-merge proven by hand.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
{ config, lib, ... }:
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
nomarchyLib = import ../../lib { inherit lib; };
|
||||
@@ -12,6 +12,19 @@ let
|
||||
|
||||
# Read unified state from ~/.config/nomarchy/state.json
|
||||
togglesState = nomarchyLib.readHomeState config.home.homeDirectory;
|
||||
|
||||
cfg = config.nomarchy;
|
||||
# The resolved values, in state.json's on-disk shape. Seeded into the file
|
||||
# so runtime consumers (nomarchy-installed-summary, the setters) see the
|
||||
# real defaults instead of a missing key — without this the summary shows
|
||||
# "—" for theme/font/panel on any system the installer didn't write to.
|
||||
seedJSON = builtins.toJSON {
|
||||
inherit (cfg) theme wallpaper panelPosition nightlightTemperature;
|
||||
font = cfg.fonts.monospace;
|
||||
inherit (cfg.toggles) suspend screensaver idle nightlight waybar;
|
||||
inherit (cfg.hyprland) gaps_in gaps_out border_size;
|
||||
};
|
||||
stateFile = "${config.home.homeDirectory}/.config/nomarchy/state.json";
|
||||
in
|
||||
{
|
||||
# Every assignment uses lib.mkDefault so a downstream /etc/nixos/home.nix
|
||||
@@ -48,5 +61,23 @@ in
|
||||
inherit assetsPath;
|
||||
});
|
||||
};
|
||||
|
||||
# Backfill any state.json key the user hasn't set. Existing values always
|
||||
# win (`defaults * existing`), so a user's theme/font/etc. and any
|
||||
# runtime-only keys (welcome_done, …) are never clobbered — this only
|
||||
# fills the gaps so the file reflects the system's actual defaults.
|
||||
home.activation.seedNomarchyState = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||
run mkdir -p "$(dirname ${lib.escapeShellArg stateFile})"
|
||||
tmp="$(${pkgs.coreutils}/bin/mktemp)"
|
||||
# Build the next file contents in $tmp first; only the final move is
|
||||
# guarded by `run` so a dry-run never mutates the real state file.
|
||||
if [ -e ${lib.escapeShellArg stateFile} ]; then
|
||||
${pkgs.jq}/bin/jq -n --argjson d ${lib.escapeShellArg seedJSON} \
|
||||
--slurpfile s ${lib.escapeShellArg stateFile} '$d * $s[0]' > "$tmp"
|
||||
else
|
||||
printf '%s\n' ${lib.escapeShellArg seedJSON} > "$tmp"
|
||||
fi
|
||||
run mv "$tmp" ${lib.escapeShellArg stateFile}
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user