diff --git a/src/frontend-common/common_host_interface.cpp b/src/frontend-common/common_host_interface.cpp
index 3416cecc0..88005e265 100644
--- a/src/frontend-common/common_host_interface.cpp
+++ b/src/frontend-common/common_host_interface.cpp
@@ -225,6 +225,8 @@ static void PrintCommandLineHelp(const char* progname, const char* frontend_name
   std::fprintf(stderr, "  -nocontroller: Prevents the emulator from polling for controllers.\n"
                        "                 Try this option if you're having difficulties starting\n"
                        "                 the emulator.\n");
+  std::fprintf(stderr, "  -settings <filename>: Loads a custom settings configuration from the\n"
+                       "    specified filename. Default settings applied if file not found.\n");
   std::fprintf(stderr, "  --: Signals that no more arguments will follow and the remaining\n"
                        "    parameters make up the filename. Use when the filename contains\n"
                        "    spaces or starts with a dash.\n");
@@ -323,6 +325,11 @@ bool CommonHostInterface::ParseCommandLineParameters(int argc, char* argv[],
         state_index = -1;
         continue;
       }
+      else if (CHECK_ARG_PARAM("-settings"))
+      {
+        m_settings_filename = argv[++i];
+        continue;
+      }
       else if (CHECK_ARG("--"))
       {
         no_more_args = true;
@@ -1956,6 +1963,17 @@ bool CommonHostInterface::SaveInputProfile(const char* profile_path, SettingsInt
 
 std::string CommonHostInterface::GetSettingsFileName() const
 {
+  if (!m_settings_filename.empty())
+  {
+    if (!FileSystem::FileExists(m_settings_filename.c_str()))
+    {
+      Log_ErrorPrintf("Could not find settings file %s, using default", m_settings_filename.c_str());
+    }
+    else
+    {
+      return GetUserDirectoryRelativePath(m_settings_filename.c_str());
+    }
+  }
   return GetUserDirectoryRelativePath("settings.ini");
 }
 
diff --git a/src/frontend-common/common_host_interface.h b/src/frontend-common/common_host_interface.h
index 89be710a6..d7500147e 100644
--- a/src/frontend-common/common_host_interface.h
+++ b/src/frontend-common/common_host_interface.h
@@ -345,6 +345,8 @@ protected:
   std::deque<OSDMessage> m_osd_messages;
   std::mutex m_osd_messages_lock;
 
+  std::string m_settings_filename;
+
   bool m_frame_step_request = false;
   bool m_fast_forward_enabled = false;
   bool m_timer_resolution_increased = false;