beetbox / beetbox/beets

Support extensibility using executables named `beet-*`, like git

Open
#5,087 0 comments 0 reactions 0 assignees View on GitHub
feature
Dominant language
Python
Stars
15.7k
Forks
2.1k
Avg merge
4d 21h
Merged PRs (30d)
31

Description

### Proposed solution

Support the same extensibility model that git implements, i.e.:

- Allow new subcommands based on executables named `beet-*` in `$PATH`
- Do not allow overriding builtin subcommands
- Do not allow overriding subcommands provided by plugins

### Objective

Make it easier to invent new functionality for beets without the need to resort to Python plugins and their maintenance overhead.

Some examples:

- [Open the beet database](https://github.com/agross/dotfiles/blob/master/beets/bin/beet-edit-db)
- [Run ffprobe on query results](https://github.com/agross/dotfiles/blob/master/beets/bin/beet-ffprobe)
- [More stuff](https://github.com/agross/dotfiles/tree/master/beets/bin)

[More info](https://stackoverflow.com/a/43432410) concerning this feature in git.

#### Goals

See above (?)

#### Non-goals

Replacing plugins.

#### Anti-goals

Such scripts could inject unwanted functionality into beet if implemented incorrectly, e.g. `beet import` running `rm -rf /` through a `beet-import` script in `$PATH`.

Perhaps also provide an option to disable external commands, [like git does it](https://git-scm.com/docs/git-help#Documentation/git-help.txt---no-external-commands).

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.