{ inputs = { flake-utils.url = "github:numtide/flake-utils"; nixpkgs.url = "github:nixos/nixpkgs/nixos-21.11"; nur.url = "github:nix-community/NUR"; home-manager = { url = "github:nix-community/home-manager/release-21.11"; inputs.nixpkgs.follows = "nixpkgs"; }; nix-pre-commit-hooks = { url = "github:cachix/pre-commit-hooks.nix/master"; inputs.flake-utils.follows = "flake-utils"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self , nixpkgs , flake-utils , home-manager , nur , nix-pre-commit-hooks , ... }@inputs: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; inherit (pkgs) lib; in { checks = { pre-commit-check = nix-pre-commit-hooks.lib.${system}.run { src = self; hooks = { black.enable = true; nixpkgs-fmt.enable = true; shellcheck.enable = true; }; }; }; devShell = pkgs.mkShell { buildInputs = (with pkgs; [ black just nixpkgs-fmt shellcheck ]); shellHook = '' ${self.checks.${system}.pre-commit-check.shellHook} ''; }; }) // { overlay = import ./pkgs; nixosConfigurations = nixpkgs.lib.mapAttrs (hostname: { system , extraModules ? [ ] , nixpkgs ? inputs.nixpkgs }: nixpkgs.lib.nixosSystem rec { inherit system; modules = [ (./machines + "/${hostname}/configuration.nix") ./modules { _module.args.inputs = inputs; } ] ++ [{ nixpkgs.overlays = [ nur.overlay ]; }] ++ [ home-manager.nixosModules.home-manager ] ++ extraModules; }) (import ./machines inputs); }; }