private static @NotNull List<OpenShellAction> detectShells() {
    List<OpenShellAction> actions = new ArrayList<>();
    if (SystemInfo.isUnix) {
      // Iterate over all combinations of path+shell to find executables.
      for (String unixShellName : UNIX_SHELL_NAMES) {
        List<String> validExecutablesDirectories = new ArrayList<>();
        for (String executablesDirectory : UNIX_BINARIES_DIRECTORIES) {
          var shellPath = executablesDirectory + "/" + unixShellName;
          if (Files.exists(Path.of(shellPath))) {
            validExecutablesDirectories.add(executablesDirectory);
          }
        }
        if (validExecutablesDirectories.size() > 1) {
          for (String executablesDirectory : validExecutablesDirectories) {
            // i.e. /bin/zsh -> zsh (/bin)
            ContainerUtil.addIfNotNull(actions, create(executablesDirectory + "/" + unixShellName, List.of(), unixShellName + " (" + executablesDirectory + ")"));
          }
        } else if (validExecutablesDirectories.size() == 1) {
          // If only 1 shell of type fount - then there is no need to specify path.
          ContainerUtil.addIfNotNull(actions, create(validExecutablesDirectories.get(0) + "/" + unixShellName, List.of(), unixShellName));
        }
      }
    }
    else if (SystemInfo.isWindows) {
      File powershell = PathEnvironmentVariableUtil.findInPath("powershell.exe");
      if (powershell != null && StringUtil.startsWithIgnoreCase(powershell.getAbsolutePath(), "C:\\Windows\\System32\\WindowsPowerShell\\")) {
        ContainerUtil.addIfNotNull(actions, create(powershell.getAbsolutePath(), List.of(), "Windows PowerShell"));
      }
      File cmd = PathEnvironmentVariableUtil.findInPath("cmd.exe");
      if (cmd != null && StringUtil.startsWithIgnoreCase(cmd.getAbsolutePath(), "C:\\Windows\\System32\\")) {
        ContainerUtil.addIfNotNull(actions, create(cmd.getAbsolutePath(), List.of(), "Command Prompt"));
      }
      File pwsh = PathEnvironmentVariableUtil.findInPath("pwsh.exe");
      if (pwsh != null && StringUtil.startsWithIgnoreCase(pwsh.getAbsolutePath(), "C:\\Program Files\\PowerShell\\")) {
        ContainerUtil.addIfNotNull(actions, create(pwsh.getAbsolutePath(), List.of(), "PowerShell"));
      }
      File gitBash = new File("C:\\Program Files\\Git\\bin\\bash.exe");
      if (gitBash.isFile()) {
        ContainerUtil.addIfNotNull(actions, create(gitBash.getAbsolutePath(), List.of(), "Git Bash"));
      }
      String cmderRoot = EnvironmentUtil.getValue("CMDER_ROOT");
      if (cmderRoot != null && cmd != null && StringUtil.startsWithIgnoreCase(cmd.getAbsolutePath(), "C:\\Windows\\System32\\")) {
        File cmderInitBat = new File(cmderRoot, "vendor\\init.bat");
        if (cmderInitBat.isFile()) {
          ContainerUtil.addIfNotNull(actions, create(cmd.getAbsolutePath(), List.of("/k", cmderInitBat.getAbsolutePath()), "Cmder"));
        }
      }
    }
    return actions;
  }
private static @NotNull List<OpenShellAction> detectShells()