-
-
Notifications
You must be signed in to change notification settings - Fork 6
functor
Victor Borja edited this page Nov 12, 2025
·
3 revisions
In Nix, any attribute set with a __functor attribute can be applied as if it were a function with internal state.
let
dup = {
by = 2;
__functor = self: num: self.by * num;
};
in dup 3 # => 6All aspects in flake-aspects have a default __functor attribute that looks like this:
{
nixos = { a = 1; };
__functor = aspect: context: aspect; # ignores context
}The default __functor ignores its given argument and always returns the aspect being applied.
This means you can provide another __functor that, instead of ignoring context, inspects it along with its own internal state and, as a result, returns a different aspect that will ultimately provide the settings.
{
nixos.foo = 24;
__functor = aspect: context:
if context.venus_in_aquarius then aspect
else { includes = [ den.aspects.other-stuff ] };
}