anchor.diff:  
     barModule = types.submodule {
       options = {
  +      id = mkOption {
  +        type = types.nullOr types.string;
  +        default = null;
  +        description = ''
  +          Specifies the bar ID for the configured bar instance.
  +          If this option is missing, the ID is set to bar-x, where x corresponds
  +          to the position of the embedding bar block in the config file.
  +        '';
  +      };
  +
         mode = mkOption {
           type = types.enum [ "dock" "hide" "invisible" ];
           default = "dock";
  
positive.code:   );
  
    colorSetStr = c: concatStringsSep " " [ c.border c.background c.text c.indicator c.childBorder ];
  
    criteriaStr = criteria: "[${concatStringsSep " " (mapAttrsToList (k: v: ''${k}="${v}"'') criteria)}]";
  
  
negative.code:     map (c: "assign ${criteriaStr c} ${workspace}") criteria
    );
  
    barStr = {
      id, mode, hiddenState, position, workspaceButtons,
      workspaceNumbers, command, statusCommand, colors, ...
    }: ''
      bar {
        ${optionalString (id != null) "id ${id}"}
        mode ${mode}
        hidden_state ${hiddenState}
        position ${position}
        status_command ${statusCommand}
        i3bar_command ${command}
        workspace_buttons ${if workspaceButtons then "yes" else "no"}
        strip_workspace_numbers ${if !workspaceNumbers then "yes" else "no"}
        colors {
          background ${colors.background}
          statusline ${colors.statusline}
          separator ${colors.separator}
          focused_workspace ${barColorSetStr colors.focusedWorkspace}
          active_workspace ${barColorSetStr colors.activeWorkspace}
          inactive_workspace ${barColorSetStr colors.inactiveWorkspace}
          urgent_workspace ${barColorSetStr colors.urgentWorkspace}
          binding_mode ${barColorSetStr colors.bindingMode}
        }
      }
    '';
  
  