flake: move formatting and git hooks into dedicated modules
Some checks failed
Publish every Git push to main to FlakeHub / flakehub-publish (push) Has been cancelled
Publish every git push to Flakestry / publish-flake (push) Has been cancelled
Documentation / Version info (push) Has been cancelled
Documentation / Build (push) Has been cancelled
Documentation / Combine builds (push) Has been cancelled
Documentation / Deploy (push) Has been cancelled

This commit is contained in:
Matt Sturgeon 2025-07-15 02:27:03 +01:00
parent 97819ce539
commit 1fb1bf8a73
3 changed files with 133 additions and 117 deletions

View file

@ -1,127 +1,12 @@
{ inputs, ... }:
{
imports = [
./devshell.nix
./fmt.nix
./generate-all-maintainers
./git-hooks.nix
./list-plugins
./package-tests.nix
./template-tests.nix
./tests.nix
inputs.git-hooks.flakeModule
inputs.treefmt-nix.flakeModule
];
perSystem =
{
pkgs,
config,
system,
...
}:
{
ci.buildbot = {
inherit (config.checks) treefmt;
};
treefmt.config = {
projectRootFile = "flake.nix";
flakeCheck = true;
programs = {
# keep-sorted start block=yes newline_separated=no
isort.enable = true;
keep-sorted.enable = true;
nixfmt = {
enable = true;
package = pkgs.nixfmt-rfc-style;
};
prettier = {
enable = true;
excludes = [ "**.md" ];
};
ruff = {
check = true;
format = true;
};
shfmt.enable = true;
statix = {
enable = true;
disabled-lints = [
# We often use `nullable == true`
"bool_comparison"
];
};
stylua.enable = true;
# FIXME: re-enable on darwin, currently broken: taplo with options '[format]' failed to apply: exit status 101
taplo.enable = pkgs.stdenv.isLinux;
# keep-sorted end
};
settings = {
global.excludes = [
".editorconfig"
".envrc"
".git-blame-ignore-revs"
".gitignore"
"LICENSE"
"flake.lock"
"**.md"
"**.scm"
"**.svg"
"**/man/*.5"
# Those files are generated by pytest-regression, which then `diff`s them.
# Formatting them will make the tests fail.
"docs/gfm-alerts-to-admonitions/tests/**/*.yml"
];
formatter.ruff-format.options = [ "--isolated" ];
};
};
pre-commit = {
# We have a treefmt check already, so this is redundant.
# We also can't run the test if it includes running `nix build`,
# since the nix CLI can't build within a derivation builder.
check.enable = false;
settings.hooks = {
deadnix = {
enable = true;
settings = {
noLambdaArg = true;
noLambdaPatternNames = true;
edit = true;
};
};
treefmt = {
enable = true;
package = config.formatter;
};
typos = {
enable = true;
excludes = [ "generated/*" ];
};
maintainers = {
enable = true;
name = "maintainers";
description = "Check maintainers when it is modified.";
files = "^lib/maintainers[.]nix$";
package = pkgs.nix;
entry = "nix build --no-link --print-build-logs";
args = [ ".#checks.${system}.maintainers" ];
pass_filenames = false;
};
plugins-by-name = {
enable = true;
name = "plugins-by-name";
description = "Check `plugins/by-name` when it's modified.";
files = "^(?:tests/test-sources/)?plugins/by-name/";
package = pkgs.nix;
entry = "nix build --no-link --print-build-logs";
args = [ ".#checks.${system}.plugins-by-name" ];
pass_filenames = false;
};
};
};
};
}

69
flake/dev/fmt.nix Normal file
View file

@ -0,0 +1,69 @@
{ inputs, ... }:
{
imports = [
inputs.treefmt-nix.flakeModule
];
perSystem =
{ config, pkgs, ... }:
{
ci.buildbot = {
inherit (config.checks) treefmt;
};
treefmt.config = {
projectRootFile = "flake.nix";
flakeCheck = true;
programs = {
# keep-sorted start block=yes newline_separated=no
isort.enable = true;
keep-sorted.enable = true;
nixfmt = {
enable = true;
package = pkgs.nixfmt-rfc-style;
};
prettier = {
enable = true;
excludes = [ "**.md" ];
};
ruff = {
check = true;
format = true;
};
shfmt.enable = true;
statix = {
enable = true;
disabled-lints = [
# We often use `nullable == true`
"bool_comparison"
];
};
stylua.enable = true;
# FIXME: re-enable on darwin, currently broken: taplo with options '[format]' failed to apply: exit status 101
taplo.enable = pkgs.stdenv.isLinux;
# keep-sorted end
};
settings = {
global.excludes = [
".editorconfig"
".envrc"
".git-blame-ignore-revs"
".gitignore"
"LICENSE"
"flake.lock"
"**.md"
"**.scm"
"**.svg"
"**/man/*.5"
# Those files are generated by pytest-regression, which then `diff`s them.
# Formatting them will make the tests fail.
"docs/gfm-alerts-to-admonitions/tests/**/*.yml"
];
formatter.ruff-format.options = [ "--isolated" ];
};
};
};
}

62
flake/dev/git-hooks.nix Normal file
View file

@ -0,0 +1,62 @@
{ inputs, ... }:
{
imports = [
inputs.git-hooks.flakeModule
];
perSystem =
{
config,
pkgs,
system,
...
}:
{
pre-commit = {
# We have a treefmt check already, so this is redundant.
# We also can't run the test if it includes running `nix build`,
# since the nix CLI can't build within a derivation builder.
check.enable = false;
settings.hooks = {
deadnix = {
enable = true;
settings = {
noLambdaArg = true;
noLambdaPatternNames = true;
edit = true;
};
};
treefmt = {
enable = true;
package = config.formatter;
};
typos = {
enable = true;
excludes = [ "generated/*" ];
};
maintainers = {
enable = true;
name = "maintainers";
description = "Check maintainers when it is modified.";
files = "^lib/maintainers[.]nix$";
package = pkgs.nix;
entry = "nix build --no-link --print-build-logs";
args = [ ".#checks.${system}.maintainers" ];
pass_filenames = false;
};
plugins-by-name = {
enable = true;
name = "plugins-by-name";
description = "Check `plugins/by-name` when it's modified.";
files = "^(?:tests/test-sources/)?plugins/by-name/";
package = pkgs.nix;
entry = "nix build --no-link --print-build-logs";
args = [ ".#checks.${system}.plugins-by-name" ];
pass_filenames = false;
};
};
};
};
}