2016-03-20 02:58:04 +02:00
# Contributing Guide
2017-11-12 16:22:07 +02:00
**Working on your first Pull Request?** You can learn how from this *free* series [How to Contribute to an Open Source Project on GitHub][First PR]
2021-11-27 21:27:00 +02:00
## How to contribute summary
2016-03-20 02:58:04 +02:00
2023-10-23 13:17:56 +02:00
Often it can be helpful to discuss a PR first in an Issue to avoid later problems or re-design when it is in review.
2022-10-17 11:33:40 +02:00
* Fork the project and submit a Pull Request (PR)
2016-03-20 02:58:04 +02:00
* Explain what the PR fixes or improves
* Screenshots for bonus points
* Use sensible commit messages
2023-10-23 13:17:56 +02:00
* Short descriptive title in the first line, one empty line, and then multiple lines with an explanation (why and how).
* If your PR fixes a separate issue number, include it in the commit message like `Fixes: #123` (on a separate line).
2017-07-28 23:27:19 +02:00
* Use a sensible number of commit messages as well
* e.g. Your PR should not have 100s of commits
2023-10-23 13:17:56 +02:00
* If you fix a previous commit of the PR it might be worth considering to squash them
2021-11-27 21:27:00 +02:00
## How to add yourself to the contributors (give yourself attribution)
Don't forget to give yourself credit! Make sure you add yourself to the contributors list that will eventually propagate to [NerdFonts.com ](https://nerdfonts.com )
2023-10-23 13:17:56 +02:00
Usually the person pulling your PR will make sure you did not forget this step.
2021-11-27 21:27:00 +02:00
Either:
* Invoke the [@all-contributors bot ](https://allcontributors.org/docs/en/bot/usage ) by commenting on your Pull Request or Issue.
2023-10-23 13:17:56 +02:00
* _(not advised)_ Shallow clone repo and execute `all-contributors add <YOUR_GITHUB_HANDLE> <CONTRIBUTION_TYPE>`
2021-11-27 21:27:00 +02:00
2023-10-23 13:17:56 +02:00
Common types for this project include: `code` , `doc` , `translation` , `review` . For full list of contribution types see: https://allcontributors.org/docs/en/emoji-key
2016-03-20 02:58:04 +02:00
2020-09-06 20:44:17 +02:00
## Steps for updating an existing font
### 1. Update original (unpatched) version
* Copy and replace the existing unpatched version of the font and any readme and/or license files in the `src/unpatched-fonts/XYZ-font` directory
* e.g. Updating *XYZ Font* , update files in directory `src/unpatched-fonts/xyz/{PUT FONT FILES HERE}`
* Make sure to update the correct subfolders for each font style (e.g. `src/unpatched-fonts/xyz/bold/{BOLD FONT FILES HERE}` )
2023-10-23 13:17:56 +02:00
* Update version information in the `readme.md` file(s)
* Add all the modifications into a git commit.
2020-09-06 20:44:17 +02:00
### 2. Execute basic testing
* Do a basic test with the new font to ensure it patches correctly and generates a new font file, e.g.
2023-10-23 13:17:56 +02:00
* `fontforge --script ./font-patcher src/unpatched-fonts/XYZ/XYZ.ttf --complete --debug 2`
* Make sure to then delete this new font file if it is in the repository
2020-09-06 20:44:17 +02:00
### 3. Run build scripts
2023-10-23 13:17:56 +02:00
This is not needed and you should never commit any patched files directly to the repo. The Github workflow will do that at appropriate times.
* When fairly satisfied the font patches correctly, run the following:
2020-09-06 20:44:17 +02:00
* Patch **all** of the variations/options, e.g.
2023-10-23 13:17:56 +02:00
* `./gotta-patch-em-all-font-patcher\!.sh /XYZ`
2020-09-06 20:44:17 +02:00
2017-04-22 05:46:22 +02:00
## Steps for adding a new font or removing an existing font
2016-03-20 02:58:04 +02:00
2017-04-22 14:36:04 +02:00
### 1. Verify license
2016-03-20 02:58:04 +02:00
* Check the license even allows the font to be modified and shared
2017-04-22 05:46:22 +02:00
### 2. Add original (unpatched) version
2023-10-23 13:17:56 +02:00
* Add the unpatched version of the font and any license files to the `src/unpatched-fonts/` directory inside a new directory
2017-03-09 06:04:43 +02:00
* e.g. Adding *XYZ Font* , create directory `src/unpatched-fonts/xyz/{PUT FONT FILES HERE}`
2017-12-08 05:45:45 +02:00
* Try to make subfolders for each font style (e.g. `src/unpatched-fonts/xyz/bold/{BOLD FONT FILES HERE}` )
2023-10-23 13:17:56 +02:00
* Add a `README.md` file to `src/unpatched-fonts/xyz` that follows the style of the existing fonts.
* If the font has Oblique instead of Italic, set that (and other specials) in the `config.cfg` file
* Update information in the `/readme.md` file(s)
* Insert font into `bin/scripts/lib/fonts.json` ; use repoRelease=false
* Add all the modifications into a git commit.
2017-04-22 14:36:04 +02:00
### 3. Execute basic testing
2016-03-20 02:58:04 +02:00
* Do a basic test with the new font to ensure it patches correctly and generates a new font file, e.g.
2023-10-23 13:17:56 +02:00
* `fontforge --script ./font-patcher src/unpatched-fonts/XYZ/XYZ.ttf --complete --debug 2`
2017-04-22 05:34:27 +02:00
* Make sure to then delete this new font file if it is in the repository (all patched fonts should be generated in the `patched-fonts` directory)
2017-04-22 05:46:22 +02:00
### 4. Run build scripts
2023-10-23 13:17:56 +02:00
* When fairly satisfied the font patches correctly, run the following:
2017-04-22 05:34:27 +02:00
* Patch **all** of the variations/options, e.g.
2023-10-23 13:17:56 +02:00
* `NERDFONTS='--debug 2 --makegroups 1' ./gotta-patch-em-all-font-patcher\!.sh /XYZ`
* If there are name length problems you might want to add `--makegroups 2` or increasing (3, 4, ...), until all fonts of the set come out without error.
To increase testing speed add `--dry` to the `NERDFONTS` variable above.
* Add the needed `makegroups` level (if it is not 1) to the `config.cfg` file and ammend your commit.
### 5. Release
2023-10-23 13:27:39 +02:00
* As we do not release directly to the repository anymore the new font will only be seen on a real release.
* For that the font image preview will also be needed (`generate-font-image-previews.sh`).
* What is automated via Github workflows and what not might change over time, so nothing is specified hereA.
## Steps to add a new icon to the core set
Codepoints in the code set are a scarce resource, so in general it is unlikely that a icon will be added.
* To add a icon one just needs to throw the svg into the correct directory and add a line to `icons.tsv` .
* The workflow than automagically updates the `i_seti.sh` and the `original-source.otf` (workflow `PackSVGs` ).
2016-03-20 02:58:04 +02:00
## Things to keep in mind
2017-04-22 06:02:43 +02:00
* Smaller Pull Requests are likely to be merged more quickly than bigger changes
* This project is using a [KISS Workflow][]
2022-10-17 11:33:40 +02:00
* Pull Requests and bugfixes are directly merged into the default branch after sanity testing
* The default branch is basically consider the main developer branch
* We no longer wait to get changes into the default branch when there is a release/milestone/version!
2017-04-22 06:02:43 +02:00
* the release branches and version tags are considered stable and frozen
2016-03-20 02:58:04 +02:00
* This project is using [Semantic Versioning 2.0.0 ](http://semver.org/ )
2017-04-22 06:02:43 +02:00
* If a bugfix or PR is *not* trivial it will likely end up in the next **MINOR** version
* If a bugfix or PR *is* trivial *or* critical it will likely end up in the next **PATCH** version
* Useful Pull Requests **will** get merged in eventually
2017-04-22 14:36:04 +02:00
* [E.g. see how many have already been merged vs. still open][pulls]
2016-03-20 02:58:04 +02:00
## Commit messages
2017-04-22 06:02:43 +02:00
* Squashing to 1 commit is **not** required at this time
* Use sensible commit messages (when in doubt: `git log` )
2023-10-23 13:17:56 +02:00
* Short descriptive title in the first line, one empty line, and then multiple lines with an explanation (e.g. why and how).
* Use a sensible number of commits
* If your PR fixes a specific issue number, include it in the commit message: `Fixes: #123` as this activates the autolink and autoclose mechanism.
2016-03-20 02:58:04 +02:00
2017-04-11 03:31:10 +02:00
## Code standards
2016-03-20 02:58:04 +02:00
2017-04-11 03:31:10 +02:00
### Shell Scripts
* Follow [ShellCheck ](https://github.com/koalaman/shellcheck ) - A shell script static analysis tool
* Try to follow [Google's Shell Style Guide ](https://google.github.io/styleguide/shell.xml )
### Python
* Use 4 spaces for indentation
* Consider PEP8 and other (@todo)
2017-04-22 05:34:27 +02:00
<!-- link references -->
2017-04-22 14:36:04 +02:00
[pulls]: https://github.com/ryanoasis/nerd-fonts/pulls
2022-10-17 11:33:40 +02:00
[Features Section]: https://github.com/ryanoasis/nerd-fonts/blob/-/readme.md#features
[Combinations Section]: https://github.com/ryanoasis/nerd-fonts/blob/-/readme.md#combinations
[Patched Fonts]: https://github.com/ryanoasis/nerd-fonts/blob/-/readme.md#patched-fonts
2017-04-22 06:02:43 +02:00
[KISS Workflow]: https://github.com/ryanoasis/nerd-fonts/wiki/Development-Workflow#kiss-workflow
2022-10-12 09:05:23 +02:00
[First PR]: https://egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github