Language-agnostic kata template — the LICENSE / repo-hygiene boilerplate every consumer project shares.
pj-rust— Rust language layerpj-rust-cli— Rust CLI extraspj-deno— plain Deno projects (apps, CLIs, JSR libs)pj-denops— Denops editor pluginspj-nvim— Neovim plugins- (planned)
pj-go,pj-bun, ...
Compose via pj-presets:
kata init github.com/yukimemi/pj-presets:rust-cli ./your-new-pj| File | how | when |
|---|---|---|
LICENSE |
overwrite | once |
once means: laid down on kata init; never re-applied. Edit it
freely after init.
Renovate config is chained, not centralised. Two rules every pj-* layer follows:
-
A layer disables only the workflows it renders itself. pj-base owns
kata-apply.ymlandapm-bump.yml, so only those two are listed in itsdefault.json.ci.ymlbelongs to pj-rust / pj-denops / pj-nvim,release.ymlto the three Rust leaf layers,deploy.ymlto pj-firebase — each disables its own in its owndefault.json.pj-base used to list all of them. That inverted the dependency (the bottom layer naming files only upper layers produce) and it blocked any project on the bare
basepreset from hand-writing a workflow with one of those names — a Lume blog wanting its ownci.yml, for instance. -
Every layer ships the same
extendssync, naming itself:[[file]] src = "renovate.json" how = "merge-json" when = "always" paths = ["extends"]
Each layer's
default.jsonextends the layer below it, so the consumer's singleextendsentry pulls in the whole chain. kata's compose rule (last layer wins on file conflicts) makes the topmost applied layer the winner automatically — no layer has to know what sits above it, and no preset variable is involved.Preset-level
[vars]would look like the natural home for "which layer is on top", but it does not survive:kata applypasses an empty preset-vars table (kata/src/cmd/apply.rs) and.kata/applied.tomldoes not persist them, so a preset var is silently init-only and every later apply reverts to the template default.Adding a new layer therefore means: give it a
default.jsonthat extends its parent, and copy the block above into itstemplate.toml.
MIT.