diff --git a/all-modules.nix b/all-modules.nix index f6e508c..c694fd7 100644 --- a/all-modules.nix +++ b/all-modules.nix @@ -4,6 +4,7 @@ ./modules/checks.nix ./modules/darwinModules.nix ./modules/devShell.nix + ./modules/devShells.nix ./modules/flake.nix ./modules/legacyPackages.nix ./modules/nixosModules.nix diff --git a/modules/devShells.nix b/modules/devShells.nix new file mode 100644 index 0000000..21a79e5 --- /dev/null +++ b/modules/devShells.nix @@ -0,0 +1,55 @@ +{ config, lib, flake-modules-core-lib, ... }: +let + inherit (lib) + filterAttrs + mapAttrs + mkOption + optionalAttrs + types + ; + inherit (flake-modules-core-lib) + mkSubmoduleOptions + ; +in +{ + options = { + flake = mkSubmoduleOptions { + devShells = mkOption { + type = types.lazyAttrsOf (types.lazyAttrsOf types.package); + default = { }; + description = '' + Per system an attribute set of packages used as shells. + nix develop .# will run devShells... + ''; + }; + }; + }; + config = { + flake.devShells = + mapAttrs + (k: v: v.devShells) + (filterAttrs + (k: v: v.devShells != null) + config.allSystems + ); + + perInput = system: flake: + optionalAttrs (flake?devShells.${system}) { + devShells = flake.devShells.${system}; + }; + + perSystem = system: { config, ... }: { + _file = ./devShells.nix; + options = { + devShells = mkOption { + type = types.lazyAttrsOf types.package; + default = { }; + description = '' + An attribute set of packages to be built by nix develop .#. + nix build .# will run devShells.. + ''; + }; + }; + }; + }; +}