{
  description = "Python project flake";
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs";
    poetry2nix.url = "github:nix-community/poetry2nix";
  };
  outputs =
    { nixpkgs, poetry2nix, ... }:
    let
      projectDir = ./.;
      supportedSystems = [
        "x86_64-linux"
        "x86_64-darwin"
        "aarch64-linux"
        "aarch64-darwin"
      ];
      forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
    in
    {
      packages = forAllSystems (
        system:
        let
          pkgs = import nixpkgs {
            inherit system;
            overlays = [ poetry2nix.overlays.default ];
          };
        in
        {
          default = pkgs.poetry2nix.mkPoetryApplication { inherit projectDir; };
        }
      );
      devShells = forAllSystems (
        system:
        let
          pkgs = import nixpkgs {
            inherit system;
            overlays = [ poetry2nix.overlays.default ];
          };
        in
        {
          default = pkgs.mkShell {
            buildInputs = [
              (pkgs.poetry2nix.mkPoetryEnv { inherit projectDir; })
              pkgs.poetry
            ];
          };
        }
      );
    };
}