diff --git a/.github/ISSUE_TEMPLATE/extension-submission.yml b/.github/ISSUE_TEMPLATE/extension-submission.yml new file mode 100644 index 0000000..31809f1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/extension-submission.yml @@ -0,0 +1,82 @@ +name: Submit a community extension +description: Ask for your Burrow extension to be listed on the Community extensions page. +title: "Community extension: " +labels: ["community-extension"] +body: + - type: markdown + attributes: + value: | + Prefer a pull request? Add an `[[extension]]` entry to `extensions/community.toml` instead (see "Submit your extension" on the Extensions page of the documentation). + + **The Burrow maintainers don't review, verify, audit or endorse community extensions.** We check that the entry is well-formed, add it, and the listing says it is used at the reader's own risk. Don't put an email address or other personal data in this form. + - type: input + id: name + attributes: + label: Name + description: The `name` in your extension.toml. Lowercase kebab-case, at most 40 characters. + placeholder: wordcount + validations: + required: true + - type: input + id: title + attributes: + label: Title + description: A short human name, at most 60 characters. + placeholder: Word count + validations: + required: true + - type: input + id: description + attributes: + label: Description + description: One line of plain text, at most 160 characters. + placeholder: Shows the word count and reading time of the open draft. + validations: + required: true + - type: input + id: repo + attributes: + label: Source repository + description: An https:// link to the public source code. + placeholder: https://github.com/example/burrow-ext-wordcount + validations: + required: true + - type: input + id: homepage + attributes: + label: Homepage (optional) + placeholder: https://example.com/wordcount + - type: input + id: author + attributes: + label: Author + description: Your GitHub handle, without the @. Not an email address. + placeholder: example + validations: + required: true + - type: textarea + id: capabilities + attributes: + label: Capabilities + description: Exactly what your manifest's `capabilities` asks for, one per line (or "none"). + placeholder: | + items.read + ui + validations: + required: true + - type: checkboxes + id: platforms + attributes: + label: Platforms + options: + - label: macOS + - label: Windows + - type: checkboxes + id: understood + attributes: + label: Before you submit + options: + - label: I wrote this extension, or I maintain it, and its source code is public. + required: true + - label: I understand the maintainers check the entry's format only, and that the listing can be removed if it's reported as malicious or misleading. + required: true diff --git a/.github/PULL_REQUEST_TEMPLATE/extension.md b/.github/PULL_REQUEST_TEMPLATE/extension.md new file mode 100644 index 0000000..0e20c03 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/extension.md @@ -0,0 +1,23 @@ + + +## Extension + +- **Name:** +- **Source:** + +## Checklist + +- [ ] This pull request changes only `extensions/community.toml`, and only one entry. +- [ ] The entry is in alphabetical order by `name`. +- [ ] `name` matches the `name` in my `extension.toml`. +- [ ] `capabilities` lists exactly what my manifest asks for. +- [ ] `repo` links to the extension's source code, which is public. +- [ ] `author` is my GitHub handle, and there's no email address anywhere in the entry. +- [ ] `python3 scripts/community-extensions.py check` passes. +- [ ] I understand that the Burrow maintainers check the entry's format only. + They don't review, verify, audit or endorse the extension, and the listing + says so. A listing can be removed if it's reported as malicious or misleading. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a480ee8..6792915 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -97,6 +97,11 @@ jobs: with: persist-credentials: false + # The community extension list: format only (valid TOML, required + # fields, names, https URLs, sorted). It never fetches or runs anything. + - name: Check the community extension list + run: python3 scripts/community-extensions.py check + # The pinned mdBook; fails on mdBook errors or broken links. - name: Build the book run: scripts/build-site.sh diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 20ad3f3..d34aaff 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -15,6 +15,8 @@ on: - "CHANGELOG.md" - "scripts/build-site.sh" - "scripts/site-linkcheck.py" + - "scripts/community-extensions.py" + - "extensions/community.toml" - ".github/workflows/pages.yml" workflow_dispatch: diff --git a/.gitignore b/.gitignore index aaee0d0..0bc099b 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,5 @@ # The documentation site build (mdbook build site) /site/book/ +# Made from extensions/community.toml by scripts/build-site.sh +/site/src/generated/community-extensions.md diff --git a/CHANGELOG.md b/CHANGELOG.md index cab06bd..56dc9e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,25 @@ teaches something new in the tour, set the newest entry's `version` in ## [Unreleased] +## [0.11.0] - 2026-10-09 + +### Added + +- **Turn an extension off.** Manage extensions (⇧⌘P › Manage extensions…) has **Turn off** for any extension that's on, whatever state it's in. It stops the extension and keeps what you allowed, so Turn on brings it back as it was. **Forget permissions** turns it off and clears what you allowed, so the next Turn on asks again. The consent sheet gains **⌘⌫ turn off**, so you can back out the moment you see what an extension asks for. +- **Several notes folders.** markdown-notes can open any number of folders (Obsidian vaults, say). The Notes tab in the notes drawer has a chip for each folder, plus **Add folder…** and **Remove from Burrow** (which only removes the folder from Burrow and never touches your files), and remembers the folder you were in. Settings › Notes folders lists them, and you can add several at once. ⌘K's notes chip searches every folder. In the config they are `vault=` for the first and `vault-