The asm plugin is an efficient tool for manually populating a board. Its flexible grouping and sorting configuration makes it able to schedule parts so that the board is easiest to populate. With the exclude_query configuration node, it is also capable of handling DNP (do not populate) or board build options.
The config node at plugins/asm1/exclude_query is either empty or contains a query expression. When empty, all subcircuits are presented in the asm() dialog. When non-empty, the query expression is evaluated for each subcircuit (being the @ variable in the expression). When the expression evaluates to true, the subcircuit is omitted from the build schedule.
Invent a subcircuit attribute for the purpose; let's call it dnp for this example. Set the dnp attribute to 1 on any subcircuit that should not be populated, then set plugins/asm1/exclude_query to:
@.a.dnp != ""
When the asm() action is invoked, the above query will exclude any subcircuit that has the dnp attribute set to any non-empty value.
Invent a subcircuit attribute for the purpose; let's call it option for this example. Set the option attribute to A or B on any subcircuit that should be be populated only for option A or option B, then set plugins/asm1/exclude_query to:
(@.a.option != "") && (@.a.option != "B")
When the asm() action is invoked, the above query will exclude any subcircuit that has the option attribute set and the value is not B. Or in short, it will present non-optional subcircuits and subcircuits tagged for the 'B' option.