summary refs log tree commit diff
path: root/pkgs/applications/networking/cluster/nixops
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/networking/cluster/nixops')
-rw-r--r--pkgs/applications/networking/cluster/nixops/default.nix158
-rw-r--r--pkgs/applications/networking/cluster/nixops/plugins/nixops-aws.nix56
-rw-r--r--pkgs/applications/networking/cluster/nixops/plugins/nixops-digitalocean.nix50
-rw-r--r--pkgs/applications/networking/cluster/nixops/plugins/nixops-encrypted-links.nix45
-rw-r--r--pkgs/applications/networking/cluster/nixops/plugins/nixops-gce.nix54
-rw-r--r--pkgs/applications/networking/cluster/nixops/plugins/nixops-hercules-ci.nix39
-rw-r--r--pkgs/applications/networking/cluster/nixops/plugins/nixops-hetzner.nix54
-rw-r--r--pkgs/applications/networking/cluster/nixops/plugins/nixops-hetznercloud.nix52
-rw-r--r--pkgs/applications/networking/cluster/nixops/plugins/nixops-libvirtd.nix50
-rw-r--r--pkgs/applications/networking/cluster/nixops/plugins/nixops-vbox.nix45
-rw-r--r--pkgs/applications/networking/cluster/nixops/plugins/nixos-modules-contrib.nix45
-rw-r--r--pkgs/applications/networking/cluster/nixops/poetry-git-overlay.nix114
-rw-r--r--pkgs/applications/networking/cluster/nixops/poetry.lock731
-rw-r--r--pkgs/applications/networking/cluster/nixops/pyproject.toml28
-rw-r--r--pkgs/applications/networking/cluster/nixops/shell.nix11
-rw-r--r--pkgs/applications/networking/cluster/nixops/unwrapped.nix65
-rwxr-xr-xpkgs/applications/networking/cluster/nixops/update11
17 files changed, 608 insertions, 1000 deletions
diff --git a/pkgs/applications/networking/cluster/nixops/default.nix b/pkgs/applications/networking/cluster/nixops/default.nix
index b119bfdcde2..3fef75313b0 100644
--- a/pkgs/applications/networking/cluster/nixops/default.nix
+++ b/pkgs/applications/networking/cluster/nixops/default.nix
@@ -1,108 +1,56 @@
-{ nixosTests
-, pkgs
-, poetry2nix
-, lib
-, overrides ? (self: super: {})
-}:
+{ python3 }:
 
 let
-
-  interpreter = (
-    poetry2nix.mkPoetryPackages {
-      projectDir = ./.;
-      python = pkgs.python310;
-      overrides = [
-        poetry2nix.defaultPoetryOverrides
-        (import ./poetry-git-overlay.nix { inherit pkgs; })
-        (
-          self: super: {
-
-            nixops = super.nixops.overridePythonAttrs (
-              old: {
-                version = "${old.version}-pre-${lib.substring 0 7 super.nixops.src.rev or "dirty"}";
-
-                postPatch = ''
-                  substituteInPlace nixops/args.py --subst-var version
-                '';
-
-                meta = old.meta // {
-                  homepage = "https://github.com/NixOS/nixops";
-                  description = "NixOS cloud provisioning and deployment tool";
-                  maintainers = with lib.maintainers; [ adisbladis aminechikhaoui roberth ];
-                  platforms = lib.platforms.unix;
-                  license = lib.licenses.lgpl3;
-                  mainProgram = "nixops";
-                };
-
-              }
-            );
-          }
-        )
-
-        # User provided overrides
-        overrides
-
-        # Make nixops pluginable
-        (self: super: let
-          # Create a fake sphinx directory that doesn't pull the entire setup hook and incorrect python machinery
-          sphinx = pkgs.runCommand "sphinx" {} ''
-            mkdir -p $out/bin
-            for f in ${pkgs.python3.pkgs.sphinx}/bin/*; do
-              ln -s $f $out/bin/$(basename $f)
-            done
-          '';
-
-        in {
-          nixops = super.__toPluginAble {
-            drv = super.nixops;
-            finalDrv = self.nixops;
-
-            nativeBuildInputs = [ sphinx ];
-
-            postInstall = ''
-              doc_cache=$(mktemp -d)
-              sphinx-build -b man -d $doc_cache doc/ $out/share/man/man1
-
-              html=$(mktemp -d)
-              sphinx-build -b html -d $doc_cache doc/ $out/share/nixops/doc
-            '';
-
-          };
-        })
-
-        (self: super: {
-          cryptography = super.cryptography.overridePythonAttrs (old: {
-            meta = old.meta // {
-              knownVulnerabilities = old.meta.knownVulnerabilities or [ ]
-                ++ lib.optionals (lib.versionOlder old.version "41.0.0") [
-                  "CVE-2023-2650"
-                  "CVE-2023-2975"
-                  "CVE-2023-3446"
-                  "CVE-2023-3817"
-                  "CVE-2023-38325"
-                ];
-            };
-          });
-        })
-
-      ];
-    }
-  ).python;
-
-  pkg = (interpreter.pkgs.nixops.withPlugins(ps: [
-    ps.nixops-aws
-    ps.nixops-digitalocean
-    ps.nixops-encrypted-links
-    ps.nixops-gcp
-    ps.nixops-hercules-ci
-    ps.nixops-hetzner
-    ps.nixopsvbox
-    ps.nixops-virtd
-    ps.nixops-hetznercloud
-  ])).overrideAttrs (finalAttrs: prevAttrs: {
-    passthru = prevAttrs.passthru or {} // {
-      tests = prevAttrs.passthru.tests or {} //
-        nixosTests.nixops.unstable.passthru.override { nixopsPkg = pkg; };
+  python = python3.override {
+    packageOverrides = self: super: {
+      nixops = self.callPackage ./unwrapped.nix { };
+    } // (plugins self);
+  };
+
+  plugins = ps: with ps; rec {
+    nixops-aws = callPackage ./plugins/nixops-aws.nix { };
+    nixops-digitalocean = callPackage ./plugins/nixops-digitalocean.nix { };
+    nixops-encrypted-links = callPackage ./plugins/nixops-encrypted-links.nix { };
+    nixops-gce = callPackage ./plugins/nixops-gce.nix { };
+    nixops-hercules-ci = callPackage ./plugins/nixops-hercules-ci.nix { };
+    nixops-hetzner = callPackage ./plugins/nixops-hetzner.nix { };
+    nixops-hetznercloud = callPackage ./plugins/nixops-hetznercloud.nix { };
+    nixops-libvirtd = callPackage ./plugins/nixops-libvirtd.nix { };
+    nixops-vbox = callPackage ./plugins/nixops-vbox.nix { };
+    nixos-modules-contrib = callPackage ./plugins/nixos-modules-contrib.nix { };
+
+    # aliases for backwards compatibility
+    nixops-gcp = nixops-gce;
+    nixops-virtd = nixops-libvirtd;
+    nixopsvbox = nixops-vbox;
+  };
+
+  # selector is a function mapping pythonPackages to a list of plugins
+  # e.g. nixops_unstable.withPlugins (ps: with ps; [ nixops-aws ])
+  withPlugins = selector: let
+    selected = selector (plugins python.pkgs);
+  in python.pkgs.toPythonApplication (python.pkgs.nixops.overridePythonAttrs (old: {
+    propagatedBuildInputs = old.propagatedBuildInputs ++ selected;
+
+    # Propagating dependencies leaks them through $PYTHONPATH which causes issues
+    # when used in nix-shell.
+    postFixup = ''
+      rm $out/nix-support/propagated-build-inputs
+    '';
+
+    passthru = old.passthru // {
+      plugins = plugins python.pkgs;
+      inherit withPlugins python;
     };
-  });
-in pkg
+  }));
+in withPlugins (ps: [
+  ps.nixops-aws
+  ps.nixops-digitalocean
+  ps.nixops-encrypted-links
+  ps.nixops-gce
+  ps.nixops-hercules-ci
+  ps.nixops-hetzner
+  ps.nixops-hetznercloud
+  ps.nixops-libvirtd
+  ps.nixops-vbox
+])
diff --git a/pkgs/applications/networking/cluster/nixops/plugins/nixops-aws.nix b/pkgs/applications/networking/cluster/nixops/plugins/nixops-aws.nix
new file mode 100644
index 00000000000..06d8135bc9f
--- /dev/null
+++ b/pkgs/applications/networking/cluster/nixops/plugins/nixops-aws.nix
@@ -0,0 +1,56 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, unstableGitUpdater
+, poetry-core
+, boto
+, boto3
+, nixops
+, nixos-modules-contrib
+, typing-extensions
+}:
+
+buildPythonPackage {
+  pname = "nixops-aws";
+  version = "unstable-2023-08-09";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "NixOS";
+    repo = "nixops-aws";
+    rev = "8802d1cda9004ec1362815292c2a8ab95e6d64e8";
+    hash = "sha256-i0KjFrwpDHRch9jorccdVwnjAQiORClDUqm2R2xvwuU=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+    --replace poetry.masonry.api poetry.core.masonry.api \
+    --replace "poetry>=" "poetry-core>="
+  '';
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  buildInputs = [
+    nixops
+  ];
+
+  propagatedBuildInputs = [
+    boto
+    boto3
+    nixos-modules-contrib
+    typing-extensions
+  ];
+
+  pythonImportsCheck = [ "nixops_aws" ];
+
+  passthru.updateScript = unstableGitUpdater {};
+
+  meta = with lib; {
+    description = "AWS plugin for NixOps";
+    homepage = "https://github.com/NixOS/nixops-aws";
+    license = licenses.lgpl3Only;
+    maintainers = nixops.meta.maintainers;
+  };
+}
diff --git a/pkgs/applications/networking/cluster/nixops/plugins/nixops-digitalocean.nix b/pkgs/applications/networking/cluster/nixops/plugins/nixops-digitalocean.nix
new file mode 100644
index 00000000000..e35b4cd07f3
--- /dev/null
+++ b/pkgs/applications/networking/cluster/nixops/plugins/nixops-digitalocean.nix
@@ -0,0 +1,50 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, unstableGitUpdater
+, poetry-core
+, nixops
+, digital-ocean
+}:
+
+buildPythonPackage {
+  pname = "nixops-digitalocean";
+  version = "unstable-2022-08-14";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "nixops-digitalocean";
+    rev = "e977b7f11e264a6a2bff2dcbc7b94c6a97b92fff";
+    hash = "sha256-aJtShvdqjAiCK5oZL0GR5cleDb4s1pJkO6UPKGd4Dgg=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+    --replace poetry.masonry.api poetry.core.masonry.api \
+    --replace "poetry>=" "poetry-core>="
+  '';
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  buildInputs = [
+    nixops
+  ];
+
+  propagatedBuildInputs = [
+    digital-ocean
+  ];
+
+  pythonImportsCheck = [ "nixops_digitalocean" ];
+
+  passthru.updateScript = unstableGitUpdater {};
+
+  meta = with lib; {
+    description = "NixOps Digitalocean plugin";
+    homepage = "https://github.com/nix-community/nixops-digitalocean";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ kiwi ];
+  };
+}
diff --git a/pkgs/applications/networking/cluster/nixops/plugins/nixops-encrypted-links.nix b/pkgs/applications/networking/cluster/nixops/plugins/nixops-encrypted-links.nix
new file mode 100644
index 00000000000..49ffc319a05
--- /dev/null
+++ b/pkgs/applications/networking/cluster/nixops/plugins/nixops-encrypted-links.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, unstableGitUpdater
+, poetry-core
+, nixops
+}:
+
+buildPythonPackage {
+  pname = "nixops-encrypted-links";
+  version = "unstable-2021-02-16";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "nixops-encrypted-links";
+    rev = "e2f196fce15fcfb00d18c055e1ac53aec33b8fb1";
+    hash = "sha256-1TTbARyCfrLxF6SVNkmIKNNcLS9FVW22d9w0VRrH1os=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+    --replace poetry.masonry.api poetry.core.masonry.api \
+    --replace "poetry>=" "poetry-core>="
+  '';
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  buildInputs = [
+    nixops
+  ];
+
+  pythonImportsCheck = [ "nixops_encrypted_links" ];
+
+  passthru.updateScript = unstableGitUpdater {};
+
+  meta = with lib; {
+    description = "EncryptedLinksTo from Nixops 1 module port";
+    homepage = "https://github.com/nix-community/nixops-encrypted-links";
+    license = licenses.mit;
+    maintainers = with maintainers; [ adisbladis ];
+  };
+}
diff --git a/pkgs/applications/networking/cluster/nixops/plugins/nixops-gce.nix b/pkgs/applications/networking/cluster/nixops/plugins/nixops-gce.nix
new file mode 100644
index 00000000000..604e82114ba
--- /dev/null
+++ b/pkgs/applications/networking/cluster/nixops/plugins/nixops-gce.nix
@@ -0,0 +1,54 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, unstableGitUpdater
+, poetry-core
+, cryptography
+, libcloud
+, nixops
+, nixos-modules-contrib
+}:
+
+buildPythonPackage {
+  pname = "nixops-gce";
+  version = "unstable-2023-05-26";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "nixops-gce";
+    rev = "d13cb794aef763338f544010ceb1816fe31d7f42";
+    hash = "sha256-UkYf6CoUrr8yuQoe/ik6vu+UCi3ByJd0BdkS9SLEp0Q=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+    --replace poetry.masonry.api poetry.core.masonry.api \
+    --replace "poetry>=" "poetry-core>="
+  '';
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  buildInputs = [
+    nixops
+  ];
+
+  propagatedBuildInputs = [
+    cryptography
+    libcloud
+    nixos-modules-contrib
+  ];
+
+  pythonImportsCheck = [ "nixops_gcp" ];
+
+  passthru.updateScript = unstableGitUpdater {};
+
+  meta = with lib; {
+    description = "NixOps Google Cloud Backend";
+    homepage = "https://github.com/nix-community/nixops-gce";
+    license = licenses.mit;
+    maintainers = nixops.meta.maintainers;
+  };
+}
diff --git a/pkgs/applications/networking/cluster/nixops/plugins/nixops-hercules-ci.nix b/pkgs/applications/networking/cluster/nixops/plugins/nixops-hercules-ci.nix
new file mode 100644
index 00000000000..90ed88edfa0
--- /dev/null
+++ b/pkgs/applications/networking/cluster/nixops/plugins/nixops-hercules-ci.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, unstableGitUpdater
+, poetry-core
+, nixops
+}:
+
+buildPythonPackage {
+  pname = "nixops-hercules-ci";
+  version = "unstable-2021-10-06";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "hercules-ci";
+    repo = "nixops-hercules-ci";
+    rev = "e601d5baffd003fd5f22deeaea0cb96444b054dc";
+    hash = "sha256-4IZ+qzhERJIhLcIq9FvVml+xAFJ8R4QpUjFRw2DZl2U=";
+  };
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  buildInputs = [
+    nixops
+  ];
+
+  pythonImportsCheck = [ "nixops_hercules_ci" ];
+
+  passthru.updateScript = unstableGitUpdater {};
+
+  meta = with lib; {
+    description = "Use Hercules CI as a NixOps backend";
+    homepage = "https://github.com/hercules-ci/nixops-hercules-ci";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ roberth ];
+  };
+}
diff --git a/pkgs/applications/networking/cluster/nixops/plugins/nixops-hetzner.nix b/pkgs/applications/networking/cluster/nixops/plugins/nixops-hetzner.nix
new file mode 100644
index 00000000000..c4d037fe75f
--- /dev/null
+++ b/pkgs/applications/networking/cluster/nixops/plugins/nixops-hetzner.nix
@@ -0,0 +1,54 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, unstableGitUpdater
+, poetry-core
+, hetzner
+, nixops
+, nixos-modules-contrib
+, typing-extensions
+}:
+
+buildPythonPackage {
+  pname = "nixops-hetzner";
+  version = "unstable-2022-04-23";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "NixOS";
+    repo = "nixops-hetzner";
+    rev = "bc7a68070c7371468bcc8bf6e36baebc6bd2da35";
+    hash = "sha256-duK1Ui4VpbGSgGvfjTOddHSqHZ1FSy4L9Egg+FvZv04=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+    --replace poetry.masonry.api poetry.core.masonry.api \
+    --replace "poetry>=" "poetry-core>="
+  '';
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  buildInputs = [
+    nixops
+  ];
+
+  propagatedBuildInputs = [
+    hetzner
+    nixos-modules-contrib
+    typing-extensions
+  ];
+
+  pythonImportsCheck = [ "nixops_hetzner" ];
+
+  passthru.updateScript = unstableGitUpdater {};
+
+  meta = with lib; {
+    description = "Hetzner bare metal NixOps plugin";
+    homepage = "https://github.com/NixOS/nixops-hetzner";
+    license = licenses.mit;
+    maintainers = nixops.meta.maintainers;
+  };
+}
diff --git a/pkgs/applications/networking/cluster/nixops/plugins/nixops-hetznercloud.nix b/pkgs/applications/networking/cluster/nixops/plugins/nixops-hetznercloud.nix
new file mode 100644
index 00000000000..17e94ab9f32
--- /dev/null
+++ b/pkgs/applications/networking/cluster/nixops/plugins/nixops-hetznercloud.nix
@@ -0,0 +1,52 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, unstableGitUpdater
+, poetry-core
+, hcloud
+, nixops
+, typing-extensions
+}:
+
+buildPythonPackage {
+  pname = "nixops-hetznercloud";
+  version = "unstable-2023-02-19";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "lukebfox";
+    repo = "nixops-hetznercloud";
+    rev = "e14f340f7ffe9e2aa7ffbaac0b8a2e3b4cc116b3";
+    hash = "sha256-IsRJUUAfN6YXcue80qlcunkawUtgMiMU8mM6DP+7Cm4=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+    --replace poetry.masonry.api poetry.core.masonry.api \
+    --replace "poetry>=" "poetry-core>="
+  '';
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  buildInputs = [
+    nixops
+  ];
+
+  propagatedBuildInputs = [
+    hcloud
+    typing-extensions
+  ];
+
+  pythonImportsCheck = [ "nixops_hetznercloud" ];
+
+  passthru.updateScript = unstableGitUpdater {};
+
+  meta = with lib; {
+    description = "A NixOps plugin supporting Hetzner Cloud deployments";
+    homepage = "https://github.com/lukebfox/nixops-hetznercloud";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ lukebfox ];
+  };
+}
diff --git a/pkgs/applications/networking/cluster/nixops/plugins/nixops-libvirtd.nix b/pkgs/applications/networking/cluster/nixops/plugins/nixops-libvirtd.nix
new file mode 100644
index 00000000000..b3439bf4fe5
--- /dev/null
+++ b/pkgs/applications/networking/cluster/nixops/plugins/nixops-libvirtd.nix
@@ -0,0 +1,50 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, unstableGitUpdater
+, poetry-core
+, libvirt
+, nixops
+}:
+
+buildPythonPackage {
+  pname = "nixops-libvirtd";
+  version = "unstable-2023-09-01";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "nixops-libvirtd";
+    rev = "b59424bf53e74200d684a4bce1ae64d276e793a0";
+    hash = "sha256-HxJu8/hOPI5aCddTpna0mf+emESYN3ZxpTkitfKcfVQ=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+    --replace poetry.masonry.api poetry.core.masonry.api \
+    --replace "poetry>=" "poetry-core>="
+  '';
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  buildInputs = [
+    nixops
+  ];
+
+  propagatedBuildInputs = [
+    libvirt
+  ];
+
+  pythonImportsCheck = [ "nixops_virtd" ];
+
+  passthru.updateScript = unstableGitUpdater {};
+
+  meta = with lib; {
+    description = "NixOps libvirtd backend plugin";
+    homepage = "https://github.com/nix-community/nixops-libvirtd";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ aminechikhaoui ];
+  };
+}
diff --git a/pkgs/applications/networking/cluster/nixops/plugins/nixops-vbox.nix b/pkgs/applications/networking/cluster/nixops/plugins/nixops-vbox.nix
new file mode 100644
index 00000000000..4a9f0351094
--- /dev/null
+++ b/pkgs/applications/networking/cluster/nixops/plugins/nixops-vbox.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, unstableGitUpdater
+, poetry-core
+, nixops
+}:
+
+buildPythonPackage {
+  pname = "nixops-vbox";
+  version = "unstable-2023-08-10";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "nixops-vbox";
+    rev = "baa5f09c9ae9aaf639c95192460ab5dcbe83a883";
+    hash = "sha256-QrxherQO1t0VpYjJSEbntUWVD6GW4MtVHiKINpzHA1M=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+    --replace poetry.masonry.api poetry.core.masonry.api \
+    --replace "poetry>=" "poetry-core>="
+  '';
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  buildInputs = [
+    nixops
+  ];
+
+  pythonImportsCheck = [ "nixopsvbox" ];
+
+  passthru.updateScript = unstableGitUpdater {};
+
+  meta = with lib; {
+    description = "NixOps plugin for VirtualBox VMs";
+    homepage = "https://github.com/nix-community/nixops-vbox";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ aminechikhaoui ];
+  };
+}
diff --git a/pkgs/applications/networking/cluster/nixops/plugins/nixos-modules-contrib.nix b/pkgs/applications/networking/cluster/nixops/plugins/nixos-modules-contrib.nix
new file mode 100644
index 00000000000..5c6e9fec32c
--- /dev/null
+++ b/pkgs/applications/networking/cluster/nixops/plugins/nixos-modules-contrib.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, unstableGitUpdater
+, poetry-core
+, nixops
+}:
+
+buildPythonPackage {
+  pname = "nixos-modules-contrib";
+  version = "unstable-2021-01-20";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "nixos-modules-contrib";
+    rev = "81a1c2ef424dcf596a97b2e46a58ca73a1dd1ff8";
+    hash = "sha256-/RSStpkAxWpUB5saQ8CmQZljFjJyUMOrR1+GiHJR2Tg=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+    --replace poetry.masonry.api poetry.core.masonry.api \
+    --replace "poetry>=" "poetry-core>="
+  '';
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  buildInputs = [
+    nixops
+  ];
+
+  pythonImportsCheck = [ "nixos_modules_contrib" ];
+
+  passthru.updateScript = unstableGitUpdater {};
+
+  meta = with lib; {
+    description = "Useful NixOS modules which may not belong in the Nixpkgs repository itself";
+    homepage = "https://github.com/nix-community/nixos-modules-contrib";
+    license = licenses.lgpl3;
+    maintainers = [];
+  };
+}
diff --git a/pkgs/applications/networking/cluster/nixops/poetry-git-overlay.nix b/pkgs/applications/networking/cluster/nixops/poetry-git-overlay.nix
deleted file mode 100644
index 7de5435ddc4..00000000000
--- a/pkgs/applications/networking/cluster/nixops/poetry-git-overlay.nix
+++ /dev/null
@@ -1,114 +0,0 @@
-{ pkgs }:
-self: super: {
-
-  nixops = super.nixops.overridePythonAttrs (
-    _: {
-      src = pkgs.fetchgit {
-        url = "https://github.com/NixOS/nixops.git";
-        rev = "fc9b55c55da62f949028143b974f67fdc7f40c8b";
-        sha256 = "0f5r17rq3rf3ylp16cq50prn8qmfc1gwpqgqfj491w38sr5sspf8";
-      };
-    }
-  );
-
-  nixops-aws = super.nixops-aws.overridePythonAttrs (
-    _: {
-      src = pkgs.fetchgit {
-        url = "https://github.com/NixOS/nixops-aws.git";
-        rev = "8802d1cda9004ec1362815292c2a8ab95e6d64e8";
-        sha256 = "1rf2dxn4gdm9a91jji4f100y62ap3p3svs6qhxf78319phba6hlb";
-      };
-    }
-  );
-
-  nixops-digitalocean = super.nixops-digitalocean.overridePythonAttrs (
-    _: {
-      src = pkgs.fetchgit {
-        url = "https://github.com/nix-community/nixops-digitalocean.git";
-        rev = "e977b7f11e264a6a2bff2dcbc7b94c6a97b92fff";
-        sha256 = "020fg1kjh3x57dj95micpq6mxjg5j50jy6cs5f10i33ayy3556v8";
-      };
-    }
-  );
-
-  nixops-encrypted-links = super.nixops-encrypted-links.overridePythonAttrs (
-    _: {
-      src = pkgs.fetchgit {
-        url = "https://github.com/nix-community/nixops-encrypted-links.git";
-        rev = "e2f196fce15fcfb00d18c055e1ac53aec33b8fb1";
-        sha256 = "12ynqwd5ad6wfyv6sma55wnmrlr8i14kd5d42zqv4zl23h0xnd6m";
-      };
-    }
-  );
-
-  nixops-gcp = super.nixops-gcp.overridePythonAttrs (
-    _: {
-      src = pkgs.fetchgit {
-        url = "https://github.com/nix-community/nixops-gce.git";
-        rev = "d13cb794aef763338f544010ceb1816fe31d7f42";
-        sha256 = "0i57qhiga4nr0ms9gj615l599vxy78lzw7hap4rbzbhl5bl1yijj";
-      };
-    }
-  );
-
-  nixops-hercules-ci = super.nixops-hercules-ci.overridePythonAttrs (
-    _: {
-      src = pkgs.fetchgit {
-        url = "https://github.com/hercules-ci/nixops-hercules-ci.git";
-        rev = "e601d5baffd003fd5f22deeaea0cb96444b054dc";
-        sha256 = "0rcpv5hc6l9ia8lq8ivwa80b2pwssmdz8an25lhr4i2472mpx1p0";
-      };
-    }
-  );
-
-  nixops-hetzner = super.nixops-hetzner.overridePythonAttrs (
-    _: {
-      src = pkgs.fetchgit {
-        url = "https://github.com/NixOS/nixops-hetzner";
-        rev = "bc7a68070c7371468bcc8bf6e36baebc6bd2da35";
-        sha256 = "0kmzv5dzh828yh5jwjs5klfslx3lklrqvpvbh29b398m5r9bbqkn";
-      };
-    }
-  );
-
-  nixops-hetznercloud = super.nixops-hetznercloud.overridePythonAttrs (
-    _: {
-      src = pkgs.fetchgit {
-        url = "https://github.com/lukebfox/nixops-hetznercloud.git";
-        rev = "e14f340f7ffe9e2aa7ffbaac0b8a2e3b4cc116b3";
-        sha256 = "0vhapgzhqfk3y8a26ck09g0ilydsbjlx5g77f8bscdqz818lki12";
-      };
-    }
-  );
-
-  nixops-virtd = super.nixops-virtd.overridePythonAttrs (
-    _: {
-      src = pkgs.fetchgit {
-        url = "https://github.com/nix-community/nixops-libvirtd.git";
-        rev = "be1ea32e02d8abb3dbe1b09b7c5a7419a7412991";
-        sha256 = "1mklm3lmicvhs0vcib3ss21an45wk24m1mkcwy1zvbpbmvhdz2m4";
-      };
-    }
-  );
-
-  nixopsvbox = super.nixopsvbox.overridePythonAttrs (
-    _: {
-      src = pkgs.fetchgit {
-        url = "https://github.com/nix-community/nixops-vbox.git";
-        rev = "2729672865ebe2aa973c062a3fbddda8c1359da0";
-        sha256 = "07bmrbg3g2prnba2kwg1rg6rvmnx1vzc538y2q3g04s958hala56";
-      };
-    }
-  );
-
-  nixos-modules-contrib = super.nixos-modules-contrib.overridePythonAttrs (
-    _: {
-      src = pkgs.fetchgit {
-        url = "https://github.com/nix-community/nixos-modules-contrib.git";
-        rev = "81a1c2ef424dcf596a97b2e46a58ca73a1dd1ff8";
-        sha256 = "0f6ra5r8i1jz8ymw6l3j68b676a1lv0466lv0xa6mi80k6v9457x";
-      };
-    }
-  );
-
-}
diff --git a/pkgs/applications/networking/cluster/nixops/poetry.lock b/pkgs/applications/networking/cluster/nixops/poetry.lock
deleted file mode 100644
index 900875191e3..00000000000
--- a/pkgs/applications/networking/cluster/nixops/poetry.lock
+++ /dev/null
@@ -1,731 +0,0 @@
-# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand.
-
-[[package]]
-name = "apache-libcloud"
-version = "3.7.0"
-description = "A standard Python library that abstracts away differences among multiple cloud provider APIs. For more information and documentation, please see https://libcloud.apache.org"
-optional = false
-python-versions = ">=3.6, <4"
-files = [
-    {file = "apache-libcloud-3.7.0.tar.gz", hash = "sha256:148a9e50069654432a7d34997954e91434dd38ebf68832eb9c75d442b3e62fad"},
-    {file = "apache_libcloud-3.7.0-py2.py3-none-any.whl", hash = "sha256:027a9aff2c01db9c8e6f9f94b6eb44b3153d82702c42bfbe7af5624dabf1f950"},
-]
-
-[package.dependencies]
-requests = ">=2.26.0"
-
-[[package]]
-name = "boto"
-version = "2.49.0"
-description = "Amazon Web Services Library"
-optional = false
-python-versions = "*"
-files = [
-    {file = "boto-2.49.0-py2.py3-none-any.whl", hash = "sha256:147758d41ae7240dc989f0039f27da8ca0d53734be0eb869ef16e3adcfa462e8"},
-    {file = "boto-2.49.0.tar.gz", hash = "sha256:ea0d3b40a2d852767be77ca343b58a9e3a4b00d9db440efb8da74b4e58025e5a"},
-]
-
-[[package]]
-name = "boto3"
-version = "1.28.22"
-description = "The AWS SDK for Python"
-optional = false
-python-versions = ">= 3.7"
-files = [
-    {file = "boto3-1.28.22-py3-none-any.whl", hash = "sha256:0c1c1d19232018ac49fd2c0a94aa0b802f5d222e89448ff50734626bce454b32"},
-    {file = "boto3-1.28.22.tar.gz", hash = "sha256:af1ce129f462cdc8dfb1a1c559d7ed725e51344fb0ae4a56d9453196bf416555"},
-]
-
-[package.dependencies]
-botocore = ">=1.31.22,<1.32.0"
-jmespath = ">=0.7.1,<2.0.0"
-s3transfer = ">=0.6.0,<0.7.0"
-
-[package.extras]
-crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
-
-[[package]]
-name = "botocore"
-version = "1.31.22"
-description = "Low-level, data-driven core of boto 3."
-optional = false
-python-versions = ">= 3.7"
-files = [
-    {file = "botocore-1.31.22-py3-none-any.whl", hash = "sha256:b91025ca1a16b13ae662bdb46e7c16d2c53619df23bf3583a43791519da14870"},
-    {file = "botocore-1.31.22.tar.gz", hash = "sha256:d193ab0742ddc4af3a3994af4ec993acf5ac75460f298880fe869765e7bc578d"},
-]
-
-[package.dependencies]
-jmespath = ">=0.7.1,<2.0.0"
-python-dateutil = ">=2.1,<3.0.0"
-urllib3 = ">=1.25.4,<1.27"
-
-[package.extras]
-crt = ["awscrt (==0.16.26)"]
-
-[[package]]
-name = "certifi"
-version = "2023.7.22"
-description = "Python package for providing Mozilla's CA Bundle."
-optional = false
-python-versions = ">=3.6"
-files = [
-    {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"},
-    {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"},
-]
-
-[[package]]
-name = "cffi"
-version = "1.15.1"
-description = "Foreign Function Interface for Python calling C code."
-optional = false
-python-versions = "*"
-files = [
-    {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"},
-    {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"},
-    {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"},
-    {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"},
-    {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"},
-    {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"},
-    {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"},
-    {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"},
-    {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"},
-    {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"},
-    {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"},
-    {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"},
-    {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"},
-    {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"},
-    {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"},
-    {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"},
-    {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"},
-    {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"},
-    {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"},
-    {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"},
-    {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"},
-    {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"},
-    {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"},
-    {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"},
-    {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"},
-    {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"},
-    {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"},
-    {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"},
-    {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"},
-    {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"},
-    {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"},
-    {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"},
-    {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"},
-    {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"},
-    {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"},
-    {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"},
-    {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"},
-    {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"},
-    {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"},
-    {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"},
-    {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"},
-    {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"},
-    {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"},
-    {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"},
-    {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"},
-    {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"},
-    {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"},
-    {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"},
-    {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"},
-    {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"},
-    {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"},
-    {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"},
-    {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"},
-    {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"},
-    {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"},
-    {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"},
-    {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"},
-    {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"},
-    {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"},
-    {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"},
-    {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"},
-    {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"},
-    {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"},
-    {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"},
-]
-
-[package.dependencies]
-pycparser = "*"
-
-[[package]]
-name = "charset-normalizer"
-version = "3.2.0"
-description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
-optional = false
-python-versions = ">=3.7.0"
-files = [
-    {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"},
-    {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"},
-]
-
-[[package]]
-name = "cryptography"
-version = "40.0.1"
-description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
-optional = false
-python-versions = ">=3.6"
-files = [
-    {file = "cryptography-40.0.1-cp36-abi3-macosx_10_12_universal2.whl", hash = "sha256:918cb89086c7d98b1b86b9fdb70c712e5a9325ba6f7d7cfb509e784e0cfc6917"},
-    {file = "cryptography-40.0.1-cp36-abi3-macosx_10_12_x86_64.whl", hash = "sha256:9618a87212cb5200500e304e43691111570e1f10ec3f35569fdfcd17e28fd797"},
-    {file = "cryptography-40.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a4805a4ca729d65570a1b7cac84eac1e431085d40387b7d3bbaa47e39890b88"},
-    {file = "cryptography-40.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63dac2d25c47f12a7b8aa60e528bfb3c51c5a6c5a9f7c86987909c6c79765554"},
-    {file = "cryptography-40.0.1-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0a4e3406cfed6b1f6d6e87ed243363652b2586b2d917b0609ca4f97072994405"},
-    {file = "cryptography-40.0.1-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1e0af458515d5e4028aad75f3bb3fe7a31e46ad920648cd59b64d3da842e4356"},
-    {file = "cryptography-40.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d8aa3609d337ad85e4eb9bb0f8bcf6e4409bfb86e706efa9a027912169e89122"},
-    {file = "cryptography-40.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cf91e428c51ef692b82ce786583e214f58392399cf65c341bc7301d096fa3ba2"},
-    {file = "cryptography-40.0.1-cp36-abi3-win32.whl", hash = "sha256:650883cc064297ef3676b1db1b7b1df6081794c4ada96fa457253c4cc40f97db"},
-    {file = "cryptography-40.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:a805a7bce4a77d51696410005b3e85ae2839bad9aa38894afc0aa99d8e0c3160"},
-    {file = "cryptography-40.0.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cd033d74067d8928ef00a6b1327c8ea0452523967ca4463666eeba65ca350d4c"},
-    {file = "cryptography-40.0.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d36bbeb99704aabefdca5aee4eba04455d7a27ceabd16f3b3ba9bdcc31da86c4"},
-    {file = "cryptography-40.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:32057d3d0ab7d4453778367ca43e99ddb711770477c4f072a51b3ca69602780a"},
-    {file = "cryptography-40.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:f5d7b79fa56bc29580faafc2ff736ce05ba31feaa9d4735048b0de7d9ceb2b94"},
-    {file = "cryptography-40.0.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7c872413353c70e0263a9368c4993710070e70ab3e5318d85510cc91cce77e7c"},
-    {file = "cryptography-40.0.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:28d63d75bf7ae4045b10de5413fb1d6338616e79015999ad9cf6fc538f772d41"},
-    {file = "cryptography-40.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6f2bbd72f717ce33100e6467572abaedc61f1acb87b8d546001328d7f466b778"},
-    {file = "cryptography-40.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cc3a621076d824d75ab1e1e530e66e7e8564e357dd723f2533225d40fe35c60c"},
-    {file = "cryptography-40.0.1.tar.gz", hash = "sha256:2803f2f8b1e95f614419926c7e6f55d828afc614ca5ed61543877ae668cc3472"},
-]
-
-[package.dependencies]
-cffi = ">=1.12"
-
-[package.extras]
-docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"]
-docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"]
-pep8test = ["black", "check-manifest", "mypy", "ruff"]
-sdist = ["setuptools-rust (>=0.11.4)"]
-ssh = ["bcrypt (>=3.1.5)"]
-test = ["iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-shard (>=0.1.2)", "pytest-subtests", "pytest-xdist"]
-test-randomorder = ["pytest-randomly"]
-tox = ["tox"]
-
-[[package]]
-name = "hcloud"
-version = "1.18.2"
-description = "Official Hetzner Cloud python library"
-optional = false
-python-versions = ">3.5"
-files = [
-    {file = "hcloud-1.18.2-py2.py3-none-any.whl", hash = "sha256:fcd73c7aab1d6e729333697e5214b26727775eccdbfb50effd1863c3424caa59"},
-    {file = "hcloud-1.18.2.tar.gz", hash = "sha256:37bd5ba56387e3c491c5babd3e08ab91d5f0390cd5e880e4dfea19e21681bc9e"},
-]
-
-[package.dependencies]
-python-dateutil = ">=2.7.5"
-requests = ">=2.20"
-
-[package.extras]
-docs = ["Sphinx (==1.8.1)", "sphinx-rtd-theme (==0.4.2)"]
-
-[[package]]
-name = "hetzner"
-version = "0.8.3"
-description = "High level access to the Hetzner robot"
-optional = false
-python-versions = "*"
-files = [
-    {file = "hetzner-0.8.3.tar.gz", hash = "sha256:9a43dbbeb4a1f3efc86c5fe1c1d7039aaa635dfdb829506ec3aa34382d3a7114"},
-]
-
-[[package]]
-name = "idna"
-version = "3.4"
-description = "Internationalized Domain Names in Applications (IDNA)"
-optional = false
-python-versions = ">=3.5"
-files = [
-    {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
-    {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
-]
-
-[[package]]
-name = "jmespath"
-version = "1.0.1"
-description = "JSON Matching Expressions"
-optional = false
-python-versions = ">=3.7"
-files = [
-    {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"},
-    {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"},
-]
-
-[[package]]
-name = "jsonpickle"
-version = "3.0.1"
-description = "Python library for serializing any arbitrary object graph into JSON"
-optional = false
-python-versions = ">=3.7"
-files = [
-    {file = "jsonpickle-3.0.1-py2.py3-none-any.whl", hash = "sha256:130d8b293ea0add3845de311aaba55e6d706d0bb17bc123bd2c8baf8a39ac77c"},
-    {file = "jsonpickle-3.0.1.tar.gz", hash = "sha256:032538804795e73b94ead410800ac387fdb6de98f8882ac957fcd247e3a85200"},
-]
-
-[package.extras]
-docs = ["jaraco.packaging (>=3.2)", "rst.linker (>=1.9)", "sphinx"]
-testing = ["ecdsa", "feedparser", "gmpy2", "numpy", "pandas", "pymongo", "pytest (>=3.5,!=3.7.3)", "pytest-black-multipy", "pytest-checkdocs (>=1.2.3)", "pytest-cov", "pytest-flake8 (>=1.1.1)", "scikit-learn", "sqlalchemy"]
-testing-libs = ["simplejson", "ujson"]
-
-[[package]]
-name = "libvirt-python"
-version = "9.6.0"
-description = "The libvirt virtualization API python binding"
-optional = false
-python-versions = ">=3.6"
-files = [
-    {file = "libvirt-python-9.6.0.tar.gz", hash = "sha256:53422d8e3110139655c3d9c2ff2602b238f8a39b7bf61a92a620119b45550a99"},
-]
-
-[[package]]
-name = "nixops"
-version = "2.0.0"
-description = "NixOS cloud provisioning and deployment tool"
-optional = false
-python-versions = "^3.10"
-files = []
-develop = false
-
-[package.dependencies]
-pluggy = "^1.0.0"
-PrettyTable = "^0.7.2"
-typeguard = "^2.7.1"
-typing-extensions = "^3.7.4"
-
-[package.source]
-type = "git"
-url = "https://github.com/NixOS/nixops.git"
-reference = "master"
-resolved_reference = "fc9b55c55da62f949028143b974f67fdc7f40c8b"
-
-[[package]]
-name = "nixops-aws"
-version = "1.0"
-description = "NixOps AWS plugin"
-optional = false
-python-versions = "^3.7"
-files = []
-develop = false
-
-[package.dependencies]
-boto = "^2.49.0"
-boto3 = "^1.13.7"
-nixops = {git = "https://github.com/NixOS/nixops.git", rev = "master"}
-nixos-modules-contrib = {git = "https://github.com/nix-community/nixos-modules-contrib.git", rev = "master"}
-typing-extensions = "^3.7.4"
-
-[package.source]
-type = "git"
-url = "https://github.com/NixOS/nixops-aws.git"
-reference = "HEAD"
-resolved_reference = "8802d1cda9004ec1362815292c2a8ab95e6d64e8"
-
-[[package]]
-name = "nixops-digitalocean"
-version = "2.0"
-description = "NixOps plugin for Digital Ocean"
-optional = false
-python-versions = "^3.7"
-files = []
-develop = false
-
-[package.dependencies]
-nixops = {git = "https://github.com/NixOS/nixops.git"}
-python-digitalocean = "^1.15.0"
-
-[package.source]
-type = "git"
-url = "https://github.com/nix-community/nixops-digitalocean.git"
-reference = "HEAD"
-resolved_reference = "e977b7f11e264a6a2bff2dcbc7b94c6a97b92fff"
-
-[[package]]
-name = "nixops-encrypted-links"
-version = "1.0"
-description = "Encrypted links support for NixOps"
-optional = false
-python-versions = "^3.7"
-files = []
-develop = false
-
-[package.dependencies]
-nixops = {git = "https://github.com/NixOS/nixops.git"}
-
-[package.source]
-type = "git"
-url = "https://github.com/nix-community/nixops-encrypted-links.git"
-reference = "HEAD"
-resolved_reference = "e2f196fce15fcfb00d18c055e1ac53aec33b8fb1"
-
-[[package]]
-name = "nixops-gcp"
-version = "1.0"
-description = "NixOps backend for Google Cloud Platform"
-optional = false
-python-versions = "^3.10"
-files = []
-develop = false
-
-[package.dependencies]
-apache-libcloud = "^3.7.0"
-cryptography = "40.0.1"
-nixops = {git = "https://github.com/NixOS/nixops.git", rev = "master"}
-nixos-modules-contrib = {git = "https://github.com/nix-community/nixos-modules-contrib.git", rev = "master"}
-
-[package.source]
-type = "git"
-url = "https://github.com/nix-community/nixops-gce.git"
-reference = "HEAD"
-resolved_reference = "d13cb794aef763338f544010ceb1816fe31d7f42"
-
-[[package]]
-name = "nixops-hercules-ci"
-version = "0.1.0"
-description = ""
-optional = false
-python-versions = "^3.8"
-files = []
-develop = false
-
-[package.dependencies]
-nixops = {git = "https://github.com/NixOS/nixops.git"}
-
-[package.source]
-type = "git"
-url = "https://github.com/hercules-ci/nixops-hercules-ci.git"
-reference = "HEAD"
-resolved_reference = "e601d5baffd003fd5f22deeaea0cb96444b054dc"
-
-[[package]]
-name = "nixops-hetzner"
-version = "1.0"
-description = "NixOS deployment tool, but for hetzner"
-optional = false
-python-versions = "^3.7"
-files = []
-develop = false
-
-[package.dependencies]
-hetzner = "0.8.3"
-nixops = {git = "https://github.com/NixOS/nixops.git", rev = "master"}
-nixos-modules-contrib = {git = "https://github.com/nix-community/nixos-modules-contrib.git", rev = "master"}
-typing-extensions = "^3.7.4"
-
-[package.source]
-type = "git"
-url = "https://github.com/NixOS/nixops-hetzner"
-reference = "HEAD"
-resolved_reference = "bc7a68070c7371468bcc8bf6e36baebc6bd2da35"
-
-[[package]]
-name = "nixops-hetznercloud"
-version = "0.1.3"
-description = "NixOps Hetzner Cloud plugin"
-optional = false
-python-versions = "^3.10"
-files = []
-develop = false
-
-[package.dependencies]
-hcloud = "1.18.2"
-nixops = {git = "https://github.com/NixOS/nixops.git", rev = "master"}
-typing-extensions = "^3.7.4"
-
-[package.source]
-type = "git"
-url = "https://github.com/lukebfox/nixops-hetznercloud.git"
-reference = "HEAD"
-resolved_reference = "e14f340f7ffe9e2aa7ffbaac0b8a2e3b4cc116b3"
-
-[[package]]
-name = "nixops-virtd"
-version = "1.0"
-description = "NixOps plugin for virtd"
-optional = false
-python-versions = "^3.10"
-files = []
-develop = false
-
-[package.dependencies]
-libvirt-python = "^9.0"
-nixops = {git = "https://github.com/NixOS/nixops.git"}
-
-[package.source]
-type = "git"
-url = "https://github.com/nix-community/nixops-libvirtd.git"
-reference = "HEAD"
-resolved_reference = "be1ea32e02d8abb3dbe1b09b7c5a7419a7412991"
-
-[[package]]
-name = "nixopsvbox"
-version = "1.7"
-description = "NixOps backend for VirtualBox"
-optional = false
-python-versions = "^3.7"
-files = []
-develop = false
-
-[package.dependencies]
-nixops = {git = "https://github.com/NixOS/nixops.git", rev = "master"}
-
-[package.source]
-type = "git"
-url = "https://github.com/nix-community/nixops-vbox.git"
-reference = "HEAD"
-resolved_reference = "2729672865ebe2aa973c062a3fbddda8c1359da0"
-
-[[package]]
-name = "nixos-modules-contrib"
-version = "0.1.0"
-description = "NixOS modules that don't quite belong in NixOS."
-optional = false
-python-versions = "^3.7"
-files = []
-develop = false
-
-[package.dependencies]
-nixops = {git = "https://github.com/NixOS/nixops.git", rev = "master"}
-
-[package.source]
-type = "git"
-url = "https://github.com/nix-community/nixos-modules-contrib.git"
-reference = "master"
-resolved_reference = "81a1c2ef424dcf596a97b2e46a58ca73a1dd1ff8"
-
-[[package]]
-name = "pluggy"
-version = "1.2.0"
-description = "plugin and hook calling mechanisms for python"
-optional = false
-python-versions = ">=3.7"
-files = [
-    {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"},
-    {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"},
-]
-
-[package.extras]
-dev = ["pre-commit", "tox"]
-testing = ["pytest", "pytest-benchmark"]
-
-[[package]]
-name = "prettytable"
-version = "0.7.2"
-description = "A simple Python library for easily displaying tabular data in a visually appealing ASCII table format."
-optional = false
-python-versions = "*"
-files = [
-    {file = "prettytable-0.7.2.tar.bz2", hash = "sha256:853c116513625c738dc3ce1aee148b5b5757a86727e67eff6502c7ca59d43c36"},
-    {file = "prettytable-0.7.2.tar.gz", hash = "sha256:2d5460dc9db74a32bcc8f9f67de68b2c4f4d2f01fa3bd518764c69156d9cacd9"},
-    {file = "prettytable-0.7.2.zip", hash = "sha256:a53da3b43d7a5c229b5e3ca2892ef982c46b7923b51e98f0db49956531211c4f"},
-]
-
-[[package]]
-name = "pycparser"
-version = "2.21"
-description = "C parser in Python"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-files = [
-    {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
-    {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
-]
-
-[[package]]
-name = "python-dateutil"
-version = "2.8.2"
-description = "Extensions to the standard Python datetime module"
-optional = false
-python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
-files = [
-    {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
-    {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
-]
-
-[package.dependencies]
-six = ">=1.5"
-
-[[package]]
-name = "python-digitalocean"
-version = "1.17.0"
-description = "digitalocean.com API to manage Droplets and Images"
-optional = false
-python-versions = "*"
-files = [
-    {file = "python-digitalocean-1.17.0.tar.gz", hash = "sha256:107854fde1aafa21774e8053cf253b04173613c94531f75d5a039ad770562b24"},
-    {file = "python_digitalocean-1.17.0-py3-none-any.whl", hash = "sha256:0032168e022e85fca314eb3f8dfaabf82087f2ed40839eb28f1eeeeca5afb1fa"},
-]
-
-[package.dependencies]
-jsonpickle = "*"
-requests = "*"
-
-[[package]]
-name = "requests"
-version = "2.31.0"
-description = "Python HTTP for Humans."
-optional = false
-python-versions = ">=3.7"
-files = [
-    {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
-    {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
-]
-
-[package.dependencies]
-certifi = ">=2017.4.17"
-charset-normalizer = ">=2,<4"
-idna = ">=2.5,<4"
-urllib3 = ">=1.21.1,<3"
-
-[package.extras]
-socks = ["PySocks (>=1.5.6,!=1.5.7)"]
-use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
-
-[[package]]
-name = "s3transfer"
-version = "0.6.1"
-description = "An Amazon S3 Transfer Manager"
-optional = false
-python-versions = ">= 3.7"
-files = [
-    {file = "s3transfer-0.6.1-py3-none-any.whl", hash = "sha256:3c0da2d074bf35d6870ef157158641178a4204a6e689e82546083e31e0311346"},
-    {file = "s3transfer-0.6.1.tar.gz", hash = "sha256:640bb492711f4c0c0905e1f62b6aaeb771881935ad27884852411f8e9cacbca9"},
-]
-
-[package.dependencies]
-botocore = ">=1.12.36,<2.0a.0"
-
-[package.extras]
-crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"]
-
-[[package]]
-name = "six"
-version = "1.16.0"
-description = "Python 2 and 3 compatibility utilities"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
-files = [
-    {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
-    {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
-]
-
-[[package]]
-name = "typeguard"
-version = "2.13.3"
-description = "Run-time type checker for Python"
-optional = false
-python-versions = ">=3.5.3"
-files = [
-    {file = "typeguard-2.13.3-py3-none-any.whl", hash = "sha256:5e3e3be01e887e7eafae5af63d1f36c849aaa94e3a0112097312aabfa16284f1"},
-    {file = "typeguard-2.13.3.tar.gz", hash = "sha256:00edaa8da3a133674796cf5ea87d9f4b4c367d77476e185e80251cc13dfbb8c4"},
-]
-
-[package.extras]
-doc = ["sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"]
-test = ["mypy", "pytest", "typing-extensions"]
-
-[[package]]
-name = "typing-extensions"
-version = "3.10.0.2"
-description = "Backported and Experimental Type Hints for Python 3.5+"
-optional = false
-python-versions = "*"
-files = [
-    {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
-    {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
-    {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
-]
-
-[[package]]
-name = "urllib3"
-version = "1.26.16"
-description = "HTTP library with thread-safe connection pooling, file post, and more."
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
-files = [
-    {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"},
-    {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"},
-]
-
-[package.extras]
-brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
-secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
-socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
-
-[metadata]
-lock-version = "2.0"
-python-versions = "^3.10"
-content-hash = "3d42a61f93a1a6b6816e317a78f3385271bd838430200f69154ebc5bebeb6162"
diff --git a/pkgs/applications/networking/cluster/nixops/pyproject.toml b/pkgs/applications/networking/cluster/nixops/pyproject.toml
deleted file mode 100644
index 84739cb09dc..00000000000
--- a/pkgs/applications/networking/cluster/nixops/pyproject.toml
+++ /dev/null
@@ -1,28 +0,0 @@
-[tool.poetry]
-name = "nixopsenv"
-version = "2.0.0"
-description = "NixOps 2.0"
-authors = ["Adam Hoese <adam.hose@tweag.io>"]
-
-[tool.poetry.dependencies]
-python = "^3.10"
-nixops = {git = "https://github.com/NixOS/nixops.git"}
-nixops-aws = {git = "https://github.com/NixOS/nixops-aws.git"}
-nixops-digitalocean = {git = "https://github.com/nix-community/nixops-digitalocean.git"}
-nixops-encrypted-links = {git = "https://github.com/nix-community/nixops-encrypted-links.git"}
-nixops-gcp = {git = "https://github.com/nix-community/nixops-gce.git"}
-nixops-hercules-ci = {git = "https://github.com/hercules-ci/nixops-hercules-ci.git"}
-nixops-hetzner = {git = "https://github.com/NixOS/nixops-hetzner"}
-nixops-hetznercloud = {git = "https://github.com/lukebfox/nixops-hetznercloud.git"}
-nixopsvbox = {git = "https://github.com/nix-community/nixops-vbox.git"}
-nixops-virtd = {git = "https://github.com/nix-community/nixops-libvirtd.git"}
-
-# poetry lock would download an excessive number of wheels looking for a compatible version, so
-# we pin a feasible range here. This does not represent a real constraint on the version and
-# would be ok to remove/update/ignore in future upgrades. Note that a botocore wheel is about 50MB.
-boto3 = "^1.26"
-botocore = "^1.29"
-
-[build-system]
-requires = ["poetry>=0.12"]
-build-backend = "poetry.masonry.api"
diff --git a/pkgs/applications/networking/cluster/nixops/shell.nix b/pkgs/applications/networking/cluster/nixops/shell.nix
deleted file mode 100644
index a7926d0fd53..00000000000
--- a/pkgs/applications/networking/cluster/nixops/shell.nix
+++ /dev/null
@@ -1,11 +0,0 @@
-{ pkgs ? import <nixpkgs> { } }:
-
-pkgs.mkShell {
-  packages = [
-    pkgs.python310
-    pkgs.poetry2nix.cli
-    pkgs.pkg-config
-    pkgs.libvirt
-    pkgs.poetry
-  ];
-}
diff --git a/pkgs/applications/networking/cluster/nixops/unwrapped.nix b/pkgs/applications/networking/cluster/nixops/unwrapped.nix
new file mode 100644
index 00000000000..c70da930469
--- /dev/null
+++ b/pkgs/applications/networking/cluster/nixops/unwrapped.nix
@@ -0,0 +1,65 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, unstableGitUpdater
+, poetry-core
+, sphinx
+, pluggy
+, prettytable
+, typeguard
+, typing-extensions
+, nixosTests
+}:
+
+buildPythonApplication rec {
+  pname = "nixops";
+  version = "unstable-2023-10-26";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "NixOS";
+    repo = "nixops";
+    rev = "2cfc2cb4fa9ecb89a4274574ff7f63ea61782498";
+    hash = "sha256-4uvQQkERZFEeRJjMAcyLYJzNvH0rNiiJ+5BDQmD58gI=";
+  };
+
+  postPatch = ''
+    substituteInPlace nixops/args.py --replace "@version@" "${version}-pre-${lib.substring 0 7 src.rev or "dirty"}"
+  '';
+
+  nativeBuildInputs = [
+    poetry-core
+    sphinx
+  ];
+
+  propagatedBuildInputs = [
+    pluggy
+    prettytable
+    typeguard
+    typing-extensions
+  ];
+
+  postInstall = ''
+    doc_cache=$(mktemp -d)
+    sphinx-build -b man -d $doc_cache doc/ $out/share/man/man1
+
+    html=$(mktemp -d)
+    sphinx-build -b html -d $doc_cache doc/ $out/share/nixops/doc
+  '';
+
+  pythonImportsCheck = [ "nixops" ];
+
+  passthru = {
+    tests.nixops = nixosTests.nixops.unstable;
+    updateScript = unstableGitUpdater {};
+  };
+
+  meta = with lib; {
+    description = "A tool for deploying to NixOS machines in a network or cloud";
+    homepage = "https://github.com/NixOS/nixops";
+    license = licenses.lgpl3Only;
+    maintainers = with lib.maintainers; [ adisbladis aminechikhaoui roberth ];
+    platforms = lib.platforms.unix;
+    mainProgram = "nixops";
+  };
+}
diff --git a/pkgs/applications/networking/cluster/nixops/update b/pkgs/applications/networking/cluster/nixops/update
deleted file mode 100755
index 1d1fd93fdbe..00000000000
--- a/pkgs/applications/networking/cluster/nixops/update
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env nix-shell
-#! nix-shell -I nixpkgs=../../../../../. -i bash
-set -eux
-
-rm -f ./poetry.lock ./poetry-git-overlay.nix
-
-poetry lock
-
-# builtins.fetchGit is disabled in restricted eval
-# Pin fixed-output derivations from lock file
-poetry2nix lock