diff --git a/electron/.gitignore b/electron/.gitignore
index b6d346320..9f6844f02 100644
--- a/electron/.gitignore
+++ b/electron/.gitignore
@@ -6,7 +6,6 @@ working-copy/
 src-gen/
 node_modules/
 build/yarn.lock
-webpack.config.js
 lib/
 
 # The electron-builder output.
diff --git a/electron/build/patch/main.js b/electron/build/patch/backend/main.js
similarity index 100%
rename from electron/build/patch/main.js
rename to electron/build/patch/backend/main.js
diff --git a/electron/build/patch/frontend/index.js b/electron/build/patch/frontend/index.js
new file mode 100644
index 000000000..1d6a9ff32
--- /dev/null
+++ b/electron/build/patch/frontend/index.js
@@ -0,0 +1,59 @@
+// Patch for the startup theme. Customizes the `ThemeService.get().defaultTheme();` to dispatch the default IDE2 theme based on the OS' theme.
+// For all subsequent starts of the IDE the theme applied will be the last one set by the user.
+
+// With the current version of Theia adopted (1.25) it is not possible to extend the `ThemeService`, it will be possible starting from Theia 1.27.
+// Once the version of Theia is updated, this patch will be removed and this functionality will be implemented via dependency injection.
+// Ideally, we should open a PR in Theia and add support for `light` and `dark` default themes in the app config.
+
+const {
+  ThemeService,
+  ThemeServiceSymbol,
+  BuiltinThemeProvider,
+} = require('@theia/core/lib/browser/theming');
+const {
+  ApplicationProps,
+} = require('@theia/application-package/lib/application-props');
+
+const lightTheme = 'arduino-theme';
+const darkTheme = 'arduino-theme-dark';
+const defaultTheme =
+  window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
+    ? darkTheme
+    : lightTheme;
+
+const arduinoDarkTheme = {
+  id: 'arduino-theme-dark',
+  type: 'dark',
+  label: 'Dark (Arduino)',
+  editorTheme: 'arduino-theme-dark',
+  activate() { },
+  deactivate() { }
+};
+
+const arduinoLightTheme = {
+  id: 'arduino-theme',
+  type: 'light',
+  label: 'Light (Arduino)',
+  editorTheme: 'arduino-theme',
+  activate() { },
+  deactivate() { }
+};
+
+if (!window[ThemeServiceSymbol]) {
+  const themeService = new ThemeService();
+  Object.defineProperty(themeService, 'defaultTheme', {
+    get: function () {
+      return (
+        this.themes[defaultTheme] ||
+        this.themes[ApplicationProps.DEFAULT.frontend.config.defaultTheme]
+      );
+    },
+  });
+  themeService.register(...BuiltinThemeProvider.themes, arduinoDarkTheme, arduinoLightTheme);
+  themeService.startupTheme();
+  themeService.setCurrentTheme(defaultTheme);
+  window[ThemeServiceSymbol] = themeService;
+}
+
+// Require the original, generated `index.js` for `webpack` as the next entry for the `bundle.js`.
+require('../../src-gen/frontend/index');
diff --git a/electron/build/template-package.json b/electron/build/template-package.json
index caa8087cd..9ce815e33 100644
--- a/electron/build/template-package.json
+++ b/electron/build/template-package.json
@@ -23,7 +23,7 @@
     "package": "cross-env DEBUG=* && electron-builder --publish=never",
     "package:publish": "cross-env DEBUG=* && electron-builder --publish=always",
     "download:plugins": "theia download:plugins",
-    "patch": "ncp ./patch/main.js ./src-gen/backend/main.js && node ./scripts/patch-theia-preload.js ./lib/index.html"
+    "patch": "ncp ./patch/backend/main.js ./src-gen/backend/main.js && node ./scripts/patch-theia-preload.js ./lib/index.html"
   },
   "engines": {
     "node": ">=14.0.0 <15"
@@ -152,4 +152,4 @@
     "vscode-language-pack-ja":"https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-ja/1.53.2/file/MS-CEINTL.vscode-language-pack-ja-1.53.2.vsix",
     "vscode-language-pack-tr": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-tr/1.53.2/file/MS-CEINTL.vscode-language-pack-tr-1.53.2.vsix"
   }
-}
\ No newline at end of file
+}
diff --git a/electron/build/webpack.config.js b/electron/build/webpack.config.js
new file mode 100644
index 000000000..bd042642a
--- /dev/null
+++ b/electron/build/webpack.config.js
@@ -0,0 +1,10 @@
+// @ts-check
+const config = require('./gen-webpack.config.js');
+const path = require('path');
+
+// Load the patched `index.js` that sets the desired theme in IDE2 based on the OS' theme.
+// The `patch/frontend/index.js` will require the original, generated `index.js`.
+// See: https://github.com/arduino/arduino-ide/pull/1160.
+config.entry.bundle = path.resolve(__dirname, 'patch/frontend/index.js');
+
+module.exports = config;
diff --git a/electron/packager/index.js b/electron/packager/index.js
index 2f216f45c..a5e785706 100644
--- a/electron/packager/index.js
+++ b/electron/packager/index.js
@@ -52,6 +52,7 @@
     'resources',
     'scripts',
     'template-package.json',
+    'webpack.config.js'
   ];
   fs.readdirSync(path('..', 'build'))
     .filter((filename) => resourcesToKeep.indexOf(filename) === -1)