code: void init(String[] args, ProcessLauncherOptions options) {
          ProcessLauncherConfiguration plc = new ProcessLauncherConfiguration();
          plc.merge(options);
  
          JCommander commander = new JCommander();
          commander.setAcceptUnknownOptions(true);
          commander.addObject(plc);
          try {
              commander.parse(args);
              // we need to consider the selionConfig file when the caller is providing
              // a non-default selionConfig file location
              if (plc.getSeLionConfig() != SELION_CONFIG_FILE) {
                  // reload the config from the file
                  plc = ProcessLauncherConfiguration.loadFromFile(plc.getSeLionConfig());
                  // re-merge the options
                  plc.merge(options);
                  // re-parse the args
                  commander = new JCommander();
                  commander.setAcceptUnknownOptions(true);
                  commander.addObject(plc);
                  commander.parse(args);
              }
          } catch (ParameterException | IOException e) {
              LOGGER.log(Level.SEVERE, e.getMessage(), e);
              System.exit(1);
          }
          setLauncherOptions(plc);
  
          // save off all the command line that were provided.
          List<String> commands = new LinkedList<>(Arrays.asList(args));
          setCommands(commands);
  
          // setup the SeLion config
          ConfigParser.setConfigFile(plc.getSeLionConfig());
  
          InstallHelper.firstTimeSetup();
      }
docs: Init with the supplied dash {@code args} and the supplied {@link ProcessLauncherOptions}. All {@code args} take
  precedence over the {@code options} and/or other values.
  
  @param args
  The program arguments to use. Can be a mix of SeLion and selenium arguments.
  @param options
  {@link ProcessLauncherOptions} to consider