summary refs log tree commit diff
diff options
context:
space:
mode:
authoradisbladis <adisbladis@gmail.com>2023-04-01 19:23:02 +1300
committeradisbladis <adisbladis@gmail.com>2023-04-01 19:34:05 +1300
commit8d8dd6fdbf6406c82faee1b3293a0b491b3b3751 (patch)
tree9a82fb069f3145a6809963dd44f1c919c774f4bc
parentcb80417aadc630a96d05c1ca159c87c4e00481ad (diff)
downloadnixpkgs-8d8dd6fdbf6406c82faee1b3293a0b491b3b3751.tar
nixpkgs-8d8dd6fdbf6406c82faee1b3293a0b491b3b3751.tar.gz
nixpkgs-8d8dd6fdbf6406c82faee1b3293a0b491b3b3751.tar.bz2
nixpkgs-8d8dd6fdbf6406c82faee1b3293a0b491b3b3751.tar.lz
nixpkgs-8d8dd6fdbf6406c82faee1b3293a0b491b3b3751.tar.xz
nixpkgs-8d8dd6fdbf6406c82faee1b3293a0b491b3b3751.tar.zst
nixpkgs-8d8dd6fdbf6406c82faee1b3293a0b491b3b3751.zip
platformio: make multi-output
Currently udev rules symlinks against platformio sources, pulling in the platformio source tree into the runtime closure.
Previous to platformio-core being exposed separately from platformio this also meant that you had no ergonomic way to avoid platformio in the system closure, even though you only wanted the udev rules.

We can avoid this by making platformio-core multi output, making it trivial to depend only on the udev rules.
-rw-r--r--pkgs/development/embedded/platformio/chrootenv.nix6
-rw-r--r--pkgs/development/embedded/platformio/core.nix9
-rw-r--r--pkgs/development/embedded/platformio/default.nix2
-rw-r--r--pkgs/development/embedded/platformio/missing-udev-rules-nixos.patch4
4 files changed, 13 insertions, 8 deletions
diff --git a/pkgs/development/embedded/platformio/chrootenv.nix b/pkgs/development/embedded/platformio/chrootenv.nix
index 9e84a8d6ba4..3f4a7e7385d 100644
--- a/pkgs/development/embedded/platformio/chrootenv.nix
+++ b/pkgs/development/embedded/platformio/chrootenv.nix
@@ -1,4 +1,4 @@
-{ lib, buildFHSUserEnv, version, src }:
+{ lib, buildFHSUserEnv, platformio-core }:
 
 let
   pio-pkgs = pkgs:
@@ -34,10 +34,8 @@ buildFHSUserEnv {
   };
 
   extraInstallCommands = ''
-    mkdir -p $out/lib/udev/rules.d
-
     ln -s $out/bin/platformio $out/bin/pio
-    ln -s ${src}/platformio/assets/system/99-platformio-udev.rules $out/lib/udev/rules.d/99-platformio-udev.rules
+    ln -s ${platformio-core.udev}/lib $out/lib
   '';
 
   runScript = "platformio";
diff --git a/pkgs/development/embedded/platformio/core.nix b/pkgs/development/embedded/platformio/core.nix
index 00ee07a5fc5..c0127fae5ac 100644
--- a/pkgs/development/embedded/platformio/core.nix
+++ b/pkgs/development/embedded/platformio/core.nix
@@ -10,6 +10,8 @@ with python3.pkgs; buildPythonApplication rec {
   pname = "platformio";
   inherit version src;
 
+  outputs = [ "out" "udev" ];
+
   patches = [
     ./fix-searchpath.patch
     ./use-local-spdx-license-list.patch
@@ -60,6 +62,13 @@ with python3.pkgs; buildPythonApplication rec {
     pytestCheckHook
   ];
 
+  # Install udev rules into a separate output so all of platformio-core is not a dependency if
+  # you want to use the udev rules on NixOS but not install platformio in your system packages.
+  postInstall = ''
+    mkdir -p $udev/lib/udev/rules.d/99-platformio-udev.rules
+    cp platformio/assets/system/99-platformio-udev.rules $udev/lib/udev/rules.d/99-platformio-udev.rules
+  '';
+
   disabledTestPaths = [
     "tests/commands/pkg/test_install.py"
     "tests/commands/pkg/test_list.py"
diff --git a/pkgs/development/embedded/platformio/default.nix b/pkgs/development/embedded/platformio/default.nix
index fbcce7eae60..70a11f5736f 100644
--- a/pkgs/development/embedded/platformio/default.nix
+++ b/pkgs/development/embedded/platformio/default.nix
@@ -16,7 +16,7 @@ let
   self = {
     platformio-core = python3Packages.callPackage ./core.nix { inherit version src; };
 
-    platformio-chrootenv = callPackage ./chrootenv.nix { inherit version src; };
+    platformio-chrootenv = callPackage ./chrootenv.nix { };
   };
 
 in
diff --git a/pkgs/development/embedded/platformio/missing-udev-rules-nixos.patch b/pkgs/development/embedded/platformio/missing-udev-rules-nixos.patch
index 2a978496a19..4be06ceac8b 100644
--- a/pkgs/development/embedded/platformio/missing-udev-rules-nixos.patch
+++ b/pkgs/development/embedded/platformio/missing-udev-rules-nixos.patch
@@ -6,7 +6,5 @@ index ef1d3bab..445174fc 100644
      MESSAGE = (
          "Warning! Please install `99-platformio-udev.rules`. \nMore details: "
          "https://docs.platformio.org/en/latest/core/installation/udev-rules.html"
-+        "On NixOS add the platformio package to services.udev.packages"
++        "On NixOS add the platformio-core.udev package to services.udev.packages"
      )
- 
-