docs: public final void setAppsRootDirectory(final String directory) throws URISyntaxException, IOException {
          this.appsRootDirectory = directory;
  
          final File realRoot;
          if (!directory.contains(":/")) {
              realRoot = new File(directory);
          } else {
              final Optional<File> fileOptional = this.configFileLoader.toFile(new URI(directory));
              if (fileOptional.isPresent()) {
                  realRoot = fileOptional.get();
              } else {
                  throw new IllegalArgumentException(
                          directory + " does not refer to a file on the current system.");
              }
          }
  
          final AppWalker walker = new AppWalker();
          for (File child: walker.getAppDirs(realRoot)) {
              final File configFile = new File(child, CONFIG_YAML);
              String appName = realRoot.toURI().relativize(child.toURI()).getPath().replace('/', ':');
              if (appName.endsWith(":")) {
                  appName = appName.substring(0, appName.length() - 1);
              }
              this.configurationFiles.put(appName, configFile.toURI());
          }
          if (this.configurationFiles.isEmpty()) {
              return;
          }
  
          // ensure there is a "default" app
          if (!this.configurationFiles.containsKey(DEFAULT_CONFIGURATION_FILE_KEY)) {
              pickDefaultApp();
          }
      }