diff --git a/.gitignore b/.gitignore index dcba387fa..839baf94e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ /.editorconfig /.gitattributes +/.pre-commit-config.yaml /drush /html /recipes diff --git a/flake.lock b/flake.lock index 6952327f5..e619204c1 100644 --- a/flake.lock +++ b/flake.lock @@ -18,6 +18,22 @@ "type": "github" } }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, "flake-parts": { "inputs": { "nixpkgs-lib": "nixpkgs-lib" @@ -36,6 +52,47 @@ "type": "github" } }, + "git-hooks-nix": { + "inputs": { + "flake-compat": "flake-compat", + "gitignore": "gitignore", + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1749636823, + "narHash": "sha256-WUaIlOlPLyPgz9be7fqWJA5iG6rHcGRtLERSCfUDne4=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "623c56286de5a3193aa38891a6991b28f9bab056", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "git-hooks-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1722073938, @@ -68,6 +125,22 @@ } }, "nixpkgs_2": { + "locked": { + "lastModified": 1730768919, + "narHash": "sha256-8AKquNnnSaJRXZxc5YmF/WfmxiHX6MMZZasRP6RRQkE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a04d33c0c3f1a59a2c1cb0c6e34cd24500e5a1dc", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { "locked": { "lastModified": 1744463964, "narHash": "sha256-LWqduOgLHCFxiTNYi3Uj5Lgz0SR+Xhw3kr/3Xd0GPTM=", @@ -87,7 +160,8 @@ "inputs": { "devshell": "devshell", "flake-parts": "flake-parts", - "nixpkgs": "nixpkgs_2" + "git-hooks-nix": "git-hooks-nix", + "nixpkgs": "nixpkgs_3" } } }, diff --git a/flake.nix b/flake.nix index e9e90771d..a2a55d4c5 100644 --- a/flake.nix +++ b/flake.nix @@ -1,7 +1,12 @@ { inputs = { devshell.url = "github:numtide/devshell"; + flake-parts.url = "github:hercules-ci/flake-parts"; + + git-hooks-nix.inputs.nixpkgs.follows = "nixpkgs"; + git-hooks-nix.url = "github:cachix/git-hooks.nix"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; }; @@ -12,6 +17,7 @@ imports = [ ./nix/modules/dev-shell.nix + ./nix/modules/git-hooks.nix ]; perSystem = diff --git a/nix/modules/git-hooks.nix b/nix/modules/git-hooks.nix new file mode 100644 index 000000000..f585a99a1 --- /dev/null +++ b/nix/modules/git-hooks.nix @@ -0,0 +1,16 @@ +{ inputs, ... }: + +{ + imports = [ + inputs.git-hooks-nix.flakeModule + + ./phpcs.nix + ./phpstan.nix + ]; + + perSystem = + { config, ... }: + { + devshells.default.devshell.startup.git-hooks.text = config.pre-commit.installationScript; + }; +} diff --git a/nix/modules/phpcs.nix b/nix/modules/phpcs.nix new file mode 100644 index 000000000..5c8484c60 --- /dev/null +++ b/nix/modules/phpcs.nix @@ -0,0 +1,7 @@ +{ + perSystem.pre-commit.settings.hooks.phpcs = { + enable = true; + + settings.binPath = "vendor/bin/phpcs"; + }; +} diff --git a/nix/modules/phpstan.nix b/nix/modules/phpstan.nix new file mode 100644 index 000000000..a795fac96 --- /dev/null +++ b/nix/modules/phpstan.nix @@ -0,0 +1,7 @@ +{ + perSystem.pre-commit.settings.hooks.phpstan = { + enable = true; + + settings.binPath = "vendor/bin/phpstan"; + }; +}