diff --git a/gnu/local.mk b/gnu/local.mk
index 86eb754352..9404e942eb 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1514,6 +1514,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/lua-5.4-liblua-so.patch			\
   %D%/packages/patches/luit-posix.patch				\
   %D%/packages/patches/lvm2-static-link.patch			\
+  %D%/packages/patches/lxappearance-gtk3-01-set-some-settings-gsettings.patch	\
+  %D%/packages/patches/lxappearance-gtk3-02-only-do-x11-on-x11.patch	\
   %D%/packages/patches/mailutils-variable-lookup.patch		\
   %D%/packages/patches/make-impure-dirs.patch			\
   %D%/packages/patches/mariadb-link-libatomic.patch		\
diff --git a/gnu/packages/lxde.scm b/gnu/packages/lxde.scm
index 0657db6eb8..bc0adc65eb 100644
--- a/gnu/packages/lxde.scm
+++ b/gnu/packages/lxde.scm
@@ -124,6 +124,35 @@ (define-public lxappearance
     (home-page "https://www.lxde.org/")
     (license license:gpl2+)))
 
+(define-public lxappearance-gtk3-wayland
+  (package
+    (inherit lxappearance)
+    (name "lxappearance-gtk3-wayland")
+    (version "0.6.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://sourceforge/lxde/"
+                       "LXAppearance/lxappearance-" version ".tar.xz"))
+       (sha256
+        (base32 "0f4bjaamfxxdr9civvy55pa6vv9dx1hjs522gjbbgx7yp1cdh8kj"))
+       (patches
+        (search-patches
+         ;;patches are created from github issues
+         "lxappearence-gtk3-01-only-do-x11-on-x11.patch"
+         "lxappearence-gtk3-02-set-some-settings-gsettings.patch"))))
+    (build-system gnu-build-system)
+    (inputs (list gtk+ dbus dbus-glib))
+    (arguments '(#:configure-flags '("--enable-gtk3=yes" "--enable-dbus=yes")))
+    (synopsis "LXDE GTK+ theme switcher")
+    (description "LXAppearance is a desktop-independent GTK+ theme switcher
+able to change themes, icons, and fonts used by GTK+ applications.
+This version is configured for supporting GTK+3 and dbus, and applies
+patches from LXDE's github to work on wayland as well.")
+    (home-page "https://lxde.github.io")
+    (license license:gpl2+)))
+
 (define-public lxrandr
   (package
     (name "lxrandr")
diff --git a/gnu/packages/patches/lxappearence-gtk3-01-only-do-x11-on-x11.patch b/gnu/packages/patches/lxappearence-gtk3-01-only-do-x11-on-x11.patch
new file mode 100644
index 0000000000..01e7e18fc3
--- /dev/null
+++ b/gnu/packages/patches/lxappearence-gtk3-01-only-do-x11-on-x11.patch
@@ -0,0 +1,41 @@
+From a066e5136692a909b62f29158c4a4b0f007e2b22 Mon Sep 17 00:00:00 2001
+From: wb9688 <wb9688@users.noreply.github.com>
+Date: Mon, 1 Mar 2021 16:40:34 +0100
+Subject: [PATCH] Only do X11-specific stuff on X11
+
+---
+ src/lxappearance.c | 18 +++++++++++-------
+ 1 file changed, 11 insertions(+), 7 deletions(-)
+
+diff --git a/src/lxappearance.c b/src/lxappearance.c
+index f31e794..4bd438a 100644
+--- a/src/lxappearance.c
++++ b/src/lxappearance.c
+@@ -117,16 +117,20 @@ static gboolean check_lxde_dbus()
+ 
+ static void check_lxsession()
+ {
+-    lxsession_atom = XInternAtom( GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), "_LXSESSION", True );
+-    if( lxsession_atom != None )
++    GdkDisplay *display = gdk_display_get_default();
++    if (GDK_IS_X11_DISPLAY(display))
+     {
+-        XGrabServer( GDK_DISPLAY_XDISPLAY(gdk_display_get_default()) );
+-        if( XGetSelectionOwner( GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), lxsession_atom ) )
++        lxsession_atom = XInternAtom( GDK_DISPLAY_XDISPLAY(display), "_LXSESSION", True );
++        if( lxsession_atom != None )
+         {
+-            app.use_lxsession = TRUE;
+-            lxsession_name = g_getenv("DESKTOP_SESSION");
++            XGrabServer( GDK_DISPLAY_XDISPLAY(display) );
++            if( XGetSelectionOwner( GDK_DISPLAY_XDISPLAY(display), lxsession_atom ) )
++            {
++                app.use_lxsession = TRUE;
++                lxsession_name = g_getenv("DESKTOP_SESSION");
++            }
++            XUngrabServer( GDK_DISPLAY_XDISPLAY(display) );
+         }
+-        XUngrabServer( GDK_DISPLAY_XDISPLAY(gdk_display_get_default()) );
+     }
+ 
+     /* Check Lxsession also with dbus */
diff --git a/gnu/packages/patches/lxappearence-gtk3-02-set-some-settings-gsettings.patch b/gnu/packages/patches/lxappearence-gtk3-02-set-some-settings-gsettings.patch
new file mode 100644
index 0000000000..00996b9f28
--- /dev/null
+++ b/gnu/packages/patches/lxappearence-gtk3-02-set-some-settings-gsettings.patch
@@ -0,0 +1,184 @@
+From 35a6bd68317972b7bfccf546de04060e09dbab93 Mon Sep 17 00:00:00 2001
+From: wb9688 <wb9688@users.noreply.github.com>
+Date: Tue, 2 Mar 2021 14:00:48 +0100
+Subject: [PATCH 1/2] Set some settings in GSettings as well
+
+---
+ src/lxappearance.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 94 insertions(+)
+
+diff --git a/src/lxappearance.c b/src/lxappearance.c
+index f31e794..18ba471 100644
+--- a/src/lxappearance.c
++++ b/src/lxappearance.c
+@@ -462,6 +462,97 @@ static void lxappearance_save_gtkrc()
+     g_free(file_path);
+ }
+ 
++#if GLIB_CHECK_VERSION(2, 40, 0)
++static void lxappearance_save_gsettings()
++{
++    GSettingsSchemaSource *source = g_settings_schema_source_get_default();
++    if (!source)
++        return;
++
++    GSettingsSchema *schema = g_settings_schema_source_lookup(source, "org.gnome.desktop.interface", TRUE);
++    if (!schema)
++        return;
++
++    GSettings *settings = g_settings_new("org.gnome.desktop.interface");
++
++    if (app.widget_theme && g_settings_schema_has_key(schema, "gtk-theme"))
++        g_settings_set_string(settings, "gtk-theme", app.widget_theme);
++
++    if (app.icon_theme && g_settings_schema_has_key(schema, "icon-theme"))
++        g_settings_set_string(settings, "icon-theme", app.icon_theme);
++
++    if (app.default_font && g_settings_schema_has_key(schema, "font-name"))
++        g_settings_set_string(settings, "font-name", app.default_font);
++
++    if (app.cursor_theme && g_settings_schema_has_key(schema, "cursor-theme"))
++        g_settings_set_string(settings, "cursor-theme", app.cursor_theme);
++
++    if (g_settings_schema_has_key(schema, "cursor-size"))
++        g_settings_set_int(settings, "cursor-size", app.cursor_theme_size);
++
++    if (app.font_rgba && g_settings_schema_has_key(schema, "font-antialiasing") && g_settings_schema_has_key(schema, "font-rgba-order"))
++    {
++        if (!app.enable_antialising)
++            g_settings_set_string(settings, "font-antialiasing", "none");
++        else if (strcmp(app.font_rgba, "none") == 0)
++            g_settings_set_string(settings, "font-antialiasing", "grayscale");
++        else
++        {
++            g_settings_set_string(settings, "font-antialiasing", "rgba");
++            if (strcmp(app.font_rgba, "rgb") == 0)
++                g_settings_set_string(settings, "font-rgba-order", "rgb");
++            else if (strcmp(app.font_rgba, "bgr") == 0)
++                g_settings_set_string(settings, "font-rgba-order", "bgr");
++            else if (strcmp(app.font_rgba, "vrgb") == 0)
++                g_settings_set_string(settings, "font-rgba-order", "vrgb");
++            else if (strcmp(app.font_rgba, "vbgr") == 0)
++                g_settings_set_string(settings, "font-rgba-order", "vbgr");
++        }
++    }
++
++    if (app.hinting_style && g_settings_schema_has_key(schema, "font-hinting"))
++    {
++        if (!app.enable_hinting || strcmp(app.hinting_style, "hintnone") == 0)
++            g_settings_set_string(settings, "font-hinting", "none");
++        else if (strcmp(app.hinting_style, "hintslight") == 0)
++            g_settings_set_string(settings, "font-hinting", "slight");
++        else if (strcmp(app.hinting_style, "hintmedium") == 0)
++            g_settings_set_string(settings, "font-hinting", "medium");
++        else if (strcmp(app.hinting_style, "hintfull") == 0)
++            g_settings_set_string(settings, "font-hinting", "full");
++    }
++
++    if (g_settings_schema_has_key(schema, "menus-have-icons"))
++        g_settings_set_boolean(settings, "menus-have-icons", app.menu_images);
++
++    if (g_settings_schema_has_key(schema, "buttons-have-icons"))
++        g_settings_set_boolean(settings, "buttons-have-icons", app.button_images);
++
++    if (g_settings_schema_has_key(schema, "toolbar-style"))
++    {
++        if (app.toolbar_style == 0)
++            g_settings_set_string(settings, "toolbar-style", "icons");
++        else if (app.toolbar_style == 1)
++            g_settings_set_string(settings, "toolbar-style", "text");
++        else if (app.toolbar_style == 2)
++            g_settings_set_string(settings, "toolbar-style", "both");
++        else if (app.toolbar_style == 3)
++            g_settings_set_string(settings, "toolbar-style", "both-horiz");
++    }
++
++    if (g_settings_schema_has_key(schema, "toolbar-icons-size"))
++    {
++        if (app.toolbar_icon_size == 2)
++            g_settings_set_string(settings, "toolbar-icons-size", "small");
++        else if (app.toolbar_icon_size == 3)
++            g_settings_set_string(settings, "toolbar-icons-size", "large");
++    }
++
++    g_settings_schema_unref(schema);
++    g_object_unref(settings);
++}
++#endif
++
+ static void lxappearance_save_lxsession()
+ {
+     char* rel_path = g_strconcat("lxsession/", lxsession_name, "/desktop.conf", NULL);
+@@ -532,6 +623,9 @@ static void on_dlg_response(GtkDialog* dlg, int res, gpointer user_data)
+         if(app.use_lxsession)
+             lxappearance_save_lxsession();
+         lxappearance_save_gtkrc();
++#if GLIB_CHECK_VERSION(2, 40, 0)
++        lxappearance_save_gsettings();
++#endif
+ 
+         reload_all_programs();
+ 
+
+From 703accd389b9dc6e9f5ed4fc3ffc23aacf893bc1 Mon Sep 17 00:00:00 2001
+From: wb9688 <wb9688@users.noreply.github.com>
+Date: Tue, 16 Mar 2021 19:20:08 +0100
+Subject: [PATCH 2/2] Remove toolbar icon size options other than large and
+ small
+
+---
+ data/ui/lxappearance.glade | 12 ------------
+ src/other.c                |  4 ++--
+ 2 files changed, 2 insertions(+), 14 deletions(-)
+
+diff --git a/data/ui/lxappearance.glade b/data/ui/lxappearance.glade
+index 19554cc..892c46d 100644
+--- a/data/ui/lxappearance.glade
++++ b/data/ui/lxappearance.glade
+@@ -2125,24 +2125,12 @@
+       <column type="gchararray"/>
+     </columns>
+     <data>
+-      <row>
+-        <col id="0" translatable="yes">Same as menu items</col>
+-      </row>
+       <row>
+         <col id="0" translatable="yes">Small toolbar icon</col>
+       </row>
+       <row>
+         <col id="0" translatable="yes">Large toolbar icon</col>
+       </row>
+-      <row>
+-        <col id="0" translatable="yes">Same as buttons</col>
+-      </row>
+-      <row>
+-        <col id="0" translatable="yes">Same as drag icons</col>
+-      </row>
+-      <row>
+-        <col id="0" translatable="yes">Same as dialogs</col>
+-      </row>
+     </data>
+   </object>
+   <object class="GtkListStore" id="tb_style_store">
+diff --git a/src/other.c b/src/other.c
+index d79b28d..aaaeb41 100644
+--- a/src/other.c
++++ b/src/other.c
+@@ -30,7 +30,7 @@ static void on_tb_style_changed(GtkComboBox* combo, gpointer user_data)
+ 
+ static void on_tb_icon_size_changed(GtkComboBox* combo, gpointer user_data)
+ {
+-    app.toolbar_icon_size = gtk_combo_box_get_active(combo) + GTK_ICON_SIZE_MENU;
++    app.toolbar_icon_size = gtk_combo_box_get_active(combo) + GTK_ICON_SIZE_SMALL_TOOLBAR;
+     lxappearance_changed();
+ }
+ 
+@@ -72,7 +72,7 @@ void other_init(GtkBuilder* b)
+     g_signal_connect(app.tb_style_combo, "changed", G_CALLBACK(on_tb_style_changed), NULL);
+ 
+     app.tb_icon_size_combo = GTK_WIDGET(gtk_builder_get_object(b, "tb_icon_size"));
+-    idx = app.toolbar_icon_size - GTK_ICON_SIZE_MENU;
++    idx = app.toolbar_icon_size - GTK_ICON_SIZE_SMALL_TOOLBAR;
+     gtk_combo_box_set_active(GTK_COMBO_BOX(app.tb_icon_size_combo), idx);
+     g_signal_connect(app.tb_icon_size_combo, "changed", G_CALLBACK(on_tb_icon_size_changed), NULL);
+ 
