refactor(#107): theme-state.json → state.json, theme-sync → state-sync
Some checks failed
Check / eval (push) Has been cancelled

The machine flake's git-tracked settings file is system state, not
"theme" only — rename it to state.json. CLI becomes nomarchy-state-sync
with a nomarchy-theme-sync symlink for scripts and muscle memory.

Eval (mkFlake, doctor, lifecycle) still accepts theme-state.json; the
next write migrates to state.json and removes the legacy file.
Documented in MIGRATION.md; drop the CLI alias after release notes.
This commit is contained in:
2026-07-15 11:26:59 +01:00
parent 013403deb4
commit d8e1a13d50
62 changed files with 463 additions and 369 deletions

View File

@@ -0,0 +1,54 @@
{ lib
, stdenvNoCC
, python3
, makeWrapper
, awww
, libnotify
, git
# Shipped theme presets, baked into the package as a fallback so
# `list`/`apply` work even when $NOMARCHY_PATH has no themes/ dir.
, themesDir ? null
}:
stdenvNoCC.mkDerivation {
pname = "nomarchy-state-sync";
version = "0.5.0";
src = ./.;
nativeBuildInputs = [ makeWrapper ];
buildInputs = [ python3 ];
installPhase = ''
runHook preInstall
install -Dm755 nomarchy-state-sync.py $out/bin/nomarchy-state-sync
patchShebangs $out/bin/nomarchy-state-sync
${lib.optionalString (themesDir != null) ''
mkdir -p $out/share/nomarchy
cp -r ${themesDir} $out/share/nomarchy/themes
''}
# Stdlib-only Python. home-manager is deliberately NOT wrapped in
# the rebuild must use the user's own home-manager from their PATH.
wrapProgram $out/bin/nomarchy-state-sync \
--prefix PATH : ${lib.makeBinPath [ awww libnotify git ]} \
${lib.optionalString (themesDir != null)
"--set NOMARCHY_DEFAULT_THEMES $out/share/nomarchy/themes"}
# #107: old CLI name kept as a symlink so muscle memory and scripts
# survive a pull (drop after the next stable release notes say so).
# After wrapProgram so it points at the wrapper, not the raw script.
ln -s nomarchy-state-sync $out/bin/nomarchy-theme-sync
runHook postInstall
'';
meta = {
description = "Nomarchy state writer + Home Manager rebuild dispatcher";
license = lib.licenses.mit;
mainProgram = "nomarchy-state-sync";
platforms = lib.platforms.linux;
};
}