{ description = "A basic flake with a shell"; inputs = { nixpkgs.url = "nixpkgs/fd54651f5ffb4a36e8463e0c327a78442b26cbe7"; poetry2nix.url = "github:nix-community/poetry2nix"; poetry2nix.inputs.nixpkgs.follows = "nixpkgs"; flake-utils.url = "github:numtide/flake-utils"; flake-compat = { url = "github:edolstra/flake-compat"; flake = false; }; }; outputs = { nixpkgs , flake-utils , poetry2nix , ... }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; overlays = [ poetry2nix.overlay ]; }; overrides = pkgs.poetry2nix.overrides.withDefaults (final: prev: { vkbottle-types = prev.vkbottle-types.overridePythonAttrs (old: { propagatedBuildInputs = builtins.filter (p: p.pname != "vkbottle") old.propagatedBuildInputs; buildInputs = (old.buildInputs or [ ]) ++ [ final.poetry ]; postPatch = '' substituteInPlace pyproject.toml --replace 'vkbottle = "^4.3.5"' "" ''; }); vkbottle = prev.vkbottle.overridePythonAttrs (old: { buildInputs = (old.buildInputs or [ ]) ++ [ final.poetry ]; postPatch = '' substituteInPlace pyproject.toml --replace 'watchfiles = ">=0.15,<0.18"' "" ''; }); choicelib = prev.choicelib.overridePythonAttrs (old: { buildInputs = (old.buildInputs or [ ]) ++ [ final.poetry ]; }); vbml = prev.vbml.overridePythonAttrs (old: { buildInputs = (old.buildInputs or [ ]) ++ [ final.poetry ]; }); rope = with final; buildPythonPackage rec { pname = "rope"; version = "1.4.0"; src = fetchPypi { inherit pname version; sha256 = "sha256-fVo0I1/0okK3HySbVhepxUES4UW6RwGkHi9PlpQuWJk="; }; doCheck = false; postPatch = '' substituteInPlace pyproject.toml --replace "'pytoolconfig >= 1.2.2'" "" ''; }; pylsp-rope = with final; buildPythonPackage rec { pname = "pylsp-rope"; version = "0.1.8"; src = pkgs.fetchFromGitHub { owner = "python-rope"; repo = "pylsp-rope"; rev = "refs/tags/${version}"; sha256 = "sha256-hrhn86OHZ+8rlqh020URQHtrYQ0BtgbGxw5D28WBYks="; }; propagatedBuildInputs = [ rope python-lsp-server ]; pythonImportsCheck = [ "pylsp_rope" ]; doCheck = false; }; }); python = pkgs.python310; projectDir = ./.; poetryEnv = pkgs.poetry2nix.mkPoetryEnv { inherit overrides python projectDir; }; poetryApp = pkgs.poetry2nix.mkPoetryApplication { inherit overrides python projectDir; meta.mainProgram = poetryApp.pname; }; in rec { legacyPackages = pkgs; defaultApp = poetryApp; defaultPackage = poetryApp; devShells = rec { default = pkgs.mkShell { buildInputs = with pkgs; [ poetryEnv arion ]; }; lsp = pkgs.mkShell { buildInputs = [( poetryApp.python.withPackages (p: with p; [ python-lsp-server pylsp-rope pylsp-mypy python-lsp-black pyls-isort ]) )]; }; }; arion-compose = { services.${poetryApp.pname} = { service = { container_name = poetryApp.pname; working_dir = "${defaultPackage}/lib/python3.10/site-packages"; env_file = [ ".env" ]; environment = { SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"; }; }; image = { contents = [ poetryApp pkgs.cacert ]; command = [ poetryApp.meta.mainProgram ]; enableRecommendedContents = true; }; }; }; }); }