{ description = "Application packaged using poetry2nix"; inputs = { flake-utils.url = "github:numtide/flake-utils"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable-small"; # Added newest nixpkgs for an updated poetry package. nixpkgs-newest.url = "github:NixOS/nixpkgs/nixos-unstable"; poetry2nix = { url = "github:nix-community/poetry2nix"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, flake-utils, poetry2nix, nixpkgs-newest, }: flake-utils.lib.eachDefaultSystem ( system: let pkgs = nixpkgs.legacyPackages.${system}; # Use the newest nixpkgs exclusively for the poetry package. pkgsNew = nixpkgs-newest.legacyPackages.${system}; inherit (poetry2nix.lib.mkPoetry2Nix { inherit pkgs; }) mkPoetryApplication defaultPoetryOverrides; inherit poetry2nix; in { packages = { myapp = mkPoetryApplication { projectDir = self; preferWheels = true; overrides = defaultPoetryOverrides.extend ( self: super: { umap = super.umap.overridePythonAttrs (old: { buildInputs = (old.buildInputs or [ ]) ++ [ super.setuptools ]; }); } ); }; default = self.packages.${system}.myapp; }; # Shell for app dependencies. # # nix develop # # Use this shell for developing your app. devShells.default = pkgs.mkShell { inputsFrom = [ self.packages.${system}.myapp ]; }; # Shell for poetry. # # nix develop .#poetry # # Here we use the poetry package from the newest nixpkgs input while keeping # all other dependencies locked. devShells.poetry = pkgs.mkShell { packages = [ pkgsNew.poetry ]; }; } ); }