query
On this page

pushDownProperties

lib.modules.pushDownProperties

Docs pulled from | This Revision | 11 minutes ago


Given a config set, expand mkMerge properties, and push down the other properties into the children. The result is a list of config sets that do not have properties at top-level. For example,

mkMerge [ { boot = set1; } (mkIf cond { boot = set2; services = set3; }) ]

is transformed into

[ { boot = set1; } { boot = mkIf cond set2; services = mkIf cond set3; } ].

This transform is the critical step that allows mkIf conditions to refer to the full configuration without creating an infinite recursion.

Inputs

cfg

1. Function argument


Noogle detected

Aliases

Implementation

The following is the current implementation of this function.

pushDownProperties = cfg:
    if cfg._type or "" == "merge" then
      concatMap pushDownProperties cfg.contents
    else if cfg._type or "" == "if" then
      map (mapAttrs (n: v: mkIf cfg.condition v)) (pushDownProperties cfg.content)
    else if cfg._type or "" == "override" then
      map (mapAttrs (n: v: mkOverride cfg.priority v)) (pushDownProperties cfg.content)
    else # FIXME: handle mkOrder?
      [ cfg ];