This continues where d8f7f6a5ce left off. Similarly
to that commit, this commit this also points `sourceRoot`s to `src.name` and similar
instead of keeping hardcoded names, and edits other derivation attrs do do the same,
where appropriate.
Also, similarly to d8f7f6a5ce some of expressions this
edits use `srcs` attribute with customly-named sources, so they have to be moved
into `let` blocks to keep evaluation efficient (the other, worse, way to do this
would to recurcively refer to `elemAt n finalAttrs.srcs` or, similarly, with `rec`).
This PostScript file contains the full path of the dvips executable in
comments, therefore the resulting package gets a runtime dependency on
the texlive-combined-medium package, which adds almost 1GB to the
closure size.
The same documentation is still available in the PDF format, which is
probably more useful in 2023.
This causes collisions when NixOS is configured like
``` nix
{ pkgs, ... }:
{
services.udev.packages = [ pkgs.platformio ];
}
```
and would also cause a regression having to add the subirectory to the udev packages path:
``` nix
{ pkgs, ... }:
{
services.udev.packages = [ (pkgs.platformio-core.udev + "/99-platformio-udev.rules") ];
}
```
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.
PlatformIO is a pure python package that is in turn a package
manager. In a pure NixOS environment, this means that any downloaded
binary packages will not run. To make PlatformIO usable, there's a
chrootenv wrapper. However, in a mixed environment like other linux or
darwin, the pure python version will work, and in the case of darwin
only the pure version will work, since the chrootenv wrapper is not
supported.
To handle the above use cases we have:
* platformio -- unwrapped on darwin, wrapped on linux. Should always
provide a functional platformio.
* platformio-core -- always unwrapped (like "bintools-unwrapped") for
when the wrapper is explicitly not required. For
example, on other linux where the chrootenv is
not supported.