Asi nix-acset-worlding
Model Nix store as Attributed C-Set for dependency verification, GC analysis,
install
source · Clone the upstream repo
git clone https://github.com/plurigrid/asi
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/plurigrid/asi "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/nix-acset-worlding" ~/.claude/skills/plurigrid-asi-nix-acset-worlding-55bf9a && rm -rf "$T"
manifest:
skills/nix-acset-worlding/SKILL.mdsource content
Nix ACSet Worlding Skill
Trit: -1 (MINUS) - Constraint verification of Nix store semantics
Model Nix store as Attributed C-Set for dependency verification and world management.
Schema
@present SchNixStore(FreeSchema) begin (Path, Hash, Name, Type, World)::Ob path_hash::Hom(Path, Hash) path_name::Hom(Path, Name) path_type::Hom(Path, Type) depends_on::Hom(Path, Path) belongs_to::Hom(Path, World) hash_value::Attr(Hash, String) # 32-char base32 name_value::Attr(Name, String) type_value::Attr(Type, Symbol) # :drv, :out, :source, :patch world_name::Attr(World, String) size_bytes::Attr(Path, Int) is_dead::Attr(Path, Bool) end
Core Operations
1. GC Root Analysis
function live_roots(store::NixStoreACSet) filter(p -> !store[:is_dead][p], parts(store, :Path)) end function dead_paths(store::NixStoreACSet) filter(p -> store[:is_dead][p], parts(store, :Path)) end
2. World Management
Flox environments as categorical worlds:
World := {name, dev_env, run_env, manifest}
Live worlds (2024-12-24):
- Audio/visual synthesismusic-topos
- Stellar generatorsstellogen
- Rust game enginebevy_fullscreen_app
- HoTT proof assistantcubical-agda
3. Dependency Sheaf
Dependencies form a sheaf over the store graph:
function dependency_sheaf(store::NixStoreACSet) # Check transitive closure consistency for p in parts(store, :Path) deps = store[:depends_on][p] for d in deps @assert haspart(store, :Path, d) end end end
Integration with Gay.jl
Hash → Color Mapping
function hash_to_color(hash::String) seed = parse(UInt64, hash[1:16], base=32) gay_color(seed ⊻ GAY_SEED) end
GC Statistics (2024-12-24 Snapshot)
| Metric | Value |
|---|---|
| Dead paths | 299 |
| Reclaimable | 3.9 GB |
| Live roots | 17 |
| Worlds pruned | 5 |
Triadic Composition
nix-acset-worlding (-1) ⊗ flox-envs (0) ⊗ world-hopping (+1) = 0 ✓ nix-acset-worlding (-1) ⊗ structured-decomp (0) ⊗ gay-mcp (+1) = 0 ✓
Commands
# Snapshot current store nix-store --gc --print-roots > roots.txt nix-store --gc --print-dead > dead.txt # Build ACSet from snapshot julia -e 'using NixACSet; build_from_snapshot("dead.txt")' # Verify dependency sheaf julia -e 'using NixACSet; verify_sheaf(load_store())'
Categorical Semantics
Nix Store as Topos
- Objects: Store paths
- Morphisms: Dependencies (derivation → output)
- Subobject classifier: Ω = {live, dead, gc-protected}
Pullback for Conflict Detection
P ──────→ A │ │ ↓ ↓ B ──────→ C
When two derivations depend on conflicting versions:
- P = empty → conflict detected
- P ≠ empty → shared dependency
References
- Dolstra - Nix: A Safe and Policy-Free System for Software Deployment
- Eelco - The Purely Functional Software Deployment Model
- ACSets.jl - Attributed C-Sets for algebraic databases
- Gay.jl - Deterministic coloring for store visualization