diff --git a/docs/scripting-api.rst b/docs/scripting-api.rst
index 3657c336946ee580c029d9b5a19e818b31ba82c2..07185a42525653cf2703ae64d0766b9b3e7f236d 100644
--- a/docs/scripting-api.rst
+++ b/docs/scripting-api.rst
@@ -1198,6 +1198,16 @@ omitted.
 
    Sets clipboard data for menu commands.
 
+.. js:function:: styles()
+
+   List available styles for ``style`` option.
+
+   To change or update style use::
+
+   .. code-block:: js
+
+       config("style", styleName)
+
 Types
 -----
 
diff --git a/src/app/clipboardserver.cpp b/src/app/clipboardserver.cpp
index 6c0820f8685f7088a48d2db7af9c60116c3b5803..e6fde889193568768ec89197ce5a5045b994a289 100644
--- a/src/app/clipboardserver.cpp
+++ b/src/app/clipboardserver.cpp
@@ -50,6 +50,7 @@
 #include <QMessageBox>
 #include <QMimeData>
 #include <QSessionManager>
+#include <QStyleFactory>
 #include <QTextEdit>
 
 #ifdef NO_GLOBAL_SHORTCUTS
@@ -655,11 +656,24 @@ void ClipboardServer::loadSettings()
 
     m_sharedData->itemFactory->loadItemFactorySettings(&settings);
 
+    AppConfig appConfig;
+
+    const QString styleName = appConfig.option<Config::style>();
+    if ( !styleName.isEmpty() ) {
+        log( QString("Style: %1").arg(styleName) );
+        QStyle *style = QStyleFactory::create(styleName);
+        if (style) {
+            QApplication::setStyle(style);
+        } else {
+            const QString styles = QStyleFactory::keys().join(", ");
+            log( QString("Failed to set style, valid are: %1").arg(styles), LogWarning );
+        }
+    }
+
     settings.beginGroup("Theme");
     m_sharedData->theme.loadTheme(settings);
     settings.endGroup();
 
-    AppConfig appConfig;
     m_sharedData->editor = appConfig.option<Config::editor>();
     m_sharedData->maxItems = appConfig.option<Config::maxitems>();
     m_sharedData->textWrap = appConfig.option<Config::text_wrap>();
@@ -685,6 +699,8 @@ void ClipboardServer::loadSettings()
         startMonitoring();
     }
 
+    m_updateThemeTimer.stop();
+
     COPYQ_LOG("Configuration loaded");
 }
 
diff --git a/src/common/appconfig.h b/src/common/appconfig.h
index 17e99b73708697da056a3619b067f3b620cfdbf9..94c0ec4b0f5de8befa5478ebc06be93378ced7f8 100644
--- a/src/common/appconfig.h
+++ b/src/common/appconfig.h
@@ -403,6 +403,10 @@ struct window_wait_for_modifiers_released_ms : Config<int> {
     static Value defaultValue() { return 50; }
 };
 
+struct style : Config<QString> {
+    static QString name() { return "style"; }
+};
+
 } // namespace Config
 
 class AppConfig final
diff --git a/src/gui/commandcompleterdocumentation.h b/src/gui/commandcompleterdocumentation.h
index 54b6572d79f905915957df552061eae2e1623e7f..2e2934fcf36c6f8ce9b4989d8c810f001e4f0caa 100644
--- a/src/gui/commandcompleterdocumentation.h
+++ b/src/gui/commandcompleterdocumentation.h
@@ -169,6 +169,7 @@ void addDocumentation(AddDocumentationCallback addDocumentation)
     addDocumentation("showDataNotification", "showDataNotification()", "Show notification for current data.");
     addDocumentation("hideDataNotification", "hideDataNotification()", "Hide notification for current data.");
     addDocumentation("setClipboardData", "setClipboardData()", "Sets clipboard data for menu commands.");
+    addDocumentation("styles", "styles()", "List available styles for `style` option.");
     addDocumentation("ByteArray", "ByteArray", "Wrapper for QByteArray Qt class.");
     addDocumentation("File", "File", "Wrapper for QFile Qt class.");
     addDocumentation("Dir", "Dir", "Wrapper for QDir Qt class.");
diff --git a/src/gui/configurationmanager.cpp b/src/gui/configurationmanager.cpp
index 32e3907c4c29913616da30ce07d0747f74017590..ca9a90244059f14f1d371f213218ab4c3a305a6b 100644
--- a/src/gui/configurationmanager.cpp
+++ b/src/gui/configurationmanager.cpp
@@ -344,6 +344,8 @@ void ConfigurationManager::initOptions()
     bind<Config::window_wait_after_raised_ms>();
     bind<Config::window_key_press_time_ms>();
     bind<Config::window_wait_for_modifiers_released_ms>();
+
+    bind<Config::style>();
 }
 
 template <typename Config, typename Widget>
diff --git a/src/scriptable/scriptable.cpp b/src/scriptable/scriptable.cpp
index 85cf18be5aaaf37f94a24e37fd2b61f772dd016c..97d0385dac8d5688e9f58c655245c9e1d0f97e59 100644
--- a/src/scriptable/scriptable.cpp
+++ b/src/scriptable/scriptable.cpp
@@ -2704,6 +2704,11 @@ QJSValue Scriptable::clipboardFormatsToSave()
     return toScriptValue(formats, this);
 }
 
+QJSValue Scriptable::styles()
+{
+    return toScriptValue( m_proxy->styles(), this );
+}
+
 void Scriptable::onExecuteOutput(const QByteArray &output)
 {
     m_executeStdoutData.append(output);
diff --git a/src/scriptable/scriptable.h b/src/scriptable/scriptable.h
index 7516aa7c6d572e841b48c7a2faf4c40f6dfa9da9..f4afe84824c07b70d4a4e5d3d9604db8d3d940a8 100644
--- a/src/scriptable/scriptable.h
+++ b/src/scriptable/scriptable.h
@@ -388,6 +388,8 @@ public slots:
 
     QJSValue clipboardFormatsToSave();
 
+    QJSValue styles();
+
 signals:
     void finished();
     void dataReceived(const QByteArray &data);
diff --git a/src/scriptable/scriptableproxy.cpp b/src/scriptable/scriptableproxy.cpp
index d51284160953614a14184e87d8b8590e98e8ff68..c80632734e4f703a10e1259176f59d59d7e7e87f 100644
--- a/src/scriptable/scriptableproxy.cpp
+++ b/src/scriptable/scriptableproxy.cpp
@@ -79,6 +79,7 @@
 #include <QScreen>
 #include <QShortcut>
 #include <QSpinBox>
+#include <QStyleFactory>
 #include <QTextEdit>
 #include <QUrl>
 
@@ -2250,6 +2251,12 @@ bool ScriptableProxy::hasClipboardFormat(const QString &mime, ClipboardMode mode
     return data && data->hasFormat(mime);
 }
 
+QStringList ScriptableProxy::styles()
+{
+    INVOKE(styles, ());
+    return QStyleFactory::keys();
+}
+
 ClipboardBrowser *ScriptableProxy::fetchBrowser(const QString &tabName)
 {
     if (tabName.isEmpty()) {
diff --git a/src/scriptable/scriptableproxy.h b/src/scriptable/scriptableproxy.h
index 305ec800de9740d9b1b5e34a8e22c8f189486dbc..c400f9d088e8bb9d7a4ed3e2db17959233b86178 100644
--- a/src/scriptable/scriptableproxy.h
+++ b/src/scriptable/scriptableproxy.h
@@ -253,6 +253,8 @@ public slots:
     QByteArray getClipboardData(const QString &mime, ClipboardMode mode);
     bool hasClipboardFormat(const QString &mime, ClipboardMode mode);
 
+    QStringList styles();
+
 signals:
     void functionCallFinished(int functionCallId, const QVariant &returnValue);
     void inputDialogFinished(int dialogId, const NamedValueList &result);