diff --git a/core/config/schema/core.data_types.schema.yml b/core/config/schema/core.data_types.schema.yml
index 1d0fc29..50d0237 100644
--- a/core/config/schema/core.data_types.schema.yml
+++ b/core/config/schema/core.data_types.schema.yml
@@ -120,6 +120,11 @@ action_configuration_default:
   sequence:
     - type: string
 
+# Theme settings schema is automatically applied to a theme's
+# THEME_NAME.settings configuration unless the theme provides its own schema.
+# Static analysis of configuration objects using schema will have to duplicate
+# the system_config_schema_info_alter() to determine a theme's
+# THEME_NAME.settings schema.
 theme_settings:
   type: mapping
   mapping:
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 32193be..71d4a75 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -1313,3 +1313,38 @@ function system_path_insert() {
 function system_path_delete($path) {
   \Drupal::service('path.alias_manager')->cacheClear();
 }
+
+/**
+ * Implements hook_config_schema_info_alter().
+ */
+function system_config_schema_info_alter(&$definitions) {
+  // Provide a default schema for all theme settings files if the theme does
+  // provide its own schema already.
+  foreach (\Drupal::service('theme_handler')->listInfo(TRUE) as $name => $theme) {
+    $config_name = $name . '.settings';
+    if (!isset($definitions[$config_name])) {
+      // Create a list of possible schema keys.
+      if (isset($theme->base_themes)) {
+        $schema_keys = array_reverse(array_keys($theme->base_themes));
+        array_walk($schema_keys, function (&$theme) {
+          $theme = $theme . '.settings';
+        });
+      }
+      $schema_keys[] = 'theme_settings';
+
+      // Create all the schema keys so that theme's inherit the schema from
+      // their base theme.
+      foreach ($schema_keys as $schema_key) {
+        $definitions[$config_name] = array(
+          'type' => $schema_key,
+          'label' => $name . ' settings',
+        );
+        $config_name = $schema_key;
+        if (isset($definitions[$config_name])) {
+          // No need to continue building the base theme schema chain.
+          break;
+        }
+      }
+    }
+  }
+}
diff --git a/core/themes/bartik/config/schema/bartik.schema.yml b/core/themes/bartik/config/schema/bartik.schema.yml
deleted file mode 100644
index ef355e3..0000000
--- a/core/themes/bartik/config/schema/bartik.schema.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-# Schema for the configuration files of the Bartik theme.
-
-bartik.settings:
-  type: theme_settings
-  label: 'Bartik settings'
diff --git a/core/themes/seven/config/schema/seven.schema.yml b/core/themes/seven/config/schema/seven.schema.yml
deleted file mode 100644
index 0ff253c..0000000
--- a/core/themes/seven/config/schema/seven.schema.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-# Schema for the configuration files of the Seven theme.
-
-seven.settings:
-  type: theme_settings
-  label: 'Bartik settings'
