mirror of
https://github.com/bvanroll/_dotfiles.git
synced 2025-08-29 20:12:42 +00:00
118 lines
5.8 KiB
Markdown
118 lines
5.8 KiB
Markdown
# How to contribute
|
|
|
|
So you've written a blocklet for i3blocks and would like to share it with the
|
|
community, great! Let's just set a few ground rules in order to get your
|
|
blocklet included.
|
|
|
|
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
|
|
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
|
|
interpreted as described in [RFC 2119](https://www.ietf.org/rfc/rfc2119.txt).
|
|
|
|
# Directory guidelines
|
|
|
|
1. A blocklet MUST be confined to a single directory and the name of the
|
|
directory MUST be relevant to the blocklet's purpose or core feature.
|
|
2. A blocklet MUST be human readable.
|
|
3. A blocklet MUST contain a `README.md` explaining what the blocklet does,
|
|
what its dependencies are, and any special instruction or setup required to
|
|
use it.
|
|
4. A suggested i3blocks configuration MUST be included in an `i3blocks.conf`
|
|
file or within the `README.md`.
|
|
5. Any non-obvious assumptions required to make the configuration work SHOULD
|
|
be included either in the `README.md` or as comments in the configuration.
|
|
6. A blocklet's suggested command SHOULD be of the form
|
|
`command=$SCRIPT_DIR/myscript [args...]` even
|
|
if the script is a single line. The [args...] SHOULD be empty, in favor of
|
|
using injected properties.
|
|
7. The command file (`myscript` above) SHOULD be the entirety of the
|
|
executable part of your blocklet, i.e. your code is a single script.
|
|
8. The command file's name, SHOULD match the name of the
|
|
containing directory. E.g. `myscript/myscript`
|
|
is a good name, but `myscript/yourscript` is not.
|
|
9. A blocklet SHOULD NOT have a separate non `i3blocks.conf` configuration
|
|
file. Any extra configuration (e.g. default colors, paths, etc.) SHOULD be
|
|
injected properties.
|
|
10. A blocklet MUST include at least one screenshot of what it looks like in
|
|
action.
|
|
11. A blocklet MAY require building/compiling, but if it does the build process SHOULD be
|
|
as simple as possible (preferably nothing more than running `make`)
|
|
12. A blocklet SHOULD include a `LICENSE` file.
|
|
13. A blocklet MAY include a `.gitignore` file.
|
|
|
|
# Dependency guidelines
|
|
|
|
1. Listing standard utilities as dependencies is OPTIONAL.
|
|
2. If a blocklet requires a specific minimum version of a program, that program
|
|
SHOULD be listed as a dependency, and the minimum version SHOULD be listed
|
|
as well.
|
|
|
|
# Pull request guidelines
|
|
|
|
1. Every commit being merged in a pull request MUST begin with the name of the
|
|
blocklet it concerns, .e.g. `myscript: update colors`
|
|
2. A contributor with write access MUST NOT merge any pull request that he or
|
|
she created, unless there are no other contributors with write access
|
|
currently active.
|
|
3. Commit messages SHOULD be written in imperative form. E.g.
|
|
`myscript: add option to configure colors`, instead of
|
|
`myscript: added option to configure colors`.
|
|
4. Commit message first lines SHOULD be 72 characters or less but descriptive,
|
|
and details MAY be added to subsequent lines.
|
|
5. Commit details SHOULD write `Fixes: [issue]` or `Closes: [issue]` if
|
|
the commit is meant to fix/close an issue on the issues page.
|
|
6. A pull request SHOULD contribute significant change to exactly one
|
|
blocklet. A bug fix or new injected property will usually be considered
|
|
a significant change.
|
|
|
|
# Example workflow
|
|
|
|
In case you have never made a pull request before, here is an example workflow.
|
|
|
|
1. You write and test your blocklet called `myscript`.
|
|
2. You write a `README.md` and `i3blocks.conf` to go with your script, make a
|
|
`screenshot.png` and put `myscript`, `README.md`, `i3blocks.conf`,
|
|
`screenshot.png`, and your favorite `LICENSE` into a
|
|
directory called `myscript`.
|
|
3. You fork the i3blocks-contrib repository on github, and clone your fork of
|
|
i3blocks-contrib onto your computer with `git clone [your fork here]`.
|
|
4. You copy your `myscript` directory to the top level of the cloned
|
|
i3blocks-contrib directory and `cd` to the top level directory.
|
|
5. You `git add myscript` to tell git to track your blocklet's directory, you
|
|
will need to do this before every commit.
|
|
6. You `git commit` and leave a commit message of the form
|
|
`myscript: add myscript, a short description of myscript`
|
|
7. Perhaps you make a few last minute changes, and add another commit.
|
|
8. You squash your commits into one with `git rebase -i` and follow the
|
|
instructions, leaving only your first commit and commits that were already
|
|
there unsquashed.
|
|
9. You push your changes to your fork on github with `git push`.
|
|
10. You navigate to vivien's i3blocks-contrib, click "pull requests" and
|
|
"New pull request". You click "compare across forks", then select the base
|
|
as vivien's i3blocks-contrib and the head fork as yours. You click
|
|
"Create pull request".
|
|
11. The community makes some comments and suggests some things to improve before
|
|
your blocklet is accepted.
|
|
12. You add and commit changes to your local copy, and then squash them as before, so
|
|
that there are only two commits besides those that were there when you first
|
|
forked, your initial commit and one representing all the changes made to
|
|
address community concerns.
|
|
13. You push to your remote fork of i3blocks-contrib, and the changes
|
|
automatically get incorporated into the pull request process.
|
|
14. A maintainer with write access to vivien's i3blocks-contrib decides your
|
|
script is ready to be merged and merges it in, possibly making minor changes
|
|
of their own in the process.
|
|
|
|
Whenever you make a significant change to your blocklet or fix a bug,
|
|
squash your local commits since your last pull request and replace the commit
|
|
message with something of the form
|
|
|
|
myscript: what has changed since last pull request
|
|
|
|
More detailed description of changes, perhaps including:
|
|
Change 1
|
|
Change 2
|
|
Change 3
|
|
|
|
Then push to your remote fork, navigate to vivien's, and make a new pull
|
|
request.
|