code: private void writeModelInfo() throws IOException {
      startWritingTextFile("model.ini");
      writeln("[info]");
      for (Map.Entry<String, String> kv : lkv.entrySet()) {
        writelnkv(kv.getKey(), kv.getValue());
      }
  
      writeln("\n[columns]");
      for (String name : model.columnNames()) {
        writeln(name);
      }
  
      writeln("\n[domains]");
      String format = "%d: %d d%03d.txt";
      int domIndex = 0;
      String[][] domains = model.scoringDomains();
      for (int colIndex = 0; colIndex < domains.length; colIndex++) {
        if (domains[colIndex] != null)
          writeln(String.format(format, colIndex, domains[colIndex].length, domIndex++));
      }
      finishWritingTextFile();
    }
docs: Create the model.ini file containing 3 sections: [info], [columns] and [domains]. For example:
  [info]
  algo = Random Forest
  n_trees = 100
  n_columns = 25
  n_domains = 3
  ...
  h2o_version = 3.9.10.0
  <p>
  [columns]
  col1
  col2
  ...
  <p>
  [domains]
  5: 13 d000.txt
  6: 7 d001.txt
  12: 124 d002.txt
  <p>
  Here the [info] section lists general model information; [columns] is the list of all column names in the input
  dataframe; and [domains] section maps column numbers (for categorical features) to their domain definition files
  together with the number of categories to be read from that file.