| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- { inputs, ... }:
- {
- # The _module.args definitions are passed on to modules as arguments. E.g.
- # the module `{ pkgs ... }: { /* config */ }` implicitly uses
- # `_module.args.pkgs` (defined in this case by flake-parts).
- perSystem =
- { system, ... }:
- {
- _module.args = {
- # Note: bringing up https://zimbatm.com/notes/1000-instances-of-nixpkgs
- # again, the below creates several nixpkgs instances which the
- # flake-centric CLI will be forced to evaluate e.g. on `nix flake show`.
- #
- # This is currently "slow" and "expensive", on a certain scale.
- # This also isn't "right" in that this hinders dependency injection at
- # the level of flake inputs. This might get removed in the foreseeable
- # future.
- #
- # Note that you can use these expressions without Nix
- # (`pkgs.callPackage ./devops/nix/scope.nix { }` is the entry point).
- pkgsCuda = import inputs.nixpkgs {
- inherit system;
- # Ensure dependencies use CUDA consistently (e.g. that openmpi, ucc,
- # and ucx are built with CUDA support)
- config.cudaSupport = true;
- config.allowUnfreePredicate =
- p:
- builtins.all (
- license:
- license.free
- || builtins.elem license.shortName [
- "CUDA EULA"
- "cuDNN EULA"
- ]
- ) (p.meta.licenses or [ p.meta.license ]);
- };
- # Ensure dependencies use ROCm consistently
- pkgsRocm = import inputs.nixpkgs {
- inherit system;
- config.rocmSupport = true;
- };
- };
- };
- }
|