If changing themes is not a problem, you can also use the Aeon series of themes which usually allow customizing the main menu. Of course, this is only a solution if you like the look of them, but they are generally customizable.
As a quick check for skins available for Kodi 18:
- Aeon (most versions except Tajo is a bit simple compared to others)
- Amber
- Unity (seems to share what I used in Aeon)
- Rapier (a bit more limited but can still add custom actions like System.Exec)
With these skins you can edit the home menu (through various screens under Skin Settings available at the "Interface" Settings menu of Kodi). There you can pick a custom command and use System.Exec
and System.ExecWait
. I did have issues on Windows with Kodi 18 and commands having a space in their path, this can be fixed by making the executable available in $PATH
and making sure the executable name doesn't contain spaces.
EDIT
I just realized you don't want to switch themes (I read not want to create one). For that, unfortunately the default (Estuary) skin doesn't offer customizability, however, you can edit addons/skin.estuary/xml/Home.xml
.
In this file, you can find this bit:
...
<content>
<item>
<label>$LOCALIZE[342]</label>
<onclick condition="Library.HasContent(movies) + Skin.HasSetting(home_no_categories_widget)">ActivateWindow(Videos,videodb://movies/,return)</onclick>
<onclick condition="Library.HasContent(movies) + !Skin.HasSetting(home_no_categories_widget)">ActivateWindow(Videos,videodb://movies/titles/,return)</onclick>
<onclick condition="!Library.HasContent(movies)">ActivateWindow(Videos,sources://video/,return)</onclick>
<property name="menu_id">$NUMBER[5000]</property>
<thumb>icons/sidemenu/movies.png</thumb>
<property name="id">movies</property>
<visible>!Skin.HasSetting(HomeMenuNoMovieButton)</visible>
</item>
...
Here you can change this to the following (as example):
...
<content>
<item>
<label>Firefox</label>
<onclick>System.Exec(firefox)</onclick>
</item>
<item>
<label>$LOCALIZE[342]</label>
<onclick condition="Library.HasContent(movies) + Skin.HasSetting(home_no_categories_widget)">ActivateWindow(Videos,videodb://movies/,return)</onclick>
<onclick condition="Library.HasContent(movies) + !Skin.HasSetting(home_no_categories_widget)">ActivateWindow(Videos,videodb://movies/titles/,return)</onclick>
<onclick condition="!Library.HasContent(movies)">ActivateWindow(Videos,sources://video/,return)</onclick>
<property name="menu_id">$NUMBER[5000]</property>
<thumb>icons/sidemenu/movies.png</thumb>
<property name="id">movies</property>
<visible>!Skin.HasSetting(HomeMenuNoMovieButton)</visible>
</item>
...
Which would place a Firefox menu item at the top of the menulist.

Note, while you can edit this addon inplace, it's likely to overwrite the changes when the skin updates. Therefore it's best to copy over the folder with a new name and update addon.xml to change the id of the plugin and optionally add your name to it. This is obviously more involved, but I think it's the only way you can have it without truly changing the skin and without writing a plugin from scratch.