anchor.diff:  
         name = mkOption {
           type = types.str;
  -        description = "The name of the group. If undefined, the name of the attribute set will be used.";
  +        description = ''
  +          The name of the group. If undefined, the name of the attribute set
  +          will be used.
  +        '';
         };
   
         gid = mkOption {
  -        type = with types; uniq int;
  -        description = "The GID of the group.";
  +        type = with types; nullOr int;
  +        default = null;
  +        description = ''
  +          The group GID. If the <literal>mutableUsers</literal> option
  +          is false, the GID cannot be null. Otherwise, the GID might be
  +          null, in which case a free GID is picked on activation (by the
  +          groupadd command).
  +        '';
         };
   
         members = mkOption {
  
positive.code: 
    groupFile = pkgs.writeText "group" (
      concatStringsSep "\n" (map (g: mkGroupEntry g.name) (
        sortOn "gid" (attrValues cfg.extraGroups)
      ))
    );
  
    passwdFile = pkgs.writeText "passwd" (
      concatStringsSep "\n" (map (u: mkPasswdEntry u.name) (
        sortOn "uid" (filter (u: u.createUser) (attrValues cfg.extraUsers))
      ))
    );
  
  
negative.code: 
    ids = config.ids;
    cfg = config.users;
  
    nonUidUsers = filterAttrs (n: u: u.uid == null) cfg.extraUsers;
    nonGidGroups = filterAttrs (n: g: g.gid == null) cfg.extraGroups;
  
    passwordDescription = ''
      The options <literal>hashedPassword</literal>,
  