{ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05"; flake-parts.url = "github:hercules-ci/flake-parts"; git-hooks.url = "github:cachix/git-hooks.nix"; }; outputs = inputs@{ flake-parts, ... }: flake-parts.lib.mkFlake { inherit inputs; } { systems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; imports = [ inputs.git-hooks.flakeModule ]; perSystem = { config, pkgs, ... }: { formatter = pkgs.nixfmt-rfc-style; pre-commit.settings.hooks = ## Not everybody might want pre-commit hooks, so we make them ## opt-in. Maybe one day we will decide to have them everywhere. let inherit (builtins) concatStringsSep; optin = [ "deployment" "services" ]; files = "^((" + concatStringsSep "|" optin + ")/.*\\.nix|[^/]*\\.nix)$"; in { nixfmt-rfc-style = { enable = true; inherit files; }; deadnix = { enable = true; inherit files; }; }; devShells.default = pkgs.mkShell { shellHook = config.pre-commit.installationScript; }; }; }; }