Day 77 — Ecosystem map

Updated

July 30, 2026

Day 77 — Ecosystem map

Stage VII · ~4h
Goal: Map the adjacent tooling landscape, try exactly one of devenv / Snowfall / nix-darwin in a disposable trial, and write a keep/drop decision against your flake layout—without rewriting Capstone mid-flight.

Note

Syllabus rule: try one, don’t collect all. Tool tourism is how 90-day programs die on day 77.

Why this day exists

By now your layout is intentional: flake hosts, modules, HM, deploy, tests. The ecosystem constantly offers frameworks that promise less boilerplate. Some are worth it; many are expensive rewrites. Experts sample with a comparison table, not a weekend migration of Capstone main.


Theory 1 — Layers of “ecosystem”

Layer Examples Problem they target
Devshell UX devenv, devbox, nix develop, direnv Fast project environments
Flake structure frameworks flake-parts, Snowfall, digga (legacy) Scale modules/systems/homes
Darwin / non-NixOS nix-darwin, HM standalone Same declarative story on macOS
Deploy deploy-rs, Colmena, nixinate Already in Stage VI
Secrets sops-nix, agenix Already in Stage IV
Caches Cachix, Attic, Harmonia Stage V–VI
Install / metal nixos-anywhere, disko, images Stage VI
UX wrappers nh, nixos-rebuild-ng experiments Faster day-2 commands
Editors / templates templates repos, blueprint flakes Speed of scaffolding

Today’s forced choice is among devenv, Snowfall, nix-darwin—three different layers. Pick the one that matches your pain:

If your pain is… Prefer trying
Polyglot project shells, services in dev devenv
Many hosts/homes, naming convention fatigue Snowfall (or double-down on flake-parts you may already use)
You live on macOS half the time nix-darwin
None of the above Still pick one; learn by contrast

Theory 2 — devenv (project environments)

What it is: A Nix-powered dev environment tool (CLI + modules) focused on languages, processes, pre-commit, and local services—closer to “compose for dev” than to NixOS hosts.

Typical win: New contributors run one tool and get DB + language toolchain.

Typical cost: Another module system dialect; CI must speak devenv; overlap with devShells you already have (Day 28).

# illustrative — follow current devenv docs for install
# nix profile install nixpkgs#devenv
# devenv init
# devenv shell

Compare to house default

Concern nix develop + direnv devenv
Mental model Flake devShells devenv modules + CLI
Services (postgres…) Manual / process-compose DIY First-class modules often
Capstone impact Low if already working Medium if dual standards

Theory 3 — Snowfall (flake library / structure)

What it is: A convention-heavy library for laying out flakes: systems, modules, packages, homes under standard paths, auto-discovery.

Typical win: Multi-host monorepos with consistent naming and less flake.nix glue.

Typical cost: Framework lock-in; debugging indirection; migration of a working hand layout (Days 23–29).

Compare to flake-parts

Concern Hand layout / flake-parts Snowfall
Structure Explicit imports Convention + library
Learning Your code is visible Magic paths
Capstone rewrite cost Low if already structured Often high mid-flight

Snowfall and flake-parts both attack “structure,” differently. Trying Snowfall does not require abandoning flake-parts forever—decision is local.


Theory 4 — nix-darwin

What it is: Nix modules for macOS system configuration—spiritual cousin of NixOS modules, not a Linux VM.

Typical win: One repo language for laptop (Darwin) + servers (NixOS) + Home Manager.

Typical cost: Darwin modules ≠ NixOS modules; GUI/casks world; CI harder; not a substitute for your lab VM.

# only on a Mac you own — follow current nix-darwin + flakes docs
# darwin-rebuild switch --flake .#hostname

If you have no Mac, you may still read a nix-darwin sample config and write a comparison—or pick devenv/Snowfall for a hands-on trial instead.

Shared idea Divergence
Module options, activation Different option trees
HM integration common GUI apps / Homebrew friction
Flakes Same pin discipline

Theory 5 — Decision framework (keep/drop)

Score 1–5 for your context:

Criterion Weight idea
Reduces your real weekly pain High
Clear primary docs High
Plays with flakes + lock discipline High
Compatible with sops/deploy/tests High
Rewrite cost of Capstone Critical penalty
Bus factor / maintenance Medium
Fashion / social media mindshare Zero

Default Capstone policy: adopt only if score says “yes” and migration is a branch, not a rewrite of main before Day 88.

decision ∈ { keep-current, adopt-later, trial-only-drop }

Theory 6 — Ecosystem postcard (vocabulary)

You need names for Day 78–82 conversations even without installs:

Name One-line purpose
flake-parts Modular flake output composition
nixos-anywhere Remote install from existing SSH
nh Friendlier rebuild/search UX
Attic Self-hosted binary cache
digga Legacy flake framework (historical literacy)
blueprint / templates Scaffold speed

≤15 lines total in notes is enough—depth belongs to the one trial.


Worked example — COMPARE.md skeleton

# COMPARE.md — devenv vs house layout (example)

## Context
- Capstone flake with nixosConfigurations.lab, sops-nix, deploy-rs
- Pain: polyglot shells inconsistent across repos

## Scores (1–5)

| Criterion | House | devenv | Weight |
|-----------|-------|--------|--------|
| Weekly pain relief | 2 | 4 | 5 |
| Docs clarity | 4 | 4 | 4 |
| Flake/lock fit | 5 | 4 | 5 |
| sops/deploy/tests | 5 | 3 | 5 |
| Capstone rewrite cost | 5 | 2 | 5 |

## Decision
We will **not** adopt before Day 90 because rewrite cost outweighs shell pain;
revisit after Capstone freeze if side projects still hurt.

## Evidence from trial/
- commands run:
- what broke:
- time spent:

Lab 0 — Workspace

mkdir -p ~/lab/90daysofx/02-nixos/day77/trial
cd ~/lab/90daysofx/02-nixos/day77

Do not trial on the only copy of Capstone; branch or separate directory.


Lab 1 — Map your current layout (30 min)

In LAYOUT.md:

flake.nix outputs:
  nixosConfigurations: …
  homeConfigurations / HM-as-module: …
  devShells: …
  checks: …
  packages: …
  deploy / colmena: …
modules/: …
hosts/: …
secrets/: …

List top 3 pains (e.g. “shells inconsistent”, “host boilerplate”, “no Mac story”).


Lab 2 — Pick one tool and trial

If devenv

  1. devenv init in trial/app or import docs’ minimal flake.
  2. Add one language toolchain you actually use.
  3. Optional: one service (postgres/redis) if docs make it easy.
  4. Enter shell; run a real command (tests/build).
  5. Note direnv integration if any.
  6. Time spent + friction log.

If Snowfall

  1. Scaffold a tiny Snowfall flake (one system stub, one module).
  2. Do not migrate all hosts.
  3. Trace: where does a host definition live? How is it discovered?
  4. Compare to your hosts/lab/default.nix pattern.
  5. Eval something small; capture errors as learning.

If nix-darwin

  1. On Mac: flake with one darwinConfigurations; apply to a throwaway aspect if possible.
  2. Or read-only deep dive: clone an example, map options vs NixOS cousins.
  3. Document what cannot be shared as-is with NixOS modules.

Lab 3 — Comparison table (required)

Complete COMPARE.md per Theory 5–worked example. Include explicit paragraph:

“We will / will not adopt before Day 90 because…”


Lab 4 — Ecosystem postcard

In ≤15 lines, define in your words: flake-parts, nixos-anywhere, nh, Attic. No install required.


Lab 5 — Capstone protection check

# Capstone main should be untouched by trial frameworks
cd /path/to/capstone-flake
git status
git log --oneline -5

If you “accidentally” started migrating main, revert or move work to a branch named experiment/… and restore main to last known good.


Common gotchas

Mistake What to do
Trying all three “a little” Violates the day; pick one
Rewriting Capstone main branch Use trial/ only
Adopting for aesthetics Score against pain list
devenv and heavy custom shells forever duplicated Choose a house standard
Assuming Snowfall ≈ NixOS It’s flake structure, not an OS
nix-darwin as lab substitute Still need Linux NixOS for Capstone
Infinite template shopping Timebox trial to hours, not days

Checkpoint

  • LAYOUT.md + top pains
  • One tool trial notes or read-only darwin depth
  • COMPARE.md with keep/drop decision
  • Ecosystem postcard vocabulary
  • Capstone main layout untouched (or only trivial fixes)
  • Three personal gotchas

Commit

git add .
git commit -m "day77: ecosystem trial and keep/drop decision"

Write three personal gotchas before continuing.

Tomorrow

Day 78 — Comparative landscape: Guix, image-based distros, and Ansible—honest trade-offs vs NixOS for you.