diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5ccd74d554..4f5bcaff10 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,7 @@ All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).
## [Unreleased]
+- Add new special platform ID for custom config scripts (eg. compatibility with retropiemenu)
- Ignore all known bios and devices for arcade/neogeo platform
- Fix Bug with small SHARE partition
- Add new Traditional Chinese Language
diff --git a/SYSTEMS.md b/SYSTEMS.md
index 7d94246527..73e035d010 100644
--- a/SYSTEMS.md
+++ b/SYSTEMS.md
@@ -227,3 +227,23 @@ EmulationStation where:
psp
```
+
+## System custom scripts / config
+
+### [sysconfig]
+
+You can create a "gamelist" which contains scripts.
+You could imagine a script wraper to handle .sh .py, and others...
+You could specify "sudo" in <command>, and imagine lot of things.
+As for your games, you can add <image> in your gamelist.xml to add some icons.
+
+``` xml
+
+ myconfig
+ Configuration
+ /path/to/scripts
+ .sh
+ bash %ROM /dev/tty
+ sysconfig
+
+```
\ No newline at end of file
diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp
index e2c0e9256c..6c895f8dc5 100644
--- a/es-app/src/PlatformId.cpp
+++ b/es-app/src/PlatformId.cpp
@@ -76,6 +76,8 @@ namespace PlatformIds
"zx81",
"moonlight",
+ "sysconfig", //Specific external script handler for configuration
+
"ignore", // do not allow scraping for this system
"invalid"
};
diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h
index 219f5f7a80..9aae6492db 100644
--- a/es-app/src/PlatformId.h
+++ b/es-app/src/PlatformId.h
@@ -76,6 +76,8 @@ namespace PlatformIds
ZX_81,
MOONLIGHT,
+ SYSCONFIG, //Specific external script handler for configuration
+
PLATFORM_IGNORE, // do not allow scraping for this system
PLATFORM_COUNT
};
diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp
index f239393ec1..cc1f9f81d8 100644
--- a/es-app/src/guis/GuiMenu.cpp
+++ b/es-app/src/guis/GuiMenu.cpp
@@ -479,7 +479,8 @@ GuiMenu::GuiMenu(Window *window) : GuiComponent(window), mMenu(window, _("MAIN M
// For each activated system
std::vector systems = SystemData::sSystemVector;
for (auto system = systems.begin(); system != systems.end(); system++) {
- if ((*system) != SystemData::getFavoriteSystem()) {
+ if ((*system) != SystemData::getFavoriteSystem()
+ && !(*system)->hasPlatformId(PlatformIds::SYSCONFIG)) {
ComponentListRow systemRow;
auto systemText = std::make_shared(mWindow, (*system)->getFullName(),
Font::get(FONT_SIZE_MEDIUM),
diff --git a/es-app/src/guis/GuiScraperStart.cpp b/es-app/src/guis/GuiScraperStart.cpp
index 0fb4ba519d..2d05764920 100644
--- a/es-app/src/guis/GuiScraperStart.cpp
+++ b/es-app/src/guis/GuiScraperStart.cpp
@@ -25,7 +25,7 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window),
mSystems = std::make_shared< OptionListComponent >(mWindow, _("SCRAPE THESE SYSTEMS"), true);
for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++)
{
- if(!(*it)->hasPlatformId(PlatformIds::PLATFORM_IGNORE))
+ if(!(*it)->hasPlatformId(PlatformIds::PLATFORM_IGNORE) && !(*it)->hasPlatformId(PlatformIds::SYSCONFIG))
mSystems->add((*it)->getFullName(), *it, !(*it)->getPlatformIds().empty());
}
mMenu.addWithLabel(_("SYSTEMS"), mSystems);
diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp
index ea464d7121..4177071e32 100644
--- a/es-app/src/views/SystemView.cpp
+++ b/es-app/src/views/SystemView.cpp
@@ -247,7 +247,9 @@ void SystemView::onCursorChanged(const CursorState& state)
// also change the text after we've fully faded out
setAnimation(infoFadeOut, 0, [this, gameCount, favoritesCount, gameNoHiddenCount, hiddenCount] {
char strbuf[256];
- if(favoritesCount == 0 && hiddenCount == 0) {
+ if (getSelected()->hasPlatformId(PlatformIds::SYSCONFIG)) {
+ snprintf(strbuf, 256, "%s", _("CONFIGURATION").c_str());
+ }else if(favoritesCount == 0 && hiddenCount == 0) {
snprintf(strbuf, 256, ngettext("%i GAME AVAILABLE", "%i GAMES AVAILABLE", gameNoHiddenCount).c_str(), gameNoHiddenCount);
}else if (favoritesCount != 0 && hiddenCount == 0) {
snprintf(strbuf, 256,