(Set up Serena IDE integration with a Nix language server and create a memory graph documenting package conventions, core structure, tech stack, and task completion workflows.)
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
# nix-overlay — package conventions
|
||||
|
||||
## Directory pattern (every package)
|
||||
`packages/<name>/default.nix` (wrapper, receives blueprint args) + `packages/<name>/package.nix` (the derivation, `pkgs.callPackage`-style argsets).
|
||||
|
||||
Wrapper variants:
|
||||
- Plain: `{ pkgs, ... }: pkgs.callPackage ./package.nix { }`
|
||||
- Needs blueprint extras: pass `perSystem`, `inputs`, etc. through explicitly.
|
||||
- Alternate nixpkgs (freetoken): wrapper ignores `pkgs` for the derivation and calls `inputs.nixpkgs-torch211.legacyPackages.${pkgs.stdenv.hostPlatform.system}.callPackage ./package.nix { }`.
|
||||
|
||||
## Derivedivation requirements
|
||||
- Use `stdenv.mkDerivation rec { pname; version; }` or `rustPlatform.buildRustPackage` (Rust: `cargoHash`; Go/Python equivalents as needed).
|
||||
- `meta.description` required (feeds the default meta-package listing).
|
||||
- `meta.mainProgram` set for CLI-providing packages.
|
||||
- Organizational attrs via `passthru`: `category` (e.g. "AI Coding Agents"), `hideFromDocs = true` to exclude from docs listing.
|
||||
- No `with pkgs;` at top level of Nix files (scope issues).
|
||||
- No hardcoded system paths/system assumptions.
|
||||
|
||||
## Adding a package (sequence)
|
||||
mkdir → package.nix → default.nix wrapper → `git add packages/<name>/` (required for blueprint discovery) → `nix build .#<name>` → update README Available Packages table → commit (conventional-commit format).
|
||||
|
||||
## Naming
|
||||
- Package dir name = flake output attr name (kebab-case).
|
||||
@@ -0,0 +1,30 @@
|
||||
# nix-overlay — core
|
||||
|
||||
Nix flake overlay (numtide/blueprint-based) exposing extra packages for Nix/NixOS.
|
||||
Repo: `git+https://git.millerson.name/alex/millerson-overlay.nix.git`
|
||||
|
||||
## Source map
|
||||
- `flake.nix` — inputs + outputs; blueprint drives perSystem outputs; overlays/modules added manually on top.
|
||||
- `overlays/default.nix` — binary-cache-friendly: maps blueprint's pre-built `packages` under namespace `millerson-nix-overlay`.
|
||||
- `overlays/shared-nixpkgs.nix` — builds `packages/` tree against consumer's `final` via `mkPackagesFor`; shares deps, cache only hits on matching nixpkgs rev.
|
||||
- `packages/<name>/default.nix` + `package.nix` — every package follows this wrapper/derivation split. See `mem:conventions` for patterns.
|
||||
- `packages/default/` — meta-package; generates name\tdesc list from `perSystem.self`, filtering `passthru.hideFromDocs`.
|
||||
- `packages/flake-inputs/` — dummy derivation referencing all flake inputs so they get cached. `hideFromDocs = true`.
|
||||
- `treefmt.toml` — nixfmt for `*.nix`, flake.lock excluded.
|
||||
- `AGENTS.md` / `CLAUDE.md` — agent workflow rules (beads tracking, mandatory skills, caveman comms).
|
||||
|
||||
## Project-wide invariants
|
||||
- All overlay packages live under the single attrset `millerson-nix-overlay` (not top-level attrs).
|
||||
- Blueprint discovers packages from the **git index**, not the working dir: new `packages/<name>/` must be `git add`-ed before `nix build .#<name>` sees it.
|
||||
- Three nixpkgs inputs; some packages deliberately build against non-default ones. See pins in `mem:tech_stack`.
|
||||
- Everything under `packages/` uses `pkgs.callPackage ./package.nix { }` wrapper pattern; `default.nix` receives blueprint args (pkgs, perSystem, inputs, ...).
|
||||
|
||||
## Task workflow (from AGENTS.md, enforced)
|
||||
Runnable commands (build/format/update/bd/push): `mem:suggested_commands`. Exact done-checklist: `mem:task_completion`.
|
||||
|
||||
|
||||
- ALL task tracking via `bd` (beads): `bd ready`, `bd update <id> --claim`, `bd close <id>`. NEVER TodoWrite/markdown TODOs.
|
||||
- `bd prime` before starting work; `bd remember` for persistent knowledge (no MEMORY.md files).
|
||||
- Session not complete until `git push` succeeds (`bd dolt push` skipping with "No remote is configured" is expected, not a failure).
|
||||
- Commits use conventional-commit format.
|
||||
- For nixpkgs/option lookups use the `nix` skill; for flake/devShell ops the `nix-flakes` skill; comms in caveman mode.
|
||||
@@ -0,0 +1,33 @@
|
||||
# Memory Maintenance
|
||||
|
||||
## Discovery Model
|
||||
|
||||
- Core principle: progressive discovery through references, building a graph of memories.
|
||||
- Initially, agents are provided with the list of all memories (names only).
|
||||
- Agents should read `mem:core` as the top-level entry point (graph root).
|
||||
This memory should contain references to other memories covering major project domains.
|
||||
The referenced memories shall, in turn, shall contain references to even more specific memories, and so on.
|
||||
The depth of the graph shall depend on the project complexity.
|
||||
- Use topics/folders to group related memories in order to make the content structure explicit.
|
||||
Folders can mirror project structure (e.g. modules like frontend/backend) or topics like debugging, architecture, etc.
|
||||
- Memory references must use a mem: prefix inside backticks, e.g. `mem:frontend/core`.
|
||||
The surrounding text should clearly indicate when to read the memory/which content to expect.
|
||||
The text should provide more precise guidance than the memory name alone,
|
||||
i.e. avoid a reference like "frontend debugging: `mem:frontend/debugging` and instead make clear which aspects of frontend debugging are covered.
|
||||
- Memories themselves should not contain information about when to read them; this is the responsibility of the referring memory.
|
||||
|
||||
## Style
|
||||
|
||||
Dense agent notes, not prose docs. Prefer invariants, terse bullets.
|
||||
Avoid obvious context, rationale, and examples unless they prevent likely mistakes.
|
||||
Keep guidance durable and generalizable, not task-local.
|
||||
|
||||
## Add/update threshold
|
||||
|
||||
Add or update memories only with stable, non-obvious project conventions that avoid complex rediscovery in the future.
|
||||
Do not add: quick-read facts; generic language/framework knowledge; one-off task notes; volatile line-level details; behavior likely to change soon.
|
||||
|
||||
## Maintenance Actions
|
||||
|
||||
- Renaming memories: References are updated automatically if handled via Serena's memory rename tool.
|
||||
- Checking for stale memories (e.g. after deletion): Call `serena memories check` for a report.
|
||||
@@ -0,0 +1,34 @@
|
||||
# nix-overlay — commands
|
||||
|
||||
All run from repo root (`nix-overlay/`).
|
||||
|
||||
## Build / run
|
||||
- `nix build .#<package>` — build one package (must be `git add`-ed first if new; blueprint reads git index).
|
||||
- `nix run .#<package>` — run a package CLI (needs `meta.mainProgram`).
|
||||
- `nix build .#default` — build the meta-package (package listing).
|
||||
- `nix flake show` — inspect flake outputs (also index-limited).
|
||||
- `nix flake check` — full check incl. formatting.
|
||||
- `nix develop` — dev shell from blueprint.
|
||||
|
||||
## Format
|
||||
- `nix fmt` (treefmt → nixfmt on *.nix). Same as `nix flake check`'s format gate.
|
||||
|
||||
## Package updates
|
||||
- `nix-update <package>` — bump version + hashes (cargoHash etc.).
|
||||
- `nix-update <package> --version <v>` — specific version.
|
||||
- `nix-update skillsmcp --version=branch=main` — for commit-pinned pkgs; or `--commit <sha>`.
|
||||
|
||||
## Beads (mandatory task tracking)
|
||||
- `bd prime` — session context, run before any work.
|
||||
- `bd ready` / `bd show <id>` / `bd update <id> --claim` / `bd close <id>`.
|
||||
- `bd remember` — persistent knowledge instead of MEMORY.md.
|
||||
- `bd dolt push` — prints "No remote is configured — skipping." (expected; exit 0).
|
||||
|
||||
## Session completion push
|
||||
```
|
||||
git pull --rebase && bd dolt push && git push
|
||||
git status # must show "up to date with origin"
|
||||
```
|
||||
|
||||
## Serena
|
||||
- `serena memories check` — verify memory references after edits/deletes.
|
||||
@@ -0,0 +1,11 @@
|
||||
# nix-overlay — task completion
|
||||
|
||||
Done when ALL of these pass/hold:
|
||||
|
||||
1. Build passes: `nix build .#<package>` (or `nix flake check` for cross-cutting changes). Never leave a package committed that doesn't build.
|
||||
2. Formatting: `nix fmt` clean (nixfmt; `flake.lock` excluded).
|
||||
3. New package is staged (`git add packages/<name>/`) before build — blueprint index requirement.
|
||||
4. README.md Available Packages table updated if package added/changed visibly.
|
||||
5. Commit: conventional commit format (use conventional-commit / caveman-commit skill). No work left uncommitted.
|
||||
6. Beads: work claimed via `bd update <id> --claim` before, `bd close <id>` after.
|
||||
7. Pushed: `git pull --rebase && bd dolt push && git push` then `git status` shows "up to date with origin". `bd dolt push` skip message is expected, not a failure. Do not stop before push succeeds.
|
||||
@@ -0,0 +1,11 @@
|
||||
# nix-overlay — tech stack
|
||||
|
||||
- Language: Nix. Build system: Nix flake via `numtide/blueprint` (with `flake-parts`, `systems` for multi-system).
|
||||
- Formatting: `treefmt-nix` → `nixfmt` on `*.nix` (`flake.lock` excluded in `treefmt.toml`).
|
||||
- Multi-input nixpkgs setup (flake.nix) — pins matter, do not "unify" them:
|
||||
- `nixpkgs` = nixos-unstable (default; blueprint follows it).
|
||||
- `nixpkgs-latest` = nixos-unstable — needed by packages requiring newer toolchains: rustc >= 1.95 (mcp-gateway >= 3.4.0), go >= 1.26.3 (kubernetes-mcp-server >= 0.0.66).
|
||||
- `nixpkgs-torch211` = pinned rev `549bd84d6279f9852cae6225e372cc67fb91a4c1` — freetoken pins torch>=2.11,<2.12 / triton==3.6.0; nixos-unstable ships torch 2.13/triton 3.7, so freetoken builds via `inputs.nixpkgs-torch211.legacyPackages.${system}.callPackage` (see `packages/freetoken/default.nix`).
|
||||
- `bun2nix` pinned to branch `staging-2.1.0` until catalog support (bun2nix#86) lands on default branch (TODO #4001).
|
||||
- Package kinds in `packages/`: mostly Rust (rustPlatform.buildRustPackage), Go, Python/torch, Node/bun; each self-contained in its own dir.
|
||||
- `flake.lock` managed only via `nix flake update` — never hand-edited.
|
||||
Reference in New Issue
Block a user