{
  description = "A Nix-flake-based Jupyter development environment";

  inputs.nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.1.*.tar.gz";

  outputs = {
    self,
    nixpkgs,
  }: let
    supportedSystems = ["x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin"];
    forEachSupportedSystem = f:
      nixpkgs.lib.genAttrs supportedSystems (system:
        f {
          pkgs = import nixpkgs {inherit system;};
        });
  in {
    devShells = forEachSupportedSystem ({pkgs}: {
      default = pkgs.mkShell {
        venvDir = "venv";
        packages = with pkgs;
          [python311 virtualenv]
          ++ (with pkgs.python311Packages; [
            pip
            python-lsp-server
            venvShellHook
            requests
            jupyter
            pandas
            numpy
            matplotlib
            mlflow
            seaborn
            scikit-learn
            plotnine
            arrow
            polars
            pyarrow
            ydata-profiling
            pydot
            graphviz
            (python311.pkgs.callPackage ./pkgs/azureml-mlflow/default.nix {})
            (python311.pkgs.callPackage ./pkgs/azure-ai-ml/default.nix {})
          ]);
      };
    });
  };
}
