🔎 coco
is an interactive command line interface for creating conventional commits.
# `coco` › [![LICENSE_BADGE][LICENSE_BADGE]][LICENSE_LINK] [![CRATE_BADGE][CRATE_BADGE]][CRATE_LINK] [![ISSUES_BADGE][ISSUES_BADGE]][ISSUES_LINK]
This is a port to Rust ⚡ of the original (and slower)
[lucas-labs/coco-js](https://github.com/lucas-labs/coco-js), that was implemented using `node.js`.
This implementation, being written in Rust, is faster, more efficient and has implemented several
improvements over the original implementation.
## Installation
Pre-built binaries not available yet.
## Usage
Drop the `coco` binary somewhere in your `PATH` and run it in your repository:
```bash
$ coco
# and follow the steps 😊
```
## Configuration
`coco` can be configured by creating a `coco.yaml`, `coco.yml` or `.cocorc` file in your project's
root (per repository config) or in your users home directory (global config). The file should be a
valid YAML.
See the [`coco.yml`](https://github.com/lucas-labs/coco/blob/master/coco.yml) file from this
repository for an example configuration.
> [!NOTE]
> Config is totally optional. If no config is provided, `coco` will use default values.
### Options
#### `types`
An array of commit types. Each type should be an object with the following properties:
* `name` - The name of the type
* `desc` - The description of the type
* `emoji` - The emoji to be used for the type if `useEmoji` is set to `true`
```yaml
types:
- name: feat
desc: A new feature
emoji: 🎉
- name: fix
desc: A bug fix
emoji: 🐛
```
#### `scopes`
An array of commit scopes.
```yaml
scopes:
- api
- ui
```
If provided, instead of asking you to type the scope, `coco` will prompt you to select one from the
list.
#### `useEmoji`
Whether to use emojis in the summary. If set to `true`, the `emoji` property of the type will be
used to create the commit message.
```yaml
useEmoji: true
```
Provided `useEmoji` is `true`, an example of a commit message would be:
`feat(api): ✨ add new endpoint`
#### `askScope`
Whether to ask for the scope of the commit. IF set to `true`, the user will be prompted to enter or
select a scope (depending if scope list was provided by user config or not). If set to `false`, the
scope will be omitted from the commit message and the cli won't ask for it.
```yaml
askScope: true
```
#### `askBody`
Whether to ask for the body of the commit. If set to `true`, the user will be prompted to enter the
body of the commit. If set to `false`, the body will be omitted from the commit message and the cli
won't ask for it.
```yaml
askBody: true
```
#### `askFooter`
Whether to ask for the footer of the commit. If set to `true`, the user will be prompted to enter
the footer of the commit. If set to `false`, the footer will be omitted from the commit message and
the cli won't ask for it.
```yaml
askFooter: true
```
#### `askBreakingChange`
Whether to ask for the breaking change of the commit. If set to `true`, the user will be prompted to
specify if the commit is a breaking change. If set to `false`, the breaking change information will
be omitted from the commit message and the cli won't ask for it.
```yaml
askBreakingChange: true
```
#### `maxSummaryLength`
Defines the maximum length of the commit summary (the "title" of the commit). The summary textarea
will be limited to this length.
The default value is `72`.
```yaml
maxSummaryLength: 72
```
#### `theme`
You can also customize the colors of the CLI by providing a `theme` object.
Check the [`coco.yml`](https://github.com/lucas-labs/coco/blob/master/coco.yml) file to a full list
of the available theme configuration tokens with their default values.
```yaml
theme:
logo:fg:1: blue
logo:fg:2: light-magenta
...
```
### Example
```yaml
# override the default commit types
types:
- name: feat
desc: A new feature
emoji: 🎉
- name: fix
desc: A bug fix
emoji: 🐛
# set of scopes to choose from
scopes:
- api
- ui
useEmoji: true # default
askScope: true # default
askBody: true # default
askFooter: true # default
askBreakingChange: true # default
```
[LICENSE_LINK]: https://github.com/lucas-labs/coco/blob/master/LICENSE
[LICENSE_BADGE]: https://img.shields.io/github/license/lucas-labs/coco?color=005af0&style=flat-square
[ISSUES_LINK]: https://github.com/lucas-labs/coco/issues
[ISSUES_BADGE]: https://img.shields.io/github/issues-raw/lucas-labs/coco?color=1ed760&style=flat-square
[CRATE_LINK]: https://crates.io/crates/rs-coco
[CRATE_BADGE]: https://img.shields.io/crates/v/rs-coco?style=flat-square&label=%20crate&color=%23fecc6a