docs: updating documentation
This commit is contained in:
parent
db3cde52c4
commit
ebd6b9196a
3 changed files with 117 additions and 0 deletions
115
README.md
Normal file
115
README.md
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
# MfGames Project Setup Flake
|
||||||
|
|
||||||
|
_An opinionated setup for projects using Nix flakes._
|
||||||
|
|
||||||
|
According to Larry Wall, there are
|
||||||
|
[three virtues of a great coder](https://thethreevirtues.com/): laziness,
|
||||||
|
impatience, and hubris.
|
||||||
|
|
||||||
|
Over the years, the complexity of being a developer has only increased.
|
||||||
|
Fortunately (or unfortunately depending the mood), we have embraced laziness and
|
||||||
|
developed tools to help automate some of the more tedious tasks to ensure
|
||||||
|
everything is formatted correctly and properly recorded. This has resulted in
|
||||||
|
libraries such as:
|
||||||
|
|
||||||
|
- [EditorConfig](https://editorconfig.org/)
|
||||||
|
- [Conform](https://github.com/siderolabs/conform)
|
||||||
|
- [Lefthook](https://github.com/evilmartians/lefthook)
|
||||||
|
- [Prettier](https://prettier.io/)
|
||||||
|
- [Rustfmt](https://rust-lang.github.io/rustfmt/)
|
||||||
|
- [Treefmt](https://numtide.github.io/treefmt/)
|
||||||
|
|
||||||
|
In addition, we need to document policies that guide our projects:
|
||||||
|
|
||||||
|
- [Contributor Convenant](https://www.contributor-covenant.org/)
|
||||||
|
- [Developer Certificate of Origin](https://developercertificate.org/)
|
||||||
|
|
||||||
|
But, like the rest of the development world, all of these tools change and
|
||||||
|
evolve. New tools become useful to ensure formatting while others are taken over
|
||||||
|
by successors. Not to mention opinions and aesthetics change and what works
|
||||||
|
yesterday doesn't always look right today.
|
||||||
|
|
||||||
|
## Nix
|
||||||
|
|
||||||
|
This project is intended to be used with [Nix](https://nixos.wiki/wiki/Flakes)
|
||||||
|
flakes and can be used directly as an input.
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
inputs.mfgames-project-setup.url = "git+https://src.mfgames.com/nixos-contrib/mfgames-project-setup-flake.git";
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This flake provides a function in `mfgames-project-setup.lib.mkConfig` that
|
||||||
|
creates a shell hook and the various tools required to run those hooks (because
|
||||||
|
programs like `lefthook` assume that the program is in the `PATH`).
|
||||||
|
|
||||||
|
```nix
|
||||||
|
config = mfgames-project-setup.lib.mkConfig {
|
||||||
|
inherit system pkgs;
|
||||||
|
# Options go here.
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
Of course, this being Nix, there are many ways of creating a devShell. This is
|
||||||
|
one way of using the config inside the shell.
|
||||||
|
|
||||||
|
```nix
|
||||||
|
devShells = forEachSupportedSystem ({ system, pkgs }:
|
||||||
|
let
|
||||||
|
config = inputs.mfgames-project-setup.lib.mkConfig {
|
||||||
|
inherit system pkgs;
|
||||||
|
conform.scopes = [ "cli" "website" ];
|
||||||
|
rust.enable = false;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
default = pkgs.mkShell {
|
||||||
|
# Add in the required packages for the configuration.
|
||||||
|
packages = [] ++ config.packages;
|
||||||
|
|
||||||
|
# Add in the
|
||||||
|
shellHook = ''
|
||||||
|
${config.shellHook}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## Options
|
||||||
|
|
||||||
|
This is definately opinionated, mainly by the virtue that is primarily used by a
|
||||||
|
single developer. Internally, this uses
|
||||||
|
[Nixago](https://github.com/nix-community/nixago) (including a little hacking
|
||||||
|
for text files).
|
||||||
|
|
||||||
|
### conform.scopes
|
||||||
|
|
||||||
|
Controls which scope is allowed inside the
|
||||||
|
[Conventional Commit](https://www.conventionalcommits.org/en/v1.0.0/).
|
||||||
|
|
||||||
|
Defaults to `[]`. An example would be `["cli" "infra"]`.
|
||||||
|
|
||||||
|
### contributorCovenant.enable
|
||||||
|
|
||||||
|
If set to true, then a `CODE_OF_CONDUCT.md` will be created using information
|
||||||
|
from `contributorCovenant.contact` for the contact information. If the contact
|
||||||
|
is missing, this will assert.
|
||||||
|
|
||||||
|
Defaults to `false`.
|
||||||
|
|
||||||
|
### contributorCovenant.contact
|
||||||
|
|
||||||
|
Set this to the value for the contact information inside the
|
||||||
|
`CODE_OF_CONDUCT.md` file. This can be an email or a website.
|
||||||
|
|
||||||
|
### developerCertificateOfOrigin.enable
|
||||||
|
|
||||||
|
If set to true, then a `DCO.md` will be created using the boilerplate text from
|
||||||
|
https://developercertificate.org/.
|
||||||
|
|
||||||
|
Defaults to `false`.
|
||||||
|
|
||||||
|
### rust.enable
|
||||||
|
|
||||||
|
If set to true, then `rustfmt.toml` will be created.
|
|
@ -1,3 +1,4 @@
|
||||||
|
# https://www.contributor-covenant.org/
|
||||||
inputs @ { pkgs, text-engine, contributorCovenant, ... }:
|
inputs @ { pkgs, text-engine, contributorCovenant, ... }:
|
||||||
assert pkgs.lib.assertMsg
|
assert pkgs.lib.assertMsg
|
||||||
(contributorCovenant ? "contact") "contributorCovenant.contact must be set";
|
(contributorCovenant ? "contact") "contributorCovenant.contact must be set";
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# https://developercertificate.org/
|
||||||
inputs @ { pkgs, text-engine, ... }:
|
inputs @ { pkgs, text-engine, ... }:
|
||||||
{
|
{
|
||||||
output = "DCO.md";
|
output = "DCO.md";
|
||||||
|
|
Loading…
Reference in a new issue