about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/plugins.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/plugins.nix')
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/plugins.nix70
1 files changed, 70 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/plugins.nix b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/plugins.nix
new file mode 100644
index 000000000000..b5e807c6e2d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/plugins.nix
@@ -0,0 +1,70 @@
+{ pkgs, lib }:
+let
+  inherit (pkgs) stdenv;
+
+  mkPluginDrv =
+    { self
+    , plugins
+    , drv
+    , postInstall ? ""
+    , nativeBuildInputs ? [ ]
+    , buildInputs ? [ ]
+    }:
+    let
+      env = self.python.withPackages (ps: plugins);
+    in
+    stdenv.mkDerivation {
+      pname = drv.pname + "-with-plugins";
+
+      inherit (drv) src version meta;
+
+      buildInputs = drv.buildInputs ++ drv.propagatedBuildInputs ++ buildInputs;
+      nativeBuildInputs = drv.nativeBuildInputs ++ nativeBuildInputs;
+
+      dontConfigure = true;
+      dontBuild = true;
+      dontUsePythonRecompileBytecode = true;
+
+      passthru = {
+        inherit (drv.passthru) withPlugins;
+        inherit plugins;
+      };
+
+      # Link bin/ from environment, but only if it's in a plugin
+      installPhase = ''
+        runHook preInstall
+
+        mkdir -p $out/bin
+
+        for bindir in ${lib.concatStringsSep " " (map (d: "${lib.getBin d}/bin") plugins)}; do
+          for bin in $bindir/*; do
+            ln -s ${env}/bin/$(basename $bin) $out/bin/
+          done
+        done
+
+        runHook postInstall
+      '';
+
+      inherit postInstall;
+    };
+
+in
+{
+
+  # Provide the `withPlugins` function
+  toPluginAble = self: { drv
+                       , finalDrv
+                       , postInstall ? ""
+                       , nativeBuildInputs ? [ ]
+                       , buildInputs ? [ ]
+                       }: drv.overridePythonAttrs (old: {
+    passthru = old.passthru // {
+      withPlugins = pluginFn: mkPluginDrv {
+        plugins = [ finalDrv ] ++ pluginFn self;
+        inherit self postInstall nativeBuildInputs buildInputs;
+        drv = finalDrv;
+      };
+    };
+  });
+
+}