A flake for performing common project setup files such as formatting and hooking into Git commits.
Go to file
D. Moonfire 9b8c86005f fix: avoid treefmt/nixago cycle on the Contributor Convenant 2024-02-05 18:46:40 -06:00
src fix: avoid treefmt/nixago cycle on the Contributor Convenant 2024-02-05 18:46:40 -06:00
.editorconfig chore: initial commit 2024-01-28 14:32:33 -06:00
.envrc chore: initial commit 2024-01-28 14:32:33 -06:00
.gitignore feat: added the ability to write out a Contributor Convenant 2024-01-28 21:53:54 -06:00
CODE_OF_CONDUCT.md fix: avoid treefmt/nixago cycle on the Contributor Convenant 2024-02-05 18:46:40 -06:00
LICENSE.md feat: added some licenses (MIT, CC BY-SA, and CC BY-NC-SA) 2024-02-05 18:42:45 -06:00
README.md feat: added some licenses (MIT, CC BY-SA, and CC BY-NC-SA) 2024-02-05 18:42:45 -06:00
flake.lock fix: got the rust formatting optional 2024-01-28 16:18:12 -06:00
flake.nix feat: added some licenses (MIT, CC BY-SA, and CC BY-NC-SA) 2024-02-05 18:42:45 -06:00

README.md

MfGames Project Setup Flake

An opinionated setup for projects using Nix flakes.

According to Larry Wall, there are three virtues of a great coder: 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:

In addition, we need to document policies that guide our projects:

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 flakes and can be used directly as an input.

{
  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).

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.

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 (including a little hacking for text files).

conform.scopes

Controls which scope is allowed inside the Conventional Commit.

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.

The copyright statement to include, if needed. This should be in the format of ", ". The "Copyright" and any symbols will be included if needed.

creativeCommonsAttributionNonCommercialShareAlike.enable

If set to true, then write out a Creative Commons BY-NC-SA license file to creativeCommonsAttributionNonCommercialShareAlike.filename.

creativeCommonsAttributionNonCommercialShareAlike.filename

The name of the file to emit.

Defaults to LICENSE.md.

creativeCommonsAttributionShareAlike.enable

If set to true, then write out a Creative Commons BY-SA license file to creativeCommonsAttributionShareAlike.filename.

creativeCommonsAttributionShareAlike.filename

The name of the file to emit.

Defaults to LICENSE.md.

developerCertificateOfOrigin.enable

If set to true, then a DCO.md will be created using the boilerplate text from https://developercertificate.org/.

Defaults to false.

mit.enable

If set to true, then write out a MIT license file to mit.filename. This requires copyright to be set because the resulting file will contain it.

mit.filename

The name of the file to emit.

Defaults to LICENSE.md.

prettier.proseWrap

Allows changing the proseWrap setting to one of the known values: preserve, always, never.

Defaults to preserve.

rust.enable

If set to true, then rustfmt.toml will be created.

Defaults to false.