- Fix a strictness issue in
perInput
, affectinginputs'
,self'
. This has caused infinite recursions and potentially performance issues since the introduction of these module arguments.
-
Add
importApply
for bringing variables from the flake scope into module files. -
Add
mkDeferredModuleOption
as a generic name for the implementation ofmkPerSystemOption
.
- Add preliminary support for
disabledModules
for modules exposed via the importableflakeModules
module. This requires a Nixpkgs of 2023-03-09 or newer.
- Add importable
easyOverlay
module for defining an overlay "easily" by reusingperSystem
. This is not for consuming overlays.
-
Added a new
flake.flakeModules
option so a flake can expose a module to be used in a downstream flake's flake-parts usage..flakeModule
is now an alias for.flakeModules.default
.Option only available if
flake-parts.flakeModules.flakeModules
is imported.
-
The old syntax
mkFlake { inherit self; }
is now strongly discouraged in favor of:outputs = inputs@{ flake-parts, ... }: flake-parts.lib.mkFlake { inherit inputs; } { /* module */ }
This fixes an infinite recursion that occurs with the old syntax when using the
inputs
module argument inimports
.If you're under the impression that this already worked, that's probably because you were using
inputs
from the lexical scope (ie directly from the flake outputs function arguments), rather than in a separate module file.
- The
darwinModules
option has been removed. This was added in the early days without full consideration. The removal will have no effect on most flakes considering that theflake
option allows any attribute to be set. This attribute and related attributes should be added to the nix-darwin project instead.
-
The
nixpkgs
input has been renamed tonixpkgs-lib
to signify that the only dependency is on thelib
attribute, which can be provided by either thenixpkgs?dir=lib
subflake or by thenixpkgs
flake itself. -
The templates now use the default, fixed
nixpkgs?dir=lib
dependency instead of a followingnixpkgs
dependency.
-
perSystem
is not afunctionTo submodule
anymore, but adeferredModule
, which is a lot like a regular submodule, but possible to invoke multiple times, for eachsystem
.All
perSystem
value definitions must remove thesystem:
argument. If you needsystem
to be in scope, use the one in the module arguments.-perSystem = system: { config, lib, ... }: +perSystem = { config, lib, system, ... }:
All
perSystem
option declarations must now useflake-parts-lib.mkPerSystemOption
.{ options.perSystem = mkPerSystemOption ({ config, ... }: { options = { # ... }; # ... }); }
-
flake-modules-core
is now calledflake-parts
. -
flake.overlay
has been removed in favor offlake.overlays.default
.