{
  description = "A hello world template for Python Flask";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    pre-commit-hooks = {
      url = "github:cachix/pre-commit-hooks.nix";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs =
    {
      self,
      nixpkgs,
      ...
    }:
    let
      supportedSystems = [
        "x86_64-linux"
        "aarch64-linux"
        "x86_64-darwin"
        "aarch64-darwin"
      ];

      forAllSystems = nixpkgs.lib.genAttrs supportedSystems;

      nixpkgsFor = forAllSystems (
        system:
        import nixpkgs {
          inherit system;
          overlays = [ self.overlays.default ];
        }
      );
    in
    {
      overlays.default = final: _prev: {
        flask_hello = self.packages.${final.system}.default;
      };

      packages = forAllSystems (system: {
        default = nixpkgsFor.${system}.callPackage ./nix/package.nix { };
      });

      devShells = forAllSystems (system: {
        default = import ./nix/shell.nix { pkgs = nixpkgsFor.${system}; };
      });

      nixosModules = {
        flask_hello = import ./nix/module.nix;
      };

      formatter = forAllSystems (
        system:
        let
          pkgs = nixpkgs.legacyPackages.${system};
          config = self.checks.${system}.pre-commit-check.config;
          inherit (config) package configFile;
          script = ''
            ${pkgs.lib.getExe package} run --all-files --config ${configFile}
          '';
        in
        pkgs.writeShellScriptBin "pre-commit-run" script
      );

      checks = forAllSystems (system: {
        build-packages = nixpkgsFor."${system}".linkFarm "flake-packages-${system}" self.packages.${system};
        pre-commit-check = self.inputs.pre-commit-hooks.lib.${system}.run {
          src = ./.;
          hooks = {
            nixfmt.enable = true;
            black.enable = true;
          };
        };
      });
    };
}
